PubMedのAPIを使用して、検索したりメタデータを取得したりする

2024/10/01に公開

こんにちは、沙代です。
たまにAPIで論文を得たりしたいことって、ありますよね。汗
しばしば忘れるので、備忘録のためにもメモしてみようと思います。

Python 3.11.1

検索する

import requests

def fetch_pubmed_papers(term, retmax=100) -> dict:
    url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi"
    params = {"db": "pubmed", "term": term, "retmax": retmax, "retmode": "json"}
    response = requests.get(url, params=params)
    return response.json()

以下のようにして得られます。

result = search_pubmed(term="hypertension", retmax=5)
返り値はdictです。

pubmed idのリストは以下のようにして得られます。
result["esearchresult"]["idlist"]

メタデータを得る

def get_summary(pmid_list: list[str]) -> dict:
    url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi"
    params = {"db": "pubmed", "id": ",".join(pmid_list), "retmode": "json"}
    response = requests.get(url, params=params)
    return response.json()

以下のようにして使います。
summary = get_summary(["123456", "234567"])
返り値はdictです。(header, resultのキーがあります)
例えば、"123456"のpmidの情報がほしい場合は、以下のようにします。

summary["result"]["123456"](dict)

(どうもDOIは含まれないようです。うーん🤔)

注意点

1秒間に3回以上すると怒られます。(というか良くないです。)
私は1秒間に最大1回にしています。(のんびり)

参考にさせていただいたページ

https://www.ncbi.nlm.nih.gov/books/NBK25500/

Discussion