维基百科 API 返回排序数据而不是随机数据

Wikipedia API returning sorted data instead of random data

我正在尝试使用维基百科 API 沙箱从某个类别中生成随机文章。

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

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

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

这意味着每次都会返回一组不同的 "random" 文章,并不一定意味着它们会以随机顺序显示。

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

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

有关工作示例,请参阅此查询:https://en.wikipedia.org/w/api.php?action=query&list=random&rnlimit=5&format=json

您可以在 MediaWiki documentation.

上找到有关使用的更多信息

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

Pages are listed in a fixed sequence, only the starting point is random. This means that if, for example, "Main Page" is the first random page on your list, "List of fictional monkeys" will always be second, "List of people on stamps of Vanuatu" third, etc.

生成器给你一个小的输入集,我认为随机不能很好地处理生成器输入...

将列表 API 与生成器一起使用没有意义。大多数查询 API 以一组 pagenames/ids 作为输入,这个参数可以用生成器代替。列表 API 不接受此类输入,因此它们不会受到影响。

实际发生的是随机 API 在 random 键下生成一个页面(因为它的限制参数默认为 1);该页面是完全随机的,并随每个请求而变化,但它不限于类别(列表 APIs 不能那样工作)。来自生成器 API 的 return(当然不是随机的)显示在 pages 键下,因为任何页面传递给 API 中的随机 title 参数只是 return 在该键下编辑。

你可以做的是调用 Special:RandomInCategory(目前还没有 API 等价物)然后重试直到你得到一个主命名空间页面。