【问题标题】:Getting author's articles from Scopus using Scopus API (AUTHENTICATION_ERROR)使用 Scopus API 从 Scopus 获取作者的文章 (AUTHENTICATION_ERROR)
【发布时间】:2015-08-12 13:43:09
【问题描述】:

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

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

这是我的代码:

# !/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 配置设置不足以访问此资源。', 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&amp;" % (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>

此问题的原因可能是什么,我该如何解决?

【问题讨论】:

  • 我认为您缺少身份验证,也许您的浏览正在发送它而您没有看到...您是否有任何可以使用的凭据?
  • 您在注册时是否被要求注册一个网站,您的 URI 请求是否来自该网站?
  • 允许您使用大学网络中的 Web 界面并不意味着您可以在没有额外凭据的情况下使用 API。也许那个 API 密钥没有给你适当的授权。

标签: python web-crawler scopus


【解决方案1】:

我刚刚注册了一个 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 代码。我对您的代码所做的唯一更改是删除

    from scopus import SCOPUS_API_KEY
    

    添加

    SCOPUS_API_KEY ='4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43'
    
  3. 使用适合将 apikey 放入 URL 而不是标头的 Python 代码。

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

我无法复制您的错误消息。如果我尝试使用未在 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. 1234563 .get() 就可以了。
  3. 如果 2 返回正确,请确保您的 SCOPUS_API_KEY 持有准确的键值,不多不少。即print 'SCOPUS_API_KEY' 应该返回您的 apikey:4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43

  4. 如果 1 返回错误,则您的 uni(无论出于何种原因)似乎无法访问作者查询 API。鉴于您可以执行手动搜索,这没有多大意义,但这就是我能得出的结论

文档

供参考认证算法文档is here,但不是很简单。您正在遵循身份验证选项 1,您的方法应该可以正常工作。

注意API 仅限于5000 author retrievals per week。如果你在一个循环中运行了很多查询,即使它们失败了,也有可能你已经超过了……

【讨论】:

  • 谢谢。我想我解决了这个问题。我注册了一个示例页面(不是应用程序)并生成了 API 密钥。现在它似乎工作了,我可以从我的大学网络下载作者的个人资料和出版物页面。我不知道究竟是什么问题,我认为它与应用程序 API / wepage API 相关(不适用于应用程序 API 密钥,而是使用网页 API 密钥)。但是,我在您的回答中发现了一些非常有用的附加信息,这些信息可能对我将来的项目有所帮助。再次,非常感谢您的帮助,干杯! :-)
【解决方案2】:

供日后参考。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    相关资源
    最近更新 更多