如何使用维基百科API(如果存在)?

64

我想找到维基百科的API(我认为它与MediaWiki有关)。

如果有的话,我想知道如何告诉维基百科给我一个关于例如纽约洋基的文章。

这个例子的REST URL是什么?

所有关于这个主题的文档似乎都相当复杂。


5
“如果存在”的部分也在这里解释了:https://dev59.com/V3RB5IYBdhLWcg3wbGtB。但我认为“如何使用它”部分是一个合理的问题……有点。 - Jonik
现在有一个R包可以访问Mediawiki API(因此可以访问维基百科),更多详情和示例请参见:https://dev59.com/WlfUa4cB1Zd3GeqPIXlg#24027866。 - Ben
8个回答

82

非常需要您花些时间阅读文档,因为这需要我看一下并点击链接才能解决。:/但出于同情,我将提供一个链接,也许您可以学会使用它。

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=New_York_Yankees&rvprop=timestamp|user|comment|content

这是你将要获取的变量。最好的方法是知道你要找的页面,并将维基百科链接部分替换成标题,如:

http://en.wikipedia.org/wiki/New_York_Yankees [取 wiki/ 后面的部分]

-->

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=New_York_Yankees&rvprop=timestamp|user|comment|content

[把它放在 GET 请求的标题变量中。上面的 URL 可以进行微调,以获取您想要或不想要的不同部分。所以请阅读文档 :)


19
把英语翻译成中文。只返回翻译后的文本:+1 的实际示例,而不是仅仅倾泻链接(尽管示例也只是一个链接... :) - Jonik
6
一个很好的起点是维基百科沙盒。它可以帮助你格式化你的请求/查询:http://en.wikipedia.org/wiki/Special:ApiSandbox。 - LucianNovo
3
如果我不知道具体的页面,比如我想搜索摇滚乐队铁娘子,可能有“iron maiden”、“Iron Maiden”、“Iron Maiden band”等页面,我该怎么搜索呢? - Rodrigo Ruiz

67

这里的答案帮助我找到了解决方案,但在此过程中我还发现了更多有利于其他人的信息。我想大多数人只是想使用API快速获取页面上的内容。以下是我的实现方式:

使用修订记录:

//working url:
http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Threadless&rvprop=content&format=json&rvsection=0&rvparse=1

//Explanation
//Base Url:
http://en.wikipedia.org/w/api.php?action=query

//tell it to get revisions:
&prop=revisions

//define page titles separated by pipes. In the example i used t-shirt company threadless
&titles=whatever|the|title|is

//specify that we want the page content
&rvprop=content

//I want my data in JSON, default is XML
&format=json

//lets you choose which section you want. 0 is the first one.
&rvsection=0

//tell wikipedia to parse it into html for you
&rvparse=1

使用Extracts(对于我正在做的事情更好/更容易)

//working url:
http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Threadless&format=json&exintro=1

//only explaining new parameters
//instead of revisions, we'll set prop=extracts
&prop=extracts

//if we just want the intro, we can use exintro. Otherwise it shows all sections
&exintro=1

需要阅读API文档才能获取所有信息,但我希望这些示例能帮助那些来这里寻求快速解决方案的大部分人。


第一个有效的URL还允许您检索维基页面的信息框!谢谢 - Gaʀʀʏ
你好,有没有办法从主要描述中获取纯文本?解析维基文本或HTML响应非常困难:(。如果有帮助,将不胜感激。 - Punith Raj

13

3
是的,我无法在阅读后理解如何完成我的示例。你有什么想法吗? - chris
3
不,我真的无法理解那份文件。我不知道如何使用那个API获取特定页面的数据。 - chris
3
你实际上是做不到的。要获取原始文章源,您应该通过以下方式访问文章:http://www.mediawiki.org/w/index.php?title=API&action=raw - drdaeman

10

8
如果你想从维基百科中提取结构化数据,可以考虑使用DbPedia http://dbpedia.org/。它提供用SPARQL查询数据的方法,并从解析后的维基百科信息框模板返回数据。有一些适用于多个平台的SPARQL库可用于简化查询。

3

1
下面是一个可运行的示例,它将维基百科纽约洋基队页面的第一句话打印到您的Web浏览器控制台:
<!DOCTYPE html>
</html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    </head>
    <body>
        <script>
            var wikiUrl = "http://en.wikipedia.org/w/api.php?action=opensearch&search=New_York_Yankees&format=json&callback=wikiCallbackFunction";

            $.ajax(wikiUrl, {
                dataType: "jsonp",
                success: function( wikiResponse ) {
                    console.log( wikiResponse[2][0] );
                }
            });
        </script>   
    </body>
</html>

http://en.wikipedia.org/w/api.php 是您的网址的终端节点。您可以通过访问以下链接了解如何构建您的网址: http://www.mediawiki.org/wiki/API:Main_page

我使用jsonp作为dataType以允许跨站点请求。更多信息请参见: http://www.mediawiki.org/wiki/API:Cross-site_requests

最后,请确保引用Jquery.ajax() API: http://api.jquery.com/jquery.ajax/


0

Wiki Parser将维基百科转储文件转换为XML格式。它还非常快速。然后,您可以使用任何XML处理工具来处理解析后的维基百科文章数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接