2011-08-25 80 views

回答

34

见关于MediaWiki docs

这些本节中的关键参数。

prop=revisions&rvprop=content&rvsection=0 

rvsection = 0指定仅返回主导部分。

看到这个例子。

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&rvsection=0&titles=pizza

为了得到HTML,你可以使用同样用行动=解析 http://en.wikipedia.org/w/api.php?action=parse&section=0&prop=text&page=pizza

注意,那你就必须去掉任何模板或InfoBoxes到。

+0

是否必须在获取该值后发送action = parse query? – bbnn

+2

我想得到一个干净的文本,我应该自己写解析器吗?或者有一些API查询来做到这一点?谢谢 – bbnn

+0

,所以我必须从这里编写我自己的解析器,非常感谢! – bbnn

3

如果您需要为大量文章执行此操作,则不要直接查询网站,而应考虑下载维基百科数据库转储,然后通过API(例如JWPL)访问它。

24

请参阅Is there a clean wikipedia API just for retrieve content summary?其他建议的解决方案。这里是一个我建议:

其实是有一个非常好的道具称为extracts,可以使用专门为此设计的查询中使用。提取物允许您获取文章摘录(截断文章文本)。有一个名为exintro的参数,可用于检索第0部分(没有其他资产,如图像或信息框)中的文本。还可以检索与更精细的粒度提取物,例如通过在一定数目的字符(exchars)或由特定数量的句子(exsentences

下面是一个示例查询http://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exintro=&titles=Stack%20OverflowAPI沙箱http://en.wikipedia.org/wiki/Special:ApiSandbox#action=query&prop=extracts&format=json&exintro=&titles=Stack%20Overflow以更多地试验此查询。

请注意,如果你想第一段具体你仍然需要获得第一个标签。然而,在这个API调用中,没有其他资源需要解析。如果您对此介绍摘要感到满意,您可以通过运行删除html标签的功能(如php's strip_tag)来检索文本。

1

您可以直接下载维基百科数据库并将所有页面解析为XML,其中Wiki Parser是独立应用程序。第一段是生成的XML中的单独节点。

或者,您可以从其纯文本输出中提取第一段。

12

我做这种方式:

https://en.wikipedia.org/w/api.php?action=opensearch&search=bee&limit=1&format=json

你得到的回应是数据的数组,易于解析:

[ 
    "bee", 
    [ 
    "Bee" 
    ], 
    [ 
    "Bees are flying insects closely related to wasps and ants, known for their role in pollination and, in the case of the best-known bee species, the European honey bee, for producing honey and beeswax." 
    ], 
    [ 
    "https://en.wikipedia.org/wiki/Bee" 
    ] 
] 

得到公正第一段limit=1是什么你需要。

2
<script>  
    function dowiki(place) { 
     var URL = 'https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext='; 

     URL += "&titles=" + place; 
     URL += "&rvprop=content"; 
     URL += "&callback=?"; 
     $.getJSON(URL, function (data) { 
      var obj = data.query.pages; 
      var ob = Object.keys(obj)[0]; 
      console.log(obj[ob]["extract"]); 
      try{ 
       document.getElementById('Label11').textContent = obj[ob]["extract"]; 
      } 
      catch (err) { 
       document.getElementById('Label11').textContent = err.message; 
      } 

     }); 
    } 
</script> 
+0

考虑在你的答案中增加一些文字描述:)(即与其他人相比,它带来了什么) –

1

您可以使用JQuery来做到这一点。首先用适当的参数创建url。检查此link以了解参数的含义。然后使用$.ajax()方法检索文章。请注意,维基百科不允许跨源请求。这就是为什么我们在请求中使用dataType : jsonp

var wikiURL = "https://en.wikipedia.org/w/api.php"; 
wikiURL += '?' + $.param({ 
    'action' : 'opensearch', 
    'search' : 'your_search_term', 
    'prop' : 'revisions', 
    'rvprop' : 'content', 
    'format' : 'json', 
    'limit' : 10 
}); 

$.ajax({ 
    url: wikiURL, 
    dataType: 'jsonp', 
    success: function(data) { 
     console.log(data); 
    } 
});