我在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 pageSCOPUS_API_KEY看起来就像这样:SCOPUS_API_KEY="xxxxxxxx"。
尽管可以通过我的大学网络完全访问scopus,但我得到了这样的响应:
{u‘’service ERROR‘:{u’‘statusText’:U‘’statusText‘:U’‘Requestor配置设置不足以访问此资源。’,u‘’statusCode‘:U’‘AUTHENTICATION_ERROR’}
生成的链接如下所示: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>造成这个问题的原因是什么,我该如何解决呢?
发布于 2015-08-19 11:38:50
我刚刚注册了一个API密钥,并首先用这个URL测试了它:
http://api.elsevier.com/content/search/author?apikey=4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43&query=AUTHFIRST%28John%29+AND+AUTHLASTNAME%28Kitchin%29+AND+SUBJAREA%28COMP%29
这在我的大学网络上运行得很好。我还测试了第二个API密钥,因此已经验证了一个与注册网站在我的大学领域,一个与注册网站http://apitest.example.com,排除了域名注册为您的问题来源。
我测试了这个
在所有情况下,查询都返回两个作者,一个在卡内基梅隆,一个在帕洛阿尔托。
我不能复制你的错误信息。如果我尝试使用未在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>调试步骤
由于我无法复制您的问题-下面是一些您可以用来解决的诊断步骤:
%s进行变量替换,在头中不使用每个键),只需在其上执行一个.get()。SCOPUS_API_KEY持有确切的键值,不要更少。也就是说,print 'SCOPUS_API_KEY'应该返回您的每个键:4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43文档
对于参考身份验证算法文档就在这里来说,它并不是很简单。您正在遵循身份验证选项1,并且您的方法应该只起作用。
注: API仅限于每周5000次作者检索。如果您在一个循环中运行了许多查询,即使它们失败了,您也有可能超出了.
发布于 2020-08-29 16:54:25
将来可以用来作参考。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 wellhttps://stackoverflow.com/questions/31967010
复制相似问题