0

Wikiepdia APIリンクを使用して、世界的に有名なキャラクターに関する基本情報を取得します。

例:(デイブ・ロンガバーガーについて)

これは次のように表示されます

デイブ・ロンガバーガーについて

さて、私の質問 では、xmlを解析して、そのような基本的な情報を取得<extract></extract>して表示したいと思います。

これが私の考えですが失敗しました(I / O警告:外部エンティティのロードに失敗しました)

<?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;
?>

別のアイデアですが失敗しました(ストリームを開くことができませんでした:HTTPリクエストが失敗しました!)

<?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;
?>

だからそれを行う方法についてのアイデア。〜ありがとう

更新(追加された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);

また、機能していません

$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);

または

$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);

さて、どういうわけか不可能に見えるのか、本当にわかりません。

4

2 に答える 2

1

curlリクエストにユーザーエージェントヘッダーを設定します。それ以外の場合、ウィキペディアはエラー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);
于 2012-05-11T16:02:46.573 に答える
0

このphpのmanページ http://php.net/manual/en/function.file-get-contents.phpのメモを見てください。

スペースなどの特殊文字を使用してURIを開く場合は、urlencode()を使用してURIをエンコードする必要があります。

于 2012-05-11T15:53:25.967 に答える