【问题标题】:Wikipedia API returning sorted data instead of random dataWikipedia API 返回排序数据而不是随机数据
【发布时间】:2015-03-19 15:18:24
【问题描述】:

我正在尝试使用 Wikipedia API 沙箱从一个类别中生成随机文章。

http://en.wikipedia.org/w/api.php?action=query&list=random&format=jsonfm&rnnamespace=0&generator=categorymembers&gcmtitle=Category%3ATeam%20sports&gcmnamespace=0

但是每当进行查询时,文章都会按字母顺序而不是随机返回。 每次返回相同的文章集。每次检索到的文章数量远低于该类别的文章总数。查询中的错误是什么?

【问题讨论】:

    标签: api mediawiki wikipedia wikipedia-api mediawiki-api


    【解决方案1】:

    将列表 API 与生成器一起使用是没有意义的。大多数查询 API 将一组页面名称/ID 作为输入,并且此参数可以替换为生成器。列表 API 不接受此类输入,因此不会受到影响。

    实际发生的是随机 API 在random 键下生成单个页面(因为它的限制参数默认为 1);该页面是适当随机的,并且随着每个请求而变化,但它不限于类别(列表 API 不以这种方式工作)。生成器 API 的返回(当然不是随机的)显示在 pages 键下,因为在 title 参数中传递给随机 API 的任何页面都只是在该键下返回。

    您可以调用Special:RandomInCategory(还没有等效的 API)然后重试,直到获得主命名空间页面。

    【讨论】:

      【解决方案2】:

      https://www.mediawiki.org/wiki/API:Random

      页面按固定顺序列出,只有起点是随机的。这意味着,例如,如果“主页”是您列表中的第一个随机页面,则“虚构猴子列表”将始终排在第二位,“瓦努阿图邮票上的人物列表”将始终排在第三位,依此类推。

      【讨论】:

      • 我每次都得到相同的文章集。根据定义,我想我至少每次都应该得到不同的文章集。
      【解决方案3】:

      生成器为您提供了一个小的输入集,我认为 random 不能很好地与生成器输入配合使用...

      【讨论】:

        【解决方案4】:

        random 作为值传递给list 参数不会影响文章的顺序,但会影响返回的文章。

        这意味着每次将返回一组不同的“随机”文章,并不一定意味着它们将以随机顺序呈现。

        在相关说明中,对于您在每个查询中获得相同数据集的原因,最可能的解释是您限制了查询范围(使用其他参数),因此可能的文章总数为小于最大数量 (rnlimit),因此每次返回相同的集合。

        要么限制返回的文章数量,要么扩大搜索查询的范围。

        查看此查询以获取工作示例:https://en.wikipedia.org/w/api.php?action=query&list=random&rnlimit=5&format=json

        您可以在MediaWiki documentation 上找到有关使用的更多信息。

        【讨论】:

        • 可能的文章总数不小于rnlimit。我通过使用 continue 参数检索下一组文章来验证这一点。我总是得到相同的文章集。如何从同一类别中随机生成一组文章?
        猜你喜欢
        • 2018-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多