我想获得维基百科页面的模板数据。我已经尝试了几个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