Получать статьи автора из Скопус Скопус, используя API-интерфейс (ошибка проверки подлинности )



Я зарегистрировался в http://www.developers.elsevier.com/action/devprojects . я создал проект и получил свой ключ scopus:



Введите описание изображения здесь



Теперь, используя этот сгенерированный ключ, я хотел бы найти автора по firstname, lastname и subjectarea. Я делаю запросы из своей университетской сети, которой разрешено посещать Scopus (у меня есть полный ручной доступ к Scopus search, используйте его из Firefox без проблем). Тем не менее, я хотел автоматизировать мой Scopus mining, написав простой скрипт. Я хотел бы найти публикации автора, предоставив его / ее 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 из моей университетской сети , я получаю такой ответ:




{ЕД маршруты-ошибка': {у'status': {у'statusText': у'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>


Что может быть причиной этой проблемы и как я могу ее исправить?

1102   1  

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. Использование кода python как с ключом api в заголовках. Единственное изменение, которое я внес в ваш код, - это удаление

    from scopus import SCOPUS_API_KEY
    

    И добавление

    SCOPUS_API_KEY ='4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43'
    
  3. используя свой код python, адаптированный для размещения apikey в URL вместо заголовков.

Во всех случаях запрос возвращает двух авторов, одного из Carnegie Mellon и одного из один в Пало-Альто.

Я не могу воспроизвести ваше сообщение об ошибке. Если я попытаюсь использовать API-ключ с IP-адреса, незарегистрированного в elsevier (например, на моем домашнем компьютере), я увижу другую ошибку:

<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, чтобы фактически отправить запрос api с вашим ключом в URL (т. е. скопируйте URL выше, вставьте его в адресную строку, замените свой ключ и посмотрите, получите ли вы XML обратно)

  2. Если 1 возвращает ожидаемый XML, перейдите к отправке запроса через Python-сначала скопируйте точный URL-адрес прямо в Python (без подстановки переменных через %s, без apikey в заголовке) и просто сделайте .get() на нем.

  3. Если 2 возвращает правильно, убедитесь, что ваш SCOPUS_API_KEY содержит точное значение ключа, не больше и не меньше. то есть print 'SCOPUS_API_KEY' должен вернуть ваш apikey: 4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43

  4. Если 1 возвращает ошибку, это выглядит так, что ваш uni (по какой-либо причине) не получил доступа к API запроса авторов. Это не имеет особого смысла, учитывая, что вы можете выполнять ручной поиск, но это все, что я могу заключить

Docs

Для справки документация по алгоритму аутентификации находится здесь, но следовать ей не очень просто. Вы следуете варианту аутентификации 1 и ваш метод должен просто работать.

N. B. API ограничивается 5000 авторских извлечений в неделю. Если вы выполнили много запросов в цикле, даже если они не удались, вполне возможно, что вы превысили это...

Comments

    Ничего не найдено.