Работа с базой данных PubMed
Для получения списка айдишников статей по ключевому слову можно использовать get-запрос:
https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&tool=[название вашего скрипта]&email=[контактный email]&format=json&term=[ключевое слово]
Результат будет примерно такой:
{
"header": {
"type":"esearch",
"version":"0.3"},
"esearchresult": {
"count":"556850",
"retmax":"20",
"retstart":"0",
"idlist":["7956338", "7956337", "7956317", "7956313", "7956301", "7956298", "7956293", "7956291", "7956287", "7956282", "7956276", "7956270", "7956269", "7956239", "7956238", "7956234", "7956232", "7956215", "7956214", "7956207"],
"translationset":[{
"from":"aging",
"to":"\"aging\"[MeSH Terms] OR \"aging\"[All Fields]"}],
"translationstack":[
{
"term":"\"aging\"[MeSH Terms]",
"field":"MeSH Terms",
"count":"49929",
"explode":"Y"},
{
"term":"\"aging\"[All Fields]",
"field":"All Fields",
"count":"557471",
"explode":"N"},
"OR",
"GROUP"],
"querytranslation":"\"aging\"[MeSH Terms] OR \"aging\"[All Fields]"}
}
Соответственно, список id статей: <res>.esearchresult.idlist
Параметры запроса
- db − какую базу данных запрашиваем. Возможные значения:
pmc, pubmed
. Разница между PMC и PubMed в том, что на PMC статьи с полнотекстовым доступом, а на PubMed не всегда. Зато на PubMed больший охват статей по абстрактам. Учитывая то, что полный текст интересующей статьи достать не так уж и трудно, установка db в значение pubmed выглядит более предпочтительной. - tool − PubMed просит указывать название инструментария или программы, которая работает с API. (Я указываю "odysseus" - по названию своей библиотеки, расширяющей Racket. -- Denis.s (обсуждение))
- email − реальный почтовый ящик, тоже по просьбе PubMeda. Неизвестно насколько страшно указывать в этом параметре значение типа foobar@example.com и какие кары за это могут последовать
- format − в каком формате выводить результат. По умолчанию выводится XML. (Я ставлю значение json, потому что мне кажется, что json чуть легче парсить и "читать вручную". -- Denis.s (обсуждение))
- retmax − максимальное число выводимых id
- term − собственно ключевое слово, по которому происходит отбор статей. Либо комбинация ключевых слов и частей записи, в которых они должны встретиться. Например
(aging[Abstract] AND aging[MeSH Terms]) OR (longevity[Abstract] AND longevity[MeSH Terms])