5

http://www.developers.elsevier.com/action/devprojectsに登録しました。プロジェクトを作成し、scopus キーを取得しました。

ここに画像の説明を入力

firstnameさて、この生成されたキーを使用して、lastnameとで作成者を見つけたいと思いますsubjectarea。Scopus へのアクセスが許可されている大学のネットワークからリクエストを送信します (Scopus 検索への完全な手動アクセスがあり、Firefox から問題なく使用できます)。ただし、簡単なスクリプトを作成して、Scopus マイニングを自動化したいと考えていました。firstname著者の、lastnameおよびを指定して、その著者の出版物を検索したいと思いますsubjectarea

これが私のコードです:

# !/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import json
from scopus import SCOPUS_API_KEY


scopus_author_search_url = 'http://api.elsevier.com/content/search/author?'
headers = {'Accept':'application/json', 'X-ELS-APIKey': SCOPUS_API_KEY}
search_query = 'query=AUTHFIRST(%) AND AUTHLASTNAME(%s) AND SUBJAREA(%s)' % ('John', 'Kitchin', 'COMP')

# api_resource = "http://api.elsevier.com/content/search/author?apiKey=%s&" % (SCOPUS_API_KEY)

# request with first searching page
page_request = requests.get(scopus_author_search_url + search_query, headers=headers)
print page_request.url

# response to json
page = json.loads(page_request.content.decode("utf-8"))
print page

SCOPUS_API_KEYのようになりますSCOPUS_API_KEY="xxxxxxxx"

大学のネットワークから scopus にフル アクセスできますが、次のような応答が返ってきます。

{u'service-error': {u'status': {u'statusText': u'このリソースにアクセスするには、リクエスターの構成設定が不十分です。', u'statusCode': u'AUTHENTICATION_ERROR'}}}

生成されたリンクは次のようになります XML ファイルを示します。

<service-error><status>
  <statusCode>AUTHORIZATION_ERROR</statusCode>
  <statusText>No APIKey provided for request</statusText>
</status></service-error>

または、 を に変更すると、次のscopus_author_search_urlよう"http://api.elsevier.com/content/search/author?apiKey=%s&" % (SCOPUS_API_KEY)になります。

{u'service-error': {u'status': {u'statusText': u'Requestor configuration settings insufficient for access to this resource.', u'statusCode': u'AUTHENTICATION_ERROR'}}}および XML ファイル:

<service-error>
<status>
<statusCode>AUTHENTICATION_ERROR</statusCode>
<statusText>Requestor configuration settings insufficient for access to this resource.</statusText>
</status>
</service-error>

この問題の原因は何ですか?どうすれば修正できますか?

4

2 に答える 2

4

API キーを登録し、最初に次の URL でテストしました。

http://api.elsevier.com/content/search/author?apikey=4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43&query=AUTHFIRST%28John%29+AND+AUTHLASTNAME%28Kitchin%29+AND+SUBJAREA%28COMP%29

これは私の大学のネットワークからはうまくいきます。2 つ目の API キーもテストしたので、大学のドメインに登録された Web サイトと、登録された Web サイトhttp://apitest.example.comで 1 つを検証し、問題の原因として登録に使用されたドメイン名を除外しました。

これをテストしました

  1. ブラウザで、
  2. ヘッダーのAPIキーと両方のPythonコードを使用します。私があなたのコードに加えた唯一の変更は、削除することです

    from scopus import SCOPUS_API_KEY
    

    と追加

    SCOPUS_API_KEY ='4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43'
    
  3. ヘッダーの代わりに URL に apikey を配置するように調整された Python コードを使用します。

いずれの場合も、クエリは 2 人の著者を返します。1 人はカーネギー メロン大学、もう 1 人はパロ アルト大学です。

エラー メッセージを再現できません。elsevier に登録されていない IP アドレス (自宅のコンピューターなど) から API キーを使用しようとすると、別のエラーが表示されます。

<service-error>
  <status>
    <statusCode>AUTHENTICATION_ERROR</statusCode>
    <statusText>Client IP Address: xxx.yyy.aaa.bbb does not resolve to an account</statusText>
   </status>
</service-error>

大学のネットワークからランダムな (間違った) API キーを使用すると、

<service-error>
    <status>
        <statusCode>AUTHORIZATION_ERROR</statusCode>
        <statusText>APIKey <mad3upa1phanum3r1ck3y> with IP address <my.uni.IP.add> is unrecognized or has insufficient privileges for access to this resource</statusText>
    </status>
</service-error>

デバッグ手順

問題を再現できないため、解決に使用できるいくつかの診断手順を次に示します。

  1. uni でブラウザを使用して、実際に URL にキーを指定して API クエリを送信します (つまり、上記の URL をコピーしてアドレス バーに貼り付け、キーを置き換えて、XML が返されるかどうかを確認します)。

  2. 1 が期待する XML を返す場合は、Python 経由でリクエストを送信します。最初に、正確な URL を Python に直接コピーし ( を介し%sた変数置換やヘッダーの apikey なし)、単純に a.get()を実行します。

  3. 2 が正しく返された場合SCOPUS_API_KEYは、正確なキー値を保持していることを確認してください。つまりprint 'SCOPUS_API_KEY'、apikey を返す必要があります。4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43

  4. 1 がエラーを返した場合、uni が (何らかの理由で) 作成者のクエリ API にアクセスできていないようです。手動検索を実行できることを考えると、これはあまり意味がありませんが、それが私が結論付けることができるすべてです

ドキュメント

参考までに、認証アルゴリズムのドキュメントはこちらにありますが、従うのは簡単ではありません。あなたは認証オプション 1 に従っており、あなたの方法はうまくいくはずです。

注: API は1 週間あたり 5000 件の著者の取得に制限されています。ループで多くのクエリを実行した場合、それらが失敗したとしても、それを超えている可能性があります...

于 2015-08-19T11:38:50.160 に答える