自分のWEBサイト上でPubMed(http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=PubMed)を検索したり、その検索結果を自分のWEBサイト上で表示させたいと思っています。


イメージとしては以下のような感じです。

JabionのPubMed検索
http://www.bioportal.jp/Medline_search/search/search.cgi

このように、PubMedを自分のWEBサイトで検索し、その検索結果を自分のWEBサイトで表示することを可能にするプログラムを配布・販売しているサイトを教えてください。有料のプログラムでもOKです。

よろしくお願いします。

*Jabionでは日本語での検索や検索結果の単語の日本語訳などが可能となっていますが、そのような機能は不要です。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2007/04/21 10:44:13
  • 終了:2007/04/24 16:51:50

ベストアンサー

id:ito-yu No.5

ito-yu回答回数323ベストアンサー獲得回数142007/04/24 16:34:53

ポイント100pt

Esearchは現状XML形式でしか結果を返さないようなのでXMLを解析しなければなりません

http://eutils.ncbi.nlm.nih.gov/entrez/query/static/esearch_help....

が、見たところIDは

	<IdList>
		<Id>17437235</Id>
		  :
		<Id>17030694</Id>
	</IdList>

といった形で入っていますのでこれを正規表現で抜いてやればOKです。

search.php

<form action="search.php" method="post">
Word: <input type="text" name="q">
<input type="submit" value="SEARCH">
</form>
<?php
if(isset($_POST['q'])){
	$url1 = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&amp;term='.$_POST['q'];
	$res1 = file_get_contents($url1);
	if(preg_match_all('/<Id>([0-9]+)</Id>/', $res1, $match)){
		$url2 = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&amp;id='.implode(',', $match[1]);
		$res2 = file_get_contents($url2);
		echo $res2;
	}
}
id:biotoday

ito-yuさま、ありがとうございます。別の質問の回答も確認しました。ここでいちど閉じて自分のところでプログラムを動かしてみます。

2007/04/24 16:50:12

その他の回答(4件)

id:myrmecoleon No.1

myrmecoleon回答回数45ベストアンサー獲得回数72007/04/21 13:21:54

ポイント20pt

Pubmed(というかEntrez)は各種APIを公開しています。

http://eutils.ncbi.nlm.nih.gov/entrez/query/static/eutils_help.h...


たとえばEsearchを使えば,あるデータベースで任意のキーワードに合致する論文IDのリストがXMLで手に入り,

eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term={キーワード}


そのIDのリストをEsummaryに投げればそのIDの文献のタイトル等のリストを同じくXMLで受け取れます。

eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id={IDのリスト。複数の場合はカンマ区切り}


例.

http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pub...

http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pu...


利用規約としては,「あまり負荷をかけるな」とか「3秒以上リクエストに間を空けろ」とかの記述はありますが,それほど気にしなくてもよさそう。


プログラムの分かる方ならこれだけで目的にかなったスクリプトを書いてサイトに組み込むことができると思います。あと言語によっては公開されたライブラリもあるようです。

英語圏ならJavascript等でそれを実現してるプログラムがありそうな気もするんですが。見つからないですねー。

id:biotoday

