人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

自分の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では日本語での検索や検索結果の単語の日本語訳などが可能となっていますが、そのような機能は不要です。


●質問者: biotoday
●カテゴリ:ウェブ制作 科学・統計資料
✍キーワード:PubMed webサイト イメージ サイト プログラム
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● myrmecoleon
●20ポイント

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に投げる方法について新たな質問をおこしたいと思います。

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


2 ● myrmecoleon
●20ポイント

>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に繋げてその後の処理をすると考えているのですが、この考えは妥当ではないでしょうか。


3 ● ito-yu
●20ポイント

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

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

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

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

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

◎質問者からの返答

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


4 ● ito-yu
●20ポイント

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;
}
◎質問者からの返答

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

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

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

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


5 ● ito-yu
●100ポイント ベストアンサー

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;
}
}
◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