Получать статьи автора из Скопус Скопус, используя 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>
Что может быть причиной этой проблемы и как я могу ее исправить?
1 ответ:
Я только что зарегистрировался на API-ключ и сначала протестировал его с помощью этого URL:
Это прекрасно работает в моей университетской сети. Я также протестировал второй ключ API, поэтому проверил один с зарегистрированным сайтом на моем университетском домене, один с зарегистрированным сайтом http://apitest.example.com , исключение доменного имени, используемого для регистрации, как источника вашей проблемы.
Я проверил это
- в браузере,
Использование кода python как с ключом api в заголовках. Единственное изменение, которое я внес в ваш код, - это удаление
from scopus import SCOPUS_API_KEYИ добавление
SCOPUS_API_KEY ='4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43'- используя свой код 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>Шаги отладки
Поскольку я не могу воспроизвести вашу проблему-вот некоторые диагностические шаги, которые вы можете использовать для ее решения:
Используйте свой браузер в uni, чтобы фактически отправить запрос api с вашим ключом в URL (т. е. скопируйте URL выше, вставьте его в адресную строку, замените свой ключ и посмотрите, получите ли вы XML обратно)
Если 1 возвращает ожидаемый XML, перейдите к отправке запроса через Python-сначала скопируйте точный URL-адрес прямо в Python (без подстановки переменных через
%s, без apikey в заголовке) и просто сделайте.get()на нем.Если 2 возвращает правильно, убедитесь, что ваш
SCOPUS_API_KEYсодержит точное значение ключа, не больше и не меньше. то естьprint 'SCOPUS_API_KEY'должен вернуть ваш apikey:4xxxxxxxxxxxxxxxxxxxxxxxxxxxxx43Если 1 возвращает ошибку, это выглядит так, что ваш uni (по какой-либо причине) не получил доступа к API запроса авторов. Это не имеет особого смысла, учитывая, что вы можете выполнять ручной поиск, но это все, что я могу заключить
Docs
Для справки документация по алгоритму аутентификации находится здесь, но следовать ей не очень просто. Вы следуете варианту аутентификации 1 и ваш метод должен просто работать.
N. B. API ограничивается 5000 авторских извлечений в неделю. Если вы выполнили много запросов в цикле, даже если они не удались, вполне возможно, что вы превысили это...

Comments