使用 Scopus 从 Scopus 获取作者的文章 API (AUTHENTICATION_ERROR)
Getting author's articles from Scopus using Scopus API (AUTHENTICATION_ERROR)
我已经在 http://www.developers.elsevier.com/action/devprojects 注册了。我创建了一个项目并获得了我的 scopus 密钥:
现在,使用这个生成的密钥,我想找到 firstname
、lastname
和 subjectarea
的作者。我从我的大学网络发出请求,允许访问 Scopus(我可以完全手动访问 Scopus 搜索,从 Firefox 使用它没有问题)。但是,我想通过编写一个简单的脚本来自动化我的 Scopus 挖掘。我想通过提供 his/her 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'Requestor
configuration settings insufficient for access to this resource.',
u'statusCode': u'AUTHENTICATION_ERROR'}}}
生成的 link 看起来像这样:http://api.elsevier.com/content/search/author?query=AUTHFIRST(John)%20AND%20AUTHLASTNAME(Kitchin)%20AND%20SUBJAREA(COMP) 当我点击它时,它显示一个 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>
这个问题可能是什么原因造成的,我该如何解决?
我刚刚注册了一个 API 密钥并首先用这个 URL:
测试了它
这在我的大学网络中运行良好。我还测试了第二个 API 密钥,所以验证了一个在我的大学域上注册了网站,一个注册了网站 http://apitest.example.com,排除了用于注册的域名作为问题的根源。
我测试了这个
- 在浏览器中,
使用您的 python 代码和 header 中的 api 键。我对您的代码所做的唯一更改是删除
from scopus import SCOPUS_API_KEY
并添加
SCOPUS_API_KEY ='4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43'
- 使用您的 python 代码将 api 键放入 URL 而不是 header 中。
在所有情况下,查询 return 有两位作者,一位在卡内基梅隆大学,一位在帕洛阿尔托。
我无法复制您的错误信息。如果我尝试从未在 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>
调试步骤
由于我无法复制您的问题 - 您可以使用以下诊断步骤来解决问题:
在 uni 使用您的浏览器实际提交 api 查询,并在 URL 中输入您的密钥(即复制上面的 URL,将其粘贴到地址栏,替换你的密钥,看看你是否得到 XML 回来)
如果 1 return 是您期望的 XML,请继续通过 Python 提交请求 - 首先,直接复制准确的 URL进入 Python(没有通过 %s
进行变量替换,header 中没有 api 键),然后简单地对其执行 .get()
。
如果 2 return 正确,请确保您的 SCOPUS_API_KEY
持有准确的键值,不多也不少。即 print 'SCOPUS_API_KEY'
应该 return 你的 api 密钥:4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43
如果 1 return 是错误,那么您的 uni(无论出于何种原因)似乎无法访问作者查询 API。鉴于您可以执行手动搜索,这没有多大意义,但这就是我可以得出的结论
文档
参考认证算法文档is here,但遵循起来不是很简单。您正在使用身份验证选项 1,您的方法应该可以正常工作。
N.B。 API 限制为 5000 author retrievals per week。如果你在循环中有运行很多查询,即使它们失败了,也有可能你已经超出了那个...
供日后参考。 OP 使用的包 scopus
早已重命名为 pybliometrics
.
现在你可以做到
from pybliometrics.scopus import AuthorSearch
q = "AUTHFIRST(John) AND AUTHLASTNAME(Kitchin) AND SUBJAREA(COMP)"
s = AuthorSearch(q) # handles access, retrieval, parsing and even caches results
print(s)
results = s.authors # Holds all the information as a list of namedtuples
print(results) # You can put this into a pandas DataFrame as well
我已经在 http://www.developers.elsevier.com/action/devprojects 注册了。我创建了一个项目并获得了我的 scopus 密钥:
现在,使用这个生成的密钥,我想找到 firstname
、lastname
和 subjectarea
的作者。我从我的大学网络发出请求,允许访问 Scopus(我可以完全手动访问 Scopus 搜索,从 Firefox 使用它没有问题)。但是,我想通过编写一个简单的脚本来自动化我的 Scopus 挖掘。我想通过提供 his/her 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'Requestor configuration settings insufficient for access to this resource.', u'statusCode': u'AUTHENTICATION_ERROR'}}}
生成的 link 看起来像这样:http://api.elsevier.com/content/search/author?query=AUTHFIRST(John)%20AND%20AUTHLASTNAME(Kitchin)%20AND%20SUBJAREA(COMP) 当我点击它时,它显示一个 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>
这个问题可能是什么原因造成的,我该如何解决?
我刚刚注册了一个 API 密钥并首先用这个 URL:
测试了它这在我的大学网络中运行良好。我还测试了第二个 API 密钥,所以验证了一个在我的大学域上注册了网站,一个注册了网站 http://apitest.example.com,排除了用于注册的域名作为问题的根源。
我测试了这个
- 在浏览器中,
使用您的 python 代码和 header 中的 api 键。我对您的代码所做的唯一更改是删除
from scopus import SCOPUS_API_KEY
并添加
SCOPUS_API_KEY ='4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43'
- 使用您的 python 代码将 api 键放入 URL 而不是 header 中。
在所有情况下,查询 return 有两位作者,一位在卡内基梅隆大学,一位在帕洛阿尔托。
我无法复制您的错误信息。如果我尝试从未在 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>
调试步骤
由于我无法复制您的问题 - 您可以使用以下诊断步骤来解决问题:
在 uni 使用您的浏览器实际提交 api 查询,并在 URL 中输入您的密钥(即复制上面的 URL,将其粘贴到地址栏,替换你的密钥,看看你是否得到 XML 回来)
如果 1 return 是您期望的 XML,请继续通过 Python 提交请求 - 首先,直接复制准确的 URL进入 Python(没有通过
%s
进行变量替换,header 中没有 api 键),然后简单地对其执行.get()
。如果 2 return 正确,请确保您的
SCOPUS_API_KEY
持有准确的键值,不多也不少。即print 'SCOPUS_API_KEY'
应该 return 你的 api 密钥:4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43
如果 1 return 是错误,那么您的 uni(无论出于何种原因)似乎无法访问作者查询 API。鉴于您可以执行手动搜索,这没有多大意义,但这就是我可以得出的结论
文档
参考认证算法文档is here,但遵循起来不是很简单。您正在使用身份验证选项 1,您的方法应该可以正常工作。
N.B。 API 限制为 5000 author retrievals per week。如果你在循环中有运行很多查询,即使它们失败了,也有可能你已经超出了那个...
供日后参考。 OP 使用的包 scopus
早已重命名为 pybliometrics
.
现在你可以做到
from pybliometrics.scopus import AuthorSearch
q = "AUTHFIRST(John) AND AUTHLASTNAME(Kitchin) AND SUBJAREA(COMP)"
s = AuthorSearch(q) # handles access, retrieval, parsing and even caches results
print(s)
results = s.authors # Holds all the information as a list of namedtuples
print(results) # You can put this into a pandas DataFrame as well