3

我注意到有一个问题与我的有点相似,只是使用 c#: link text。让我解释一下:我对整个 Web 服务实现非常陌生,所以我在理解上遇到了一些困难(尤其是由于 MediaWiki API 手册含糊不清)。

我想在 PHP(XML 文件)中检索整个页面作为字符串,然后在 PHP 中处理它(我很确定还有其他更复杂的方法来解析 XML 文件,但无论如何): Main Page wikipedia

我试着做$fp = fopen($url,'r');。它输出:HTTP request failed! HTTP/1.0 400 Bad Request. API 不需要密钥来连接它。

您能否详细描述如何连接到 API 并将页面作为字符串获取?

编辑: 网址是$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main Page';. 我只是想将文件的全部内容读入一个字符串来使用它。

4

3 回答 3

8

连接到该 API 就像检索文件一样简单,

开放

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$fp = fopen($url, 'r');
while (!feof($fp)) {
    $c .= fread($fp, 8192);
}
echo $c;

文件获取内容

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$c = file_get_contents($url);
echo $c;

fopen只有在您的服务器启用了包装器时,才能使用上述两个。

否则,如果您的服务器安装了cURL,您可以使用它,

$url = 'http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$c = curl_exec($ch);
echo $c;
于 2009-12-13T20:18:53.567 回答
2

您可能需要对您在查询字符串中传递的参数进行 urlencode ;在这里,至少“ Main Page”需要编码——如果没有这种编码,我也会收到 400 错误

如果你尝试这个,它应该会更好(注意空格被替换为%20

$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=Main%20Page';
$str = file_get_contents($url);
var_dump($str);

有了这个,我得到了页面的内容。


一个解决方案是使用urlencode,因此您不必自己编码:

$url='http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&redirects&titles=' . urlencode('Main Page');
$str = file_get_contents($url);
var_dump($str);
于 2009-12-13T20:23:38.787 回答
1

根据 MediaWiki API 文档,如果您未在 PHP 请求中指定 User-Agent,WikiMedia 将使用 4xx HTTP 响应代码拒绝连接:

https://www.mediawiki.org/wiki/API:Main_page#Identifying_your_client

您可以尝试更新您的代码以添加该请求标头,或更改 php.ini 中的默认设置(如果您有编辑权限)。

于 2012-10-08T14:57:21.890 回答