我有一个任务:通过输入关键字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;