Получить метаданные из DOI
Цифровой идентификатор объекта (DOI) - это глобально уникальная строка, которая идентифицирует электронный документ (например, PDF академической статьи). По сути, он предоставляет метод для создания постоянной ссылки на документ (например, http://dx.doi.org/10.1145/146585.146609).
Существует ли веб-служба (или любая другая система) для получения метаданных (предпочтительно в форме BibTeX) документа из данного DOI?
Отредактировано, чтобы добавить пояснительную информацию.
5 ответов
Раздел 5.4.1 Согласование содержимого документов Справочника DOI гласит: " Согласование содержимого осуществляется регистрационными агентствами DOI для своих имен DOI, в частности, чтобы предлагать пользователям дополнительные представления метаданных". В соответствии с разделом 4 "Поддерживаемые типы контента" в документации для переговоров по контенту DOI для http://crosscite.org/: "В настоящее время три регистрационных агентства DOI внедрили согласование контента для своих DOI: CrossRef, DataCite и mEDRA". Список поддерживаемых форматов (который зависит от агентства регистрации) включает в себя как BibTeX через Accept: application/x-bibtex
(это подход, используемый http://doi2bib.org/) и отформатированная запись библиографии через Accept: text/bibliography
(это подход, предложенный @anumi выше). При использовании последнего заголовка вы должны указать style=bibtex
параметр типа носителя.
Два соответствующих mimetypes обеспечивают немного различные представления. Запрос к GET http://dx.doi.org/10.1038/nrd842
с Accept: application/x-bibtex
дает ответ
@article{Atkins_2002,
doi = {10.1038/nrd842},
url = {http://dx.doi.org/10.1038/nrd842},
year = 2002,
month = {jul},
publisher = {Springer Nature},
volume = {1},
number = {7},
pages = {491--492},
author = {Joshua H. Atkins and Leland J. Gershell},
title = {From the analyst{\textquotesingle}s couch: Selective anticancer drugs},
journal = {Nature Reviews Drug Discovery}
}
и с Accept: text/bibliography; style=bibtex
@article{Atkins_2002, title={From the analyst’s couch: Selective anticancer drugs}, volume={1}, ISSN={1474-1784}, url={http://dx.doi.org/10.1038/nrd842}, DOI={10.1038/nrd842}, number={7}, journal={Nature Reviews Drug Discovery}, publisher={Springer Nature}, author={Atkins, Joshua H. and Gershell, Leland J.}, year={2002}, month={Jul}, pages={491–492}}
curl -LH "Accept: text/bibliography; style=bibtex" http://dx.doi.org/10.1038/nrd842
Посмотрите, как эти ребята реализовали это: www.doi2bib.org.
Что я сделал в одном из моих проектов:
- посмотрел на их
url
структура запроса:http://www.doi2bib.org/doi2bib
+?id=
+{your doi here}
, - потом использовал их... хорошо
API
получить данные (например, http://www.doi2bib.org/doi2bib?id=10.1016%2Fj.actpsy.2016.09.007) и получить ответ:@article{Leinen_2016, doi = {10.1016/j.actpsy.2016.09.007}, url = {http://dx.doi.org/10.1016/j.actpsy.2016.09.007}, year = 2016, month = {nov}, publisher = {Elsevier {BV}}, volume = {171}, pages = {36--46}, author = {Peter Leinen and Stefan Panzer and Charles H. Shea}, title = {Hemispheric asymmetries of a motor memory in a recognition test after learning a movement sequence}, journal = {Acta Psychologica} }
- тогда вы можете разобрать это так, как вы хотите.
Это помогло мне сделать то, что мне нужно было сделать. Тем не менее, лучшим способом было бы взглянуть на их репозиторий GitHub и попытаться создать свой собственный.
Надеюсь, поможет!
CrossRef имеет API, который вы можете использовать с ключом API, который можно получить бесплатно по http://www.crossref.org/requestaccount/.
Реализация Python:
import requests
def get_doi_bibtex(doi):
base_url = f"https://doi.org/{doi}"
headers = {
"Accept": "text/bibliography; style=bibtex"
}
response = requests.get(base_url, headers=headers)
if response.status_code == 200:
return response.text.strip()
else:
print(response.status_code)
print(response.text)
return None
get_doi_bibtex("10.1109/xxxx")