如何通过API将维基百科内容作为文本?

时间:2015-11-21 14:00:39

标签: mediawiki wikipedia wikipedia-api

我希望将维基百科页面作为文本。

我从这里查看了维基百科API https://en.wikipedia.org/w/api.php,其中说为了将页面作为文本,我需要将其附加到页面地址:

api.php?action=query&meta=siteinfo&siprop=namespaces&format=txt

但是,当我尝试将此后缀附加到普通页面的地址时,找不到该页面:

https://en.wikipedia.org/wiki/George_Washington/api.php?action=query&meta=siteinfo&siprop=namespaces&format=txt

按照Get Text Content from mediawiki page via API的说明,我尝试adding /api.php?action=parse&page=test到查询字符串的末尾。因此,我得到了这个:

https://en.wikipedia.org/wiki/George_Washington/api.php?action=parse&page=test

然而,这也不起作用。

2 个答案:

答案 0 :(得分:2)

NB :所有这些示例均已启用CORS。


从精确标题(如the wikipedia page url中所示)以json格式获取文本

https://en.wikipedia.org/w/api.php?action=query&origin=*&prop=extracts&explaintext&titles=Sokolsky_Opening&format=json


通过关键字搜索相关页面,获取ID,获取准确的标题/网址,快速提取文字;

https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exlimit=max&format=json&exsentences=1&origin=*&exintro=&explaintext=&generator=search&gsrlimit=23&gsrsearch=chess


通过精确标题获取Wiki页面ID

https://en.wikipedia.org/w/api.php?action=query&origin=*&prop=pageprops&format=json&titles=Sokolsky_Opening


通过维基页面ID获取完整的html

https://en.wikipedia.org/w/api.php?action=parse&origin=*&format=json&pageid=100017


获取已剥离的html ,没有Wikidata的较轻版本。

https://en.wikipedia.org/w/api.php?action=query&origin=*&prop=extracts&format=json&titles=Sokolsky_Opening


交叉来源:

顺便说一句,使用CORS请求,通过了解或搜索ID和/或页面标题,我们可以使用fetch在ssl上下文中的任何位置嵌入一些wiki文本。

在ID未知的情况下,我们必须循环通过the json

fetch("https://en.wikipedia.org/w/api.php?action=query&origin=*&prop=extracts&explaintext&format=json&titles=Sokolsky_Opening").then(v => v.json()).then((function(v){
    main.innerHTML = v["query"]["pages"]["100017"]["extract"]
    })
  )
<pre id="main" style="white-space: pre-wrap"></pre>

祝你好运。

答案 1 :(得分:1)

您必须使用部分these formatsjsonjsonfmnonephpphpfmrawfmxmlxmlfm,因此txt格式无效。您的API链接也是错误的,请使用:

https://en.wikipedia.org/w/api.php?action=query&titles=George_Washington&prop=revisions&rvprop=content&format=xml