【问题标题】:How to include the result of an api request in a template?如何在模板中包含 api 请求的结果?
【发布时间】:2013-05-01 15:24:02
【问题描述】:

我是第一次使用 Mediawiki 创建一个 wiki。我想在模板中自动包含当前页面的所有反向链接(如“另见”部分)。我尝试使用 API,成功了,但我仍然没有成功地将结果的有用部分包含在我的模板中。

我已经查询 Google 和 Stackoverflow 好几天了(可能是以错误的方式),但我仍然卡住了。

有人可以帮帮我吗?

【问题讨论】:

    标签: mediawiki mediawiki-api mediawiki-templates


    【解决方案1】:

    据我所知,没有合理的方法可以做到这一点。可能最接近的方法是编写一个 JavaScript 代码,该代码对页面中特定 HTML 元素的存在做出反应,发出 API 请求,然后更新 HTML 以包含结果。

    【讨论】:

    • 另外,如果 OP 幸运的话,Scribunto/Lua 模板可以访问相关 API。
    【解决方案2】:

    不可能在 wiki 文本中 执行任何 JavaScript 或使用更不常见的 HTML。因此,您将无法像那样使用 MediaWiki API。

    不过,您必须通过多种不同的选择来实现这样的目标:

    您可以通过在 MediaWiki:Common.js 上包含自定义 JavaScript 代码来使用 API。那里的代码将自动包含在内,可用于增强 wiki 体验。这显然需要客户端上的 JavaScript,因此它可能不是最佳选择;但至少你可以直接使用 API。不过,您必须添加一些内容才能确定正确放置结果的位置。

    更好的选择是使用extension 来为您提供此输出。您可以尝试find 一个已经提供此功能的扩展,或者write your own 使用内部 MediaWiki API(不是 JS 的)来访问该内容。

    我个人可以向您推荐的一个扩展名(以及许多其他事情)是DynamicPageList(完全披露:我与该项目有些关联)。它允许您执行复杂的页面选择。

    例如,您要做的是查找链接到您的页面的所有页面。这可以通过 DPL 轻松完成,如下所示:

    {{ #dpl: linksto = {{FULLPAGENAME}} }}
    

    【讨论】:

    • 感谢您的回复。你给了我非常有用的东西去探索。正如我所说,我是一名 wiki 初学者,在阅读您的帖子之前,我对 Mediawiki 感到非常失望,因为我认为这很难。我将进一步研究如何编写扩展并尝试你的部分。再次感谢您!
    【解决方案3】:

    我最近写了一篇博文,展示了如何调用 API 来获取作业队列大小并将其显示在 wiki 页面内。您可以在Display MediaWiki job queue size inside your wiki 阅读有关它的信息。但是,此解决方案确实需要 External Data 扩展名。代码如下:

    {{#get_web_data: url={{SERVER}}{{SCRIPTPATH}}/api.php?action=query&meta=siteinfo&siprop=statistics&format=json
      | format=JSON
      | data=jobs=jobs}}
    {{#external_value:jobs}}
    

    您可以轻松地换入不同的 API 调用来获取其他数据。对于您要查找的特定项目,@poke 上面的答案可能会更好。

    【讨论】:

    • 它似乎很强大。另一件事要测试:) 根据您的建议和 poke 的建议,我确信我拥有正确的工具。我只需要学习它们。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2012-08-15
    • 2016-03-13
    相关资源
    最近更新 更多