【问题标题】:Get output of a template call in a page from MediaWiki API从 MediaWiki API 获取页面中模板调用的输出
【发布时间】:2014-04-05 13:11:33
【问题描述】:

我正在尝试解析 wikia 上的页面,以获取页面上 Infobox Book 模板的更多信息。问题是我只能在页面上获取模板的源而不是转换后的模板。

我使用以下网址作为基础: http://starwars.wikia.com/api.php?format=xml&action=expandtemplates&text={{Infobox%20Book}}&generatexml=1

文档并没有真正告诉我如何将其指向特定页面并从页面解析转换后的模板。这甚至可能吗?还是我需要自己解析?

【问题讨论】:

  • 我不明白,你想做什么?您在上面给出的 API 调用对我来说非常好。您想解析一整页,而不是一段 wiki 文本吗?那么你应该使用/index.php?action=render&title=Page_title(或者,如果你真的因为某种原因需要使用API​​入口点,使用解决方法/api.php?action=parse&text={{NS:page}})
  • 我想要一个完全填充的模板。这包括相关页面的数据。上面只为您提供了模板的原始文本,而不是带有源数据的渲染模板。在目标处使用此 url:http://starwars.wikia.com/wiki/Lost_Tribe_of_the_Sith:_Skyborn 我希望以下 api 调用为我提供包含所有书籍信息的模板。 http://starwars.wikia.com/api.php?format=xml&action=expandtemplates&text={{Infobox%20Book}}&generatexml=1&page=Lost_Tribe_of_the_Sith:_Skyborn。不过,这只给出了原始模板文本。
  • 我想你误解了 MediaWiki 模板在这里是如何工作的。在这种情况下添加&page=Lost_Tribe_of_the_Sith:_Skyborn 没有任何区别,因为模板{{Infobox Book}} 不会根据它所在的页面而改变。它只会随着输入的参数而变化,例如{{Infobox Book|book name=Lost Tribe of the Sith: Skyborn}}.
  • 如果你想从你的维基页面中提取任意数据片段,我建议你看看 Semantic MediaWiki,但是你当然必须离开 Wikia。

标签: api mediawiki


【解决方案1】:

要使用给定页面中的参数扩展模板,您必须提供这些参数。 API 无法知道模板在不同页面中的使用方式(甚至可以使用两次!)。

这行得通:

action=expandtemplates&text={{Infobox Book|book name=Lost Tribe of the Sith: Skyborn}}

当然,您必须不断添加所有要解析的参数(在您的示例中有 14)。

如果您的模板会根据它们所在的页面自动更改(此处不是这种情况),例如通过使用诸如{{PAGENAME}} 之类的魔术词,您可以将&page=Lost_Tribe_of_the_Sith:_Skyborn 添加到您的API 调用中,以设置模板应在其中展开的上下文。

如果您不知道给定的参数,您可以:

  1. 使用index.php?action=render&title=Lost_Tribe_of_the_Sith:_Skyborn 渲染整个页面,并解析返回的html 以创建实际的信息框

  2. 获取 (action=query&prop=revisions) 并解析 wikicode 以获取模板的参数,并将它们提供给 expandtemplates call

  3. 开始使用像 Semantic MediaWiki 这样的扩展,它可以让您将 wiki 更像是一个数据库

当然,1 和 2 可能以多种方式出错,就像 wiki 一样,根据定义,您无法知道内容总是以一致的方式输入。

【讨论】:

  • 如果可以的话,我会给你更多的支持。修订 api 调用正是我所需要的,谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-10-01
  • 2021-05-21
  • 2013-05-10
  • 2010-12-10
  • 2019-03-06
  • 1970-01-01
  • 2015-07-04
  • 2011-04-28
相关资源
最近更新 更多