我对维基百科API非常陌生,但我最近遇到了一个建立在维基媒体之上的中文网站,我想用它来帮助我将各种页面解析为可行的格式,以便最终使用XPATH进行处理。读了一下之后,我发现action = parse参数就是我要找的。例如,以下查询加载没有困难:(来自维基百科)
api.php?action=parse&page=Main_Page&format=xml
它显示文本,后跟语言链接,后跟链接。我对链接部分特别感兴趣,因为我将使用此数据来浏览这个基于维基百科的网站以创建页面层次结构。
尝试复制这些结果,我将查询添加到我网站页面的末尾:
http://www.youbianku.com/api.php?action=parse&page=%E5%8C%97%E4%BA%AC&format=xml
%E5%8C%97%E4%BA%AC解析为北京的汉字,顺便说一句。无论如何,我得到以下结果:
<api>
<error code="params" info="The page parameter cannot be used together with the text and title parameters"/>
</api>
我所做的就是从维基百科复制查询并替换页面的名称。我不清楚为什么这突然抛出错误。在此页面上运行其他API查询没有问题,如下所示:
api.php?action=query&format=xml&titles=%E5%8C%97%E4%BA%AC&rvprop=content&prop=revisions
我最近读到这可能是由于htaccess重写规则默认添加标题。有没有办法绕过这些,因为我是这个网站的客户?
答案 0 :(得分:3)
如您所知,此问题可能是由于网址重写规则损坏造成的。
您可以使用text
参数和transcluding所需页面来解决此问题,如下所示:
/api.php?action=parse&text={{:Page_title}}
(默认情况下,前导:
会阻止Template:
作为页面标题的前缀。)
Trying this with the example page in your question会因某些原因(可能不相关的原因)返回PHP错误,但it works fine with other pages on that wiki.
这个技巧的一个缺点是它绕过了解析器缓存,使其比简单地使用page
更慢,更耗费资源。此外,页面上依赖于页面标题的任何variables都可能产生意外结果,并且任何取决于页面或修订元数据的变量都可能完全失败。幸运的是,这些变量在实践中并不经常使用。
另一个甚至更好的解决方案可能是简单地使用
/index.php?action=render&title=Page_title
将返回页面的已解析HTML源代码,而不包含任何周围的外观like this。这种方法不像API那样通用,但它没有上述任何问题。