我想使用wikipedia api通过php和curl获取页面。 我阅读http://www.mediawiki.org/wiki/API:Main_page上的说明,我的例子类似。
目的是在给定标题的情况下自动获取电影信息。
function getWikipediaFilmUrl($filmName) {
$apiurl = "http://it.wikipedia.org/w/api.php";
$parameters['format'] = "json";
$parameters['prop'] = "revisions";
$parameters['rvprop'] = "content";
$parameters['action'] = "query";
$parameters['titles'] = rawurlencode(ucwords($filmName));
$parameters['redirects'] = "";
$fields_string = "";
$url = "";
foreach ($parameters as $key => $value) {
$fields_string[] = $key . '=' . $value;
}
$url = $apiurl . '?' . implode('&', $fields_string);
//debug
print_r($parameters);
echo "<br /><a href='$url'>Resulting URL: $url</a><hr />";
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, FALSE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_REFERER, "");
curl_setopt($ch, CURLOPT_HEADER, false);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
}
getWikipediaFilmUrl("main page");
此代码应该是主页面。生成的网址为 http://it.wikipedia.org/w/api.php?format=json&prop=revisions&rvprop=content&action=query&titles=Main%20Page&redirects= 如果您尝试使用浏览器打开它,但它可以通过curl获取,返回一个包含一般错误的页面和一个关于api用法的文本文档......
我只是想复制&amp;将生成的网址粘贴到curl调用中并且它可以正常工作....为什么地球上的$ url不起作用但它的内容是什么?!?。
答案 0 :(得分:0)
更改
$url = $apiurl . '?' . implode('&', $fields_string);
到
$url = $apiurl . '?' . implode('&', $fields_string);
你不需要逃避这些&符号,因为你没有将它们输出到HTML中,而只是将它们直接送入卷曲。