2015-11-09 61 views

回答

8

方法3:在維基維基農場中使用的API和擴展:Sitematrix

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

雖然這將返回所有維基矩陣知道,它很容易被code過濾客戶端[截至目前,之一:wiki(維基百科),wiktionarywikibookswikinewswikiquotewikisourcewikiversitywikivoyage]和其closed狀態。一個只有一些響應體的開銷請求,但由於它很容易被緩存和壓縮,所以不能提供服務。

+1

這似乎是解決我的問題。我需要一些時間來測試並提供反饋。 –

+1

如果您使用的是鬆散類型的語言,請確保針對未定義或使用'.hasOwnProperty()'測試'closed'屬性,因爲空字符串可能會評估爲false。 –

7

方法1:在維基維基農場

在使用API​​來獲取一個維基知道所有 wiki的前綴,使用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告訴你url是否是協議相對的(即,從//開始。對於WikiMedia維基,他們將以https開頭。正如你所想象的,URL中的$1是標題的佔位符。

爲了只獲取相同wikifarm的維基(如Wikimedia wikis),添加sifilteriw=local到查詢:

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

爲了獲取你所有維基媒體維基名字索緒爾使用siinlanguagecode,像這樣(,他們的名字瑞典,阿拉伯語維基百科檢索,但可能是維基場中的任何端點):

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

從這裏,你將不得不過濾掉如你自己維基百科。

方法二:使用Wikistats在wmflabs

已由型項目的篩選名單可在http://wikistats.wmflabs.org(CSV),在那裏你可以過濾掉維基百科,維基等CSV文件更新每日的基礎上,但該工具是實驗性的,可能永遠不會存在。

無論哪種方法,維基媒體孵化器維基都不會顯示出來。

+0

有沒有辦法返回語言的當前狀態?我得到這個列表https://zh.wiktionary.org/w/api.php?action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local&format=json&formatversion=2&callback=JSON_CALLBACK但是很多項目已經關閉。 –

+2

你可以檢查每個項目是否關閉,使用meta = siteinfo:https://ang.wikiquote.org/w/api.php?action=query&meta=siteinfo&siprop=general%7Cnamespaces%7Cnamespacealiases%7Cstatistics但我不認爲你可以從頭開始過濾列表(我可能是錯的) – leo

+0

感謝您的回答。我會把這個問題留出來,也許有人會帶來一些解決方案。 –

3

減去closed.dblistwikipedia.dblistother lists),然後從末端去除wiki並用-替換_

+0

謝謝Tgr,這也是有用的信息。 –

+1

不幸的是,由於https://phabricator.wikimedia.org/T11823(2015年9月) - be_x_oldwiki擁有規範域名be-tarask.wikipedia.org,因此無法在所有情況下正常運行 - 我確實設置了舊的重定向域雖然。我預計未來我們會有更多的這種情況。 – Krenair