ありがとうございます。myrmecoleonさんが例示されているように“hiccup”の検索で文献サマリーが表示できるかどうかやってみたのですが、カンマ区切りで羅列したIDのリスト(http://biotoday.s279.xrea.com/)をEsummaryに投げる方法が分かりませんでした。

IDリストをEsummaryに投げる方法について新たな質問をおこしたいと思います。

もしお分かりでしたら回答いただければ幸いです。

2007/04/22 08:56:22
id:myrmecoleon No.2

myrmecoleon回答回数45ベストアンサー獲得回数72007/04/22 18:34:37

ポイント20pt

>IDリストをEsummaryに投げる方法について新たな質問をおこしたいと思います。

えと,例の2番目がまんまその答えなんですが;


リンクにすると省略されるので,hを省くとこんな感じ。

ttp://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=17437235,17375835,17360149,17350702,17350413,17343303,17316343,17259033,17211695,17195438,17185136,17179294,17158401,17135383,17119820,17108670,17101907,17078440,17058862,17030694

http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pu...


カンマ区切りにしたIDのリスト(http://biotoday.s279.xrea.com/ で表示されているののそのまんま。末尾のカンマはなくても可)を id= の後ろにつなげてGET(ページを取得。PHPだとfile_get_contentsとか)するだけです。

id:biotoday

ありがとうございます。大変情けないのですが、

“カンマ区切りにしたIDのリストを id= の後ろにつなげ”る方法が分からないのです。

カンマ区切りのIDのリストを変数に置き換えてEsummaryに繋げてその後の処理をすると考えているのですが、この考えは妥当ではないでしょうか。

2007/04/22 19:59:40
id:ito-yu No.3

ito-yu回答回数323ベストアンサー獲得回数142007/04/24 15:23:35

ポイント20pt

なにかプログラミング言語を使うのですよね?

もしかしてHTMLだけでできると思っていませんか?

作ってくれと言うのであれば作りますけど

ちょっとでもかじればすぐに作れますよ。

参考)http://www.atmarkit.co.jp/flinux/rensai/mysql5_02/mysql5_02a.htm...

id:biotoday

回答ありがとうございます。PHPをほんの少し知っているので、PHPで「ちょっとかじ」ってみてもわからなかったのでこうして質問しているわけです。

2007/04/24 15:33:41
id:ito-yu No.4

ito-yu回答回数323ベストアンサー獲得回数142007/04/24 15:51:18

ポイント20pt

2回目です。PHPを使っているという情報は初出ですね(myrmecoleonさんは書かれてましたが、コメント中にPHPに対する言及はないし)。質問の仕方にももっと工夫が必要ですよ。

文字列を連結する演算子がわからないのでしょうか?

マニュアル見ればわかりますが 「.」です。

http://www.php.net/manual/ja/language.operators.string.php

search.php

<form action="search.php" method="post">
<input type="text" name="id">
<input type="submit" value="SEARCH">
</form>
<?php
if(isset($_POST['id'])){
	$url = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&amp;id='.$_POST['id'];
	$result = file_get_contents($url);
	echo $result;
}
id:biotoday

ito-yuさん、たびたびありがとうございます。非常に親切にしていただきとても感謝しています。質問の仕方を今後注意するようにします。

記載いただいたスクリプトも大変参考になるのですが、私が知りたいのはEsearchで得られた複数のIDをカンマで区切ってEsummaryにつなげる方法です(カンマ区切りのIDを渡すとEsummaryでそれぞれのIDに該当する文献のサマリーを表示できるようになります)。

複数のIDをカンマ区切りで変数に落として、その変数をEsummaryのURL(API)に連結すれば良いのではないかと思っているのですが、複数のIDをカンマ区切りで変数に落とす方法がどうしても分かりません。

回答いただけると嬉しいです。

2007/04/24 16:18:19
id:ito-yu No.5

ito-yu回答回数323ベストアンサー獲得回数142007/04/24 16:34:53ここでベストアンサー

ポイント100pt

Esearchは現状XML形式でしか結果を返さないようなのでXMLを解析しなければなりません

http://eutils.ncbi.nlm.nih.gov/entrez/query/static/esearch_help....

が、見たところIDは

	<IdList>
		<Id>17437235</Id>
		  :
		<Id>17030694</Id>
	</IdList>

といった形で入っていますのでこれを正規表現で抜いてやればOKです。

search.php

<form action="search.php" method="post">
Word: <input type="text" name="q">
<input type="submit" value="SEARCH">
</form>
<?php
if(isset($_POST['q'])){
	$url1 = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&amp;term='.$_POST['q'];
	$res1 = file_get_contents($url1);
	if(preg_match_all('/<Id>([0-9]+)</Id>/', $res1, $match)){
		$url2 = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&amp;id='.implode(',', $match[1]);
		$res2 = file_get_contents($url2);
		echo $res2;
	}
}
id:biotoday

ito-yuさま、ありがとうございます。別の質問の回答も確認しました。ここでいちど閉じて自分のところでプログラムを動かしてみます。

2007/04/24 16:50:12
  • id:myrmecoleon
    ちなみに,結局 Esummary も結果はXMLで帰ってくるので,なんだかんだいってまともにXMLを扱えないと難しいかもしれません。XSLT使うとかSIMPLEXMLやDOM関数使うとか。
    無理やり正規表現で読み込むという手もありますけどね。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません