维基百科Api通过php curl连接

时间:2015-10-16 22:10:06

标签: php xml api curl wikipedia

我有一个任务:通过输入关键字Wikipedia文章,将其保存到数据库,然后在其中进行搜索。

问题是:如何访问api并从维基百科中检索数据,我试过这个网址(在开始时我尝试过json格式):

$url = 'https://en.wikipedia.org/w/api.php?action=query&titles=Dog&prop=revisions&rvprop=content&format=xml';

和这个PHP代码:

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
$res = curl_exec($ch);
if (!$res) {
    echo 'cURL Error: '.curl_error($ch);
}
var_dump($res);

但没有任何事情发生。是否可以使用curl访问数据?

最后,一个代码使用上面的url:

ini_set('user_agent','TestText');
$xmlDoc = new \DOMDocument();
$xmlDoc->load($url);
echo($xmlDoc->saveXML());

然后我得到这样的文字

  

{{about |家养的狗|相关物种称为“狗”|犬科|其他   用途|狗(消歧)|}} {{Redirect | Doggie |丹麦语   艺术家| Doggie(艺术家)}} {{pp-semi-indef}} {{pp-move-indef}} {{Taxobox   | name =国内狗| fossil_range = {{Fossil   范围| 0.033 | 0}} [[更新世]] - [[最近]] |

如何处理它更漂亮(带有paragraphes的文本或最简单的纯文本)?

所以,有两个问题:  1.是否可以使用php curl访问wiki数据以及如何改进我的代码?  2.如何使wiki xml代码更漂亮?

关于代码的问题,特别是关于curl的问题。为什么它不起作用? 而且,回答另一个问题只说维基百科api urls。只改变网址我无法解决问题。

我找到了解决方案,需要CURLOPT_SSL_VERIFYPEER:

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&explaintext=&titles=Dog';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
$res = curl_exec($ch);
//$json_data = mb_substr($res, curl_getinfo($ch, CURLINFO_HEADER_SIZE));
curl_close($ch);
$json = json_decode($res);

$content = $json->query->pages;
$wiki_id = '';
foreach ($content as $key => $value) {
    $wiki_id = $key;
}
echo $content = $content->$wiki_id->extract;

0 个答案:

没有答案