2011-04-02 10 views
2

我寫了一個PHP腳本,自動搜索根據用戶輸入的NCBI Pubmed數據庫。這是一個相當大的腳本,我不打擾把它放在這裏。但是,我無法弄清楚一個問題是爲什麼,當我搜索PubMed使用esearch(該eutils之一)我得到了不同的結果,如果它使用時,它的手工做的比PHP腳本做了什麼?爲什麼Pubmed會從PHP腳本生成不同於手動搜索的結果?

讓我給你舉個例子。您可以手動輸入到瀏覽器窗口的:http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=cancer+AND+Nature[jour]&retmode=xml

你會看到它生成一個XML文件,其中的計數字段(命中數)爲5986

但是,如果使用下面的PHP腳本:

<?php 
$test = simplexml_load_file('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=cancer+AND+Nature[jour]&retmode=xml'); 
echo $test->Count; 
?> 

它返回值0。這似乎每當搜索項被修改爲包括附加的字段,或非標準字段包含一個以上的檢索項的出現。在這種情況下,「癌症」引起的搜索次數僅限於第二個字段「自然」期刊中的出版物。如果我修改搜索詞,以便查找癌症和DNA('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed & term = cancer + AND + DNA & retmode = xml'),這是同一個字段中的兩個不同的搜索項,它在腳本中工作正常。

如果我單個非標準字段中進行搜索:('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed &術語=自然[怨婦] & retmode = XML「),它工作正常 - 但如果我然後修改它,包括在雜誌領域的兩個詞(」 http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed & term = Science [jour] + OR + Nature [jour] & retmode = xml')手工和PHP生成的回報之間的差異。

沒有人有任何想法,爲什麼這可能發生?

感謝您可以提供任何幫助。

回答

3

這工作:

<?php 

$result = file_get_contents('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=cancer+AND+Nature[jour]&retmode=xml'); 
$xml = simplexml_load_string($result); 
echo $xml->Count; // = 5986 

?> 
+0

謝謝!這確實有效。任何想法爲什麼? simplexml_load_string解析字符串內容的方式與simplexml_load_contents不同嗎? – Mike 2011-04-02 15:15:43

相關問題