如何使用API获得具有绝对URL的维基百科页面HTML


How to get Wikipedia page HTML with absolute URLs using the API?

我正在尝试使用以下代码通过wikipedia API检索文章

$url = 'http://en.wikipedia.org/w/api.php?action=parse&page=example&format=json&prop=text';
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$c = curl_exec($ch);
$json = json_decode($c);
$content = $json->{'parse'}->{'text'}->{'*'};

我可以在我的网站上查看内容,一切都很好,但我检索到的文章中的链接有问题。如果打开url,您可以看到所有链接都以href=''"/这意味着,如果有人点击文章中的任何相关链接,它会将他重定向到www.mysite.com/wiki/..(错误404),而不是en.wikipedia.com/wiki/。。有什么代码可以添加到现有的代码中来解决这个问题吗?

这似乎是MediaWiki action=parse API中的一个缺点。事实上,有人已经提交了一个功能请求,要求提供使action=parse返回完整URL的选项。

作为一种变通方法,您可以尝试自己破坏链接(就像adil建议的那样),也可以像这样使用index.php?action=render

  • http://en.wikipedia.org/w/index.php?action=render&title=示例

这将为您提供没有API包装的页面HTML,但如果这就是您想要的,那么它应该是好的。(例如,这是InstantCommons内部用于显示远程文件描述页的方法。)

您应该能够修复这样的链接:

$content = str_replace('<a href="/w', '<a href="//en.wikipedia.org/w', $content);

如果其他人需要替换URL的所有实例。

您需要使用regex和g标志

/<a href="'/w/g