首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Scopus (AUTHENTICATION_ERROR)从Scopus获取作者的文章

使用Scopus (AUTHENTICATION_ERROR)从Scopus获取作者的文章
EN

Stack Overflow用户
提问于 2015-08-12 13:43:09
回答 2查看 6.7K关注 0票数 5

我在http://www.developers.elsevier.com/action/devprojects注册了。我创建了一个项目,得到了我的scopus密钥:

现在,使用这个生成的密钥,我想找到一个由firstnamelastnamesubjectarea编写的作者。我向我的大学网络提出请求,允许我访问Scopus (我完全可以手动访问Scopus搜索,在Firefox上使用它没有问题)。然而,我想通过编写一个简单的脚本来自动化我的Scopus挖掘。我想通过给出作者的firstnamelastnamesubjectarea来找到作者的出版物。

这是我的密码:

代码语言:javascript
复制
# !/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’‘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文件:

代码语言:javascript
复制
<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文件:

代码语言:javascript
复制
<service-error>
<status>
<statusCode>AUTHENTICATION_ERROR</statusCode>
<statusText>Requestor configuration settings insufficient for access to this resource.</statusText>
</status>
</service-error>

造成这个问题的原因是什么,我该如何解决呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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,排除了域名注册为您的问题来源。

我测试了这个

  1. 在浏览器里,
  2. 在头中使用带有api键的python代码。我对您的代码所做的唯一更改就是删除 从scopus进口SCOPUS_API_KEY 加上 SCOPUS_API_KEY =‘4
  3. 使用您的python代码,可以将apikey放在URL中而不是头中。

在所有情况下,查询都返回两个作者,一个在卡内基梅隆,一个在帕洛阿尔托。

我不能复制你的错误信息。如果我尝试使用未在elsevier注册的IP地址(例如我的家用计算机)中的API密钥,则会看到另一个错误:

代码语言:javascript
复制
<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密钥,我会看到

代码语言:javascript
复制
<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进行变量替换,在头中不使用每个键),只需在其上执行一个.get()
  3. 如果2返回正确,请确保您的SCOPUS_API_KEY持有确切的键值,不要更少。也就是说,print 'SCOPUS_API_KEY'应该返回您的每个键:4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43
  4. 如果1返回错误,看起来您的uni (无论出于什么原因)无法访问。考虑到您可以执行手动搜索,这没有多大意义,但这就是我所能得出的结论

文档

对于参考身份验证算法文档就在这里来说,它并不是很简单。您正在遵循身份验证选项1,并且您的方法应该只起作用。

注: API仅限于每周5000次作者检索。如果您在一个循环中运行了许多查询,即使它们失败了,您也有可能超出了.

票数 4
EN

Stack Overflow用户

发布于 2020-08-29 16:54:25

将来可以用来作参考。OP使用的是长期被重命名为scopus的包pybliometrics

现在你可以做

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31967010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档