イメージとしては以下のような感じです。
JabionのPubMed検索
http://www.bioportal.jp/Medline_search/search/search.cgi
このように、PubMedを自分のWEBサイトで検索し、その検索結果を自分のWEBサイトで表示することを可能にするプログラムを配布・販売しているサイトを教えてください。有料のプログラムでもOKです。
よろしくお願いします。
*Jabionでは日本語での検索や検索結果の単語の日本語訳などが可能となっていますが、そのような機能は不要です。
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&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&id='.implode(',', $match[1]); $res2 = file_get_contents($url2); echo $res2; } }
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等でそれを実現してるプログラムがありそうな気もするんですが。見つからないですねー。
ありがとうございます。myrmecoleonさんが例示されているように“hiccup”の検索で文献サマリーが表示できるかどうかやってみたのですが、カンマ区切りで羅列したIDのリスト(http://biotoday.s279.xrea.com/)をEsummaryに投げる方法が分かりませんでした。
IDリストをEsummaryに投げる方法について新たな質問をおこしたいと思います。
もしお分かりでしたら回答いただければ幸いです。
>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のリストを id= の後ろにつなげ”る方法が分からないのです。
カンマ区切りのIDのリストを変数に置き換えてEsummaryに繋げてその後の処理をすると考えているのですが、この考えは妥当ではないでしょうか。
なにかプログラミング言語を使うのですよね?
もしかしてHTMLだけでできると思っていませんか?
作ってくれと言うのであれば作りますけど
ちょっとでもかじればすぐに作れますよ。
参考)http://www.atmarkit.co.jp/flinux/rensai/mysql5_02/mysql5_02a.htm...
回答ありがとうございます。PHPをほんの少し知っているので、PHPで「ちょっとかじ」ってみてもわからなかったのでこうして質問しているわけです。
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&id='.$_POST['id']; $result = file_get_contents($url); echo $result; }
ito-yuさん、たびたびありがとうございます。非常に親切にしていただきとても感謝しています。質問の仕方を今後注意するようにします。
記載いただいたスクリプトも大変参考になるのですが、私が知りたいのはEsearchで得られた複数のIDをカンマで区切ってEsummaryにつなげる方法です(カンマ区切りのIDを渡すとEsummaryでそれぞれのIDに該当する文献のサマリーを表示できるようになります)。
複数のIDをカンマ区切りで変数に落として、その変数をEsummaryのURL(API)に連結すれば良いのではないかと思っているのですが、複数のIDをカンマ区切りで変数に落とす方法がどうしても分かりません。
回答いただけると嬉しいです。
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&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&id='.implode(',', $match[1]); $res2 = file_get_contents($url2); echo $res2; } }
ito-yuさま、ありがとうございます。別の質問の回答も確認しました。ここでいちど閉じて自分のところでプログラムを動かしてみます。
ito-yuさま、ありがとうございます。別の質問の回答も確認しました。ここでいちど閉じて自分のところでプログラムを動かしてみます。