2012-05-11 31 views
0

Wikiepdia APIリンクを使用して、いくつかの世界的に知られている文字についての基本情報を取得します。フィードをPHPで解析する方法

例:これは今、私の質問

About Dave Longaberger

を次のように表示されるでしょう(About Dave Longaberger)

私はそれを表示するために<extract></extract>の間に、このような基本的な情報を取得するためにXMLを解析したいと思います。ここで

が私の考えですが、失敗した

<?PHP 
function get_url_contents($url){ 
$crl = curl_init(); 
$timeout = 5; 
curl_setopt ($crl, CURLOPT_URL,$url); 
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); 
$ret = curl_exec($crl); 
curl_close($crl); 
return $ret; 
} 

$url = "http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Dave Longaberger&format=xml&exintro=1"; 

$text = file_get_contents($url); 
echo $text; 
?> 

<?PHP 
$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Dave Longaberger&format=xml&exintro=1'; 

$xml = simplexml_load_file($url); 

// get extract 
$text=$xml->pages[0]->extract; 
// show title 
echo $text; 
?> 

もう一つのアイデアを(I/Oの警告は、外部エンティティを読み込むことができませんでした)だけでなく、失敗した(!HTTPリクエストが失敗したストリームをオープンに失敗しました)

どのようにそれを行うにはどのようなアイデア。 〜おかげ

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles='.rawurlencode('Dave Longaberger').'&format=xml&exintro=1'; $text = file_get_contents($url); 

まあ

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Dave Longaberger&format=xml&exintro=1'; 
$url = urlencode($url); 
$text = file_get_contents($url); 

を働いていない(まだ動作していない後に追加でurlencodeまたはrawurlencode)更新
また

$name = "Dave Longaberger"; 
$name = urlencode($name); 
$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles='.$name.'&format=xml&exintro=1'; 
$text = file_get_contents($url); 

「私は本当にドンので、何とかできないような表情を知っている。

+1

スクリプトは、連絡先情報と有益なUser-Agent文字列を使用する必要があります、または彼らは予告なくIP-ブロックされることがあります。 – ccKep

答えて

1

あなたのカール要求にユーザーエージェントヘッダーを設定すると、ウィキペディアはエラー403を返信し、それ以外の場合は禁止します。

<?PHP 
$url = "http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Dave+Longaberger&format=xml&exintro=1"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); 
$xml = curl_exec($ch); 
curl_close($ch); 

echo $xml; 
?> 

代わり:

ini_set("user_agent","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"); 
$url = "http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Dave+Longaberger&format=xml&exintro=1"; 
$xml = simplexml_load_file($url); 

$extracts = $xml->xpath("/api/query/pages/page/extract"); 

var_dump($extracts); 
+0

パーフェクト:)ありがとうございました。うまくいけば、カール要求で追加するユーザーエージェントヘッダーが必要です。 〜ありがとうございました –

+0

OPをsimplexml_load_fileの例で編集しました。 – ccKep

関連する問題