我正在尝试使用以下代码通过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