1

xml ファイルから情報を表示しようとしています。エラーにはなりませんが、配列は空です。私は wordrpess を使用していますが、php の経験があまりないため、これが最善の方法であるかどうかはわかりません。

これは私のコードです:

<?php 
function pubmedQuery() { 
    $xml = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]';
    $xml_file =  simplexml_load_file( $xml );
    $results_count = $xml_file->Count;
    $results_ids = array(); 
    foreach ( $xml_file->IdList->Id as $items ) {
        $results_ids[] = $items;
    }
    return "Hay " . $results_count . " resultados: " . $results_ids;
}
//Show results
    echo'<h3>Resultados de búsqueda:</h3>' . pubmedQuery ();    
?>

そして、これが結果です:

検索結果: ヘイ 0 結果: Array

ありがとう!そして私の英語を許してください!

4

2 に答える 2

1

@ギャビンは正しいです。ただし、次の方法でコンテンツを取得できますfile_get_contents

function pubmedQuery() { 
    $xml = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]';
    $content =  file_get_contents($xml);
    $xml_file = simplexml_load_string($content);
    $results_count = $xml_file->Count;
    $results_ids = array(); 
    foreach ( $xml_file->IdList->Id as $items ) {
        $results_ids[] = $items;
    }
    return "Hay " . $results_count . " resultados: " . implode("\n",$results_ids);
}
//Show results
echo'<h3>Resultados de búsqueda:</h3>' . pubmedQuery ();   

出力

ヘイ 6 結果: 19008416 18927361 18787170 18487186 18239126 18239125

implode("\n",$results_ids)ID が見つかったかどうかに関係なく、テキスト配列を返す代わりに、見つかった ID を含む文字列を返すことに注意してください。

于 2013-11-11T10:28:52.757 に答える
0

私のコメントによると、スクレイピング元の Web サイトにはユーザー エージェント検出機能があるようです。

function pubmedQuery() { 
    $context = stream_context_create(array(
      'http'=>array(
        'user_agent' => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'
       )
    ));

    $xml = file_get_contents('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]', FALSE, $context);

    $xml_file = simplexml_load_string($xml);
    $results_count = $xml_file->Count;
    $results_ids = array(); 
    foreach ( $xml_file->IdList->Id as $items ) {
        $results_ids[] = $items;
    }
    return "Hay " . $results_count . " resultados: " . $results_ids;
}
//Show results
echo'<h3>Resultados de búsqueda:</h3>' . pubmedQuery ();    

上記のコードは、file_get_contents呼び出しのユーザー エージェントを偽装するため、Web サイトは通常のブラウザーであると認識します。

于 2013-11-11T10:24:01.457 に答える