以编程方式检索所有Wikipedia语言的列表

时间:2015-11-09 12:06:57

标签: wikipedia wikipedia-api mediawiki-api wikimedia

我需要检索某个wiki项目的所有现有语言的列表。例如,所有Wikivoyage或所有Wikipedia种语言,就像在其着陆页上一样。

如果有可能,我更愿意通过MediaWiki API执行此操作。

感谢您的时间。

3 个答案:

答案 0 :(得分:7)

方法3:在维基媒体wiki服务器场和Extension:Sitematrix中使用API​​

https://commons.wikimedia.org/w/api.php?action=sitematrix&smtype=language

虽然这将返回所有wiki,矩阵知道,它很容易被客户端code过滤[截至目前,其中一个:wiki(维基百科),wiktionarywikibookswikinewswikiquotewikisourcewikiversitywikivoyage]及其closed州。一个请求只有一些响应主体开销,但因为它很容易缓存和压缩,而不是服务。

答案 1 :(得分:6)

方法1:在维基媒体wiki服务器场中使用API​​

要获取维基知道的所有所有 interwiki前缀,请使用MediaWiki API的元模块,并查询siprop=interwikimap的任何项目:

https://en.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=interwikimap

您将获得大量这样的对象:

{
    "prefix": "aa",
    "local": "",
    "language": "Qaf\u00e1r af",
    "url": "https://aa.wikipedia.org/wiki/$1",
    "protorel": ""
}

protorel告诉您网址是否为协议相对(即以//开头。对于WikiMedia wiki,它们将以https开头。$1 in正如您所想,URL是标题的占位符。

要仅获取相同wikifarm 中的wiki(例如Wikimedia wikis),请在查询中添加sifilteriw=local

https://sv.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local

要获取你的语言中使用siinlanguagecode的名字,就像这样(所有维基媒体wiki,其瑞典语名称,从阿拉伯语维基百科中检索,但可能是维基农场中的任何端点):

https://ar.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local&siinlanguagecode=sv

从这里你必须过滤掉例如维基百科自己。

方法2:在wmflabs上使用Wikistats

已经按http://wikistats.wmflabs.org(csv)提供已按项目类型过滤的列表,您可以在其中过滤掉Wikipedia,Wikiversity等.csv文件每天都会更新,但该工具是实验性的,并且可能不会永远存在。

在任何一种方法中,维基媒体孵化器wiki都不会出现。

答案 2 :(得分:3)

closed.dblistwikipedia.dblist)中减去other lists,然后从结尾删除wiki,并将_替换为-