使用api获取wiki页面的模板数据



我想获得维基百科页面的模板数据。我已经尝试了几个api命令,如parse、query、expandtemplates等,但未能获得我想要的所有信息。

例如,关于亚伯拉罕·林肯的页面:http://en.wikipedia.org/wiki/Abraham_Lincoln.

我查询此页面存在哪些模板,如下所示:http://en.wikipedia.org/w/api.php?action=query&prop=模板&format=jsonfm&tllimit=500&title=亚伯拉罕_林肯

有许多模板。我尤其对"信息框"模板感兴趣。如果我正确理解结果,有6个信息框模板:

  • "模板:美国内阁信息框">
  • "模板:信息框内阁成员">
  • "模板:信息框内阁成员/行">
  • "模板:Infobox officeholder">
  • "模板:Infobox officeholder/Office">
  • "模板:信息框官员/个人数据">

现在是困难的部分。如果我像这样使用'query'API:http://en.wikipedia.org/w/api.php?action=query&prop=修订&rvprop=内容&format=json&title=亚伯拉罕·林肯&continue=&rvgeneratexml=

我得到了很多模板,但上面6个模板中只有2个Infobox模板。

我还尝试使用这里推荐的"expandtemplates"和rvexpandtemplate:如何获得wiki模板';内容?。

还尝试使用这里描述的"解析":如何获得复杂维基百科模板的结果?。

所以我的问题是:我如何调用wikiapi来检索我知道存在于特定标题上的特定模板的主体?(例如如何获取亚伯拉罕·林肯的"模板:信息框内阁成员")。

如果这不可能,那么我如何获得该特定页面的所有6个信息框模板?

谢谢。

a]首先获取双花括号中的模板名称:

{{Template: Name}}

b] 使用带有所有参数的"expandtemplates"API调用:

https://en.wikipedia.org/w/api.php?action=expandtemplates&text={{Template: Name}}&prop=wikitext&title=Page Title

您可以使用action=parse解析模板的内容,就好像它包含在页面上一样。只需提供您想要充当的页面的标题(在您的例子中是亚伯拉罕·林肯),并使用contentmodel=wikitext传递模板的wikitext,如下所示(出于明显的原因,省略了实际的wikitext):

https://en.wikipedia.org/w/api.php?action=parse&contentmodel=wikitext&title=Abraham Lincoln&prop=text&text=<table class="infobox ... snip

最新更新