PubMed APIのまとめ

PubMed APIを使ってAT Fieldというツールを作ったので、 その際に勉強したAPI仕様についてまとめておきます。

ソース: http://www.ncbi.nlm.nih.gov/books/NBK25499/

使い方

指定したURLにhttpでアクセスするだけで、簡単にデータが取ってこられます。 たとえばPubMedで「cancer」について検索したい場合は
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=cancer
ブラウザでこのアドレスにアクセスすれば、以下のようなXMLが取得できます。

	

このURLは、以下のような構造になっています。

これらをhttp:// 基本URL ? パラメータ & パラメータ & ...という形で結合して、リクエストのURLを作成します。

PHPでアクセスする場合、以下のようなコードを書きます。

<?php

$query = "cancer";

$url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=" . urlencode($query);

$h = curl_init();
curl_setopt($h, CURLOPT_URL, $url);
$result = curl_exec($h);

header("Content-type:text/xml\n\n");
print $result;
これで$result変数にXMLデータが格納されるので、 後は適当なXMLパーサをくぐして煮るなり焼くなりお好みに、というわけです。 拙作のAT Fieldでは、 このXMLデータをそのままJavaScript側に渡して、jQueryでXMLの解釈を行なっています。

API解説

ESearch

いわゆる論文検索のAPI。 適当な検索クエリを指定すると、論文のIDが返ってくる、というのが基本仕様です。

リクエストURL

http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi

パラメータ

db
検索対象のデータベース。今回はPubMedなのでdb=pubmedと指定します。
term
検索クエリ、つまり検索のキーワード。URLに載せるのでURLエンコード(スペースとか特殊文字を符号化する処理)をお忘れなく。
retstart
検索開始位置をIDで指定。
retmax
呼び出す論文IDの最大数を指定。デフォルトは20件。
rettype
検索のタイプ。指定しなければ論文IDリストを返しますが、rettype=Countとすると検索ヒット数だけを表示します。
datetype
日付指定のタイプを指定。指定できるタイプは以下のとおり。
  • datetype=mdat: modification date
  • datetype=pdat: publication date
  • datetype=edat: Entrez date
mindate, maxdate
検索範囲を日付で指定。書式はYYYY, YYYY/MM, YYYY/MM/DD に対応。たとえばmindate=2005&maxdate=2007とすれば、2005年〜07年までの範囲を検索できます。

リクエスト例

PubMedから「cancer」というキーワードで検索
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=cancer

ESummary

論文IDを指定すると、そのSummary(著者、出版日、雑誌名など)を返すAPIです。

リクエストURL

http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi

パラメータ

db
検索対象のデータベース。今回はPubMedなのでdb=pubmedと指定します。
id
論文ID。カンマで区切って複数指定可能。

リクエスト例

PubMedから ID: 23166964,23167814,23170308 の3文献を調べる
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=23166964,23167814,23170308

EFetch

論文IDを指定すると、アブスト等の情報を返します。

ESpell

検索ワードのスペルチェックを行なうAPIです。 Googleでいう「もしかして」のような機能が実装できます。