如何用php解析feed

时间:2012-05-11 15:48:20

标签: php xml

使用Wikiepdia API链接获取一些世界知名角色的基本信息。

示例:(About Dave Longaberger)

这将显示如下

About Dave Longaberger

现在我的问题 我想解析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);

那么我真的不知道看起来不可能以某种方式。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

看看这个php手册页中的注释 http://php.net/manual/en/function.file-get-contents.php

如果要打开带有特殊字符的URI,例如空格,则需要使用urlencode()对URI进行编码。