13

是否可以在 Wikipedia API 中查询包含特定模板的文章?该文档没有描述将搜索结果过滤到包含模板的页面的任何操作。具体来说,我在寻找包含Template:Persondata. 之后,我希望能够仅检索该特定模板,以便为openancestry.org项目填充家谱数据。

下面的查询显示 Albert Einstein 页面包含 Persondata 模板,但它不返回模板的内容,我不知道如何获取包含该模板的页面标题列表。 http://en.wikipedia.org/w/api.php?action=query&prop=templates&titles=Albert%20Einstein&tlcontinue=736|10|ParmPart

回报:

<api>
 <query>
  <pages>
   <page pageid="736" ns="0" title="Albert Einstein">
    <templates>
     ...
     <tl ns="10" title="Template:Persondata"/>
     ...
    </templates>
   </page>
  </pages>
 </query>
 <query-continue>
  <templates tlcontinue="736|10|Reflist"/>
 </query-continue>
</api>

我怀疑我无法从 API 中得到我需要的东西,但我希望我错了,并且有人已经在这条道路上开辟了道路。

4

3 回答 3

7

您可以使用embeddedin查询来查找包含该模板的所有页面:

curl 'http://en.wikipedia.org/w/api.php?action=query&list=embeddedin&eititle=Template:Persondata&eilimit=5&format=xml'

这让你:

<?xml version="1.0"?>
<api>
  <query>
    <embeddedin>
      <ei pageid="307" ns="0" title="Abraham Lincoln" />
      <ei pageid="308" ns="0" title="Aristotle" />
      <ei pageid="339" ns="0" title="Ayn Rand" />
      <ei pageid="340" ns="0" title="Alain Connes" />
      <ei pageid="344" ns="0" title="Allan Dwan" />
    </embeddedin>
  </query>
  <query-continue>
    <embeddedin eicontinue="10|Persondata|595" />
  </query-continue>
</api>

请参阅mediawiki.org 上的完整文档

编辑使用embeddedin查询而不是backlinks(不包括模板包含)

于 2010-11-07T23:17:43.280 回答
3

使用embeddedin不允许您搜索特定的人,搜索字符串变为Template:Persondata.

我发现仅从 Wikipedia 获取人员的最佳方法是使用list=search和过滤搜索AND"Born"AND"Occupation"

http://en.wikipedia.org/w/api.php?action=query&list=search&srsearch="Tom Cruise"AND"Born"AND"Occupation"&format=jsonfm&srprop=snippet&srlimit=50`

请记住,维基百科使用的搜索引擎还不允许我们仅搜索标题,它将搜索全文。您可以利用它来获得更精确的结果。

于 2014-05-29T22:36:37.490 回答
1

接受的答案解释了如何使用特定模板列出页面,但如果您需要使用模板搜索页面,您可以使用hastemplate:搜索关键字:https ://en.wikipedia.org/w/api.php?action= query&list=search&srsearch=hastemplate:NPOV%20physics

于 2016-12-28T02:22:05.473 回答