以编程方式检索所有维基百科语言的列表
Retrieve a list of all Wikipedia languages programmatically
我需要检索某个 wiki 项目的所有现有语言的列表。例如,所有 Wikivoyage or all Wikipedia 种语言,就像在它们的着陆页上一样。
如果可能的话,我更愿意通过 MediaWiki API
执行此操作。
感谢您的宝贵时间。
方法 1:在维基媒体维基场中使用 API
要获取维基已知的所有 维基间前缀,请使用 MediaWiki API 的元模块,并查询 siprop=interwikimap
的任何项目:
https://en.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=interwikimap
你会得到一大堆 objects 这样的:
{
"prefix": "aa",
"local": "",
"language": "Qaf\u00e1r af",
"url": "https://aa.wikipedia.org/wiki/",
"protorel": ""
}
protorel
告诉您 url 是否是协议相关的(即以 //
开头)。对于 WikiMedia wiki,它们将以 https
开头。 URL 中的 </code> 如您所想,是标题的占位符。</p>
<p>要仅获取 <em> 同一 wikifarm</em> 中的 wiki(例如 <a href="https://meta.wikimedia.org/wiki/Complete_list_of_Wikimedia_projects">Wikimedia wikis</a>),请将 <code>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 都不会出现。
减去closed.dblist from wikipedia.dblist (other lists),然后从末尾删除wiki
并将_
替换为-
。
方法 3:在维基媒体维基场中使用 API 和 Extension:Sitematrix
https://commons.wikimedia.org/w/api.php?action=sitematrix&smtype=language
虽然这将 return 所有 wiki,矩阵知道,它很容易通过 code
在客户端过滤 [截至目前,wiki
(维基百科)之一, wiktionary
、wikibooks
、wikinews
、wikiquote
、wikisource
、wikiversity
、wikivoyage
] 及其 closed
状态。一个请求只有一些响应主体开销,但由于它很容易缓存和压缩得很好,所以不提供服务。
我需要检索某个 wiki 项目的所有现有语言的列表。例如,所有 Wikivoyage or all Wikipedia 种语言,就像在它们的着陆页上一样。
如果可能的话,我更愿意通过 MediaWiki API
执行此操作。
感谢您的宝贵时间。
方法 1:在维基媒体维基场中使用 API
要获取维基已知的所有 维基间前缀,请使用 MediaWiki API 的元模块,并查询 siprop=interwikimap
的任何项目:
https://en.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=interwikimap
你会得到一大堆 objects 这样的:
{
"prefix": "aa",
"local": "",
"language": "Qaf\u00e1r af",
"url": "https://aa.wikipedia.org/wiki/",
"protorel": ""
}
protorel
告诉您 url 是否是协议相关的(即以 //
开头)。对于 WikiMedia wiki,它们将以 https
开头。 URL 中的 </code> 如您所想,是标题的占位符。</p>
<p>要仅获取 <em> 同一 wikifarm</em> 中的 wiki(例如 <a href="https://meta.wikimedia.org/wiki/Complete_list_of_Wikimedia_projects">Wikimedia wikis</a>),请将 <code>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 都不会出现。
减去closed.dblist from wikipedia.dblist (other lists),然后从末尾删除wiki
并将_
替换为-
。
方法 3:在维基媒体维基场中使用 API 和 Extension:Sitematrix
https://commons.wikimedia.org/w/api.php?action=sitematrix&smtype=language
虽然这将 return 所有 wiki,矩阵知道,它很容易通过 code
在客户端过滤 [截至目前,wiki
(维基百科)之一, wiktionary
、wikibooks
、wikinews
、wikiquote
、wikisource
、wikiversity
、wikivoyage
] 及其 closed
状态。一个请求只有一些响应主体开销,但由于它很容易缓存和压缩得很好,所以不提供服务。