2015-11-09 12 views
7

特定のWikiプロジェクトの既存のすべての言語のリストを取得する必要があります。たとえば、ランディングページと同じように、すべてWikivoyageまたはすべてWikipediaの言語です。すべてのWikipedia言語のリストをプログラムで取得します

可能であれば、私はこれをMediaWiki API経由で行うことをお勧めします。

お時間をいただきありがとうございます。

答えて

8

アプローチ3 Sitematrix

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

これはすべてのウィキを返しますが、行列は、それが簡単にcodeによってクライアント側を濾過し、知っています【今のような、のいずれかwiki(ウィキペディア)、wiktionarywikibookswikinewswikiquotewikisourcewikiversitywikivoyage]そのclosed状態による。レスポンスボディのオーバヘッドが1つのリクエストですが、簡単にキャッシュされ圧縮されているため、サーブではありません。

+1

これは私の問題の解決策のようです。テストしてフィードバックを与えるのに時間が必要です。 –

+1

loosy-typed言語を使用している場合は、空の文字列がfalseに評価される可能性があるため、 'closed'プロパティが未定義か' .hasOwnProperty() 'を使ってテストしてください。 –

7

アプローチ1:、ウィキはを知っているすべてインターウィキの接頭辞を取得MediaWikiのAPIのメタモジュールを使用し、siprop=interwikimapのための任意のプロジェクトを照会するにはウィキメディアのwikiファーム

でAPIを使用します:

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)で唯一のWikiを取得するには、クエリに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 

あなた自身のウィキペディア。

アプローチ2:CSVファイルが上の更新されたウィキペディア、ウィキバーシティ、などを除外できwmflabs

すでにプロジェクトのタイプによってフィルタリングされたリストは、http://wikistats.wmflabs.org(CSV)で入手可能である、でWikistatsを使用してこのツールは実験的なものであり、永遠に存在しないかもしれません。

どちらの方法でも、Wikimedia Incubatorウィキが表示されません。

+0

言語の現在の状態を返す方法はありますか?このリストはhttps://en.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

wikipedia.dblistother lists)から減算closed.dblist、次いで端からwikiを除去し、-_を置き換えます。ウィキメディアのwikiファームのAPIを使用して拡張:

+0

Tgrありがとう、これも有用な情報です。 –

+1

残念ながら、https://phabricator.wikimedia.org/T11823(2015年9月)以降、be_x_oldwikiにcanonicalドメインbe-tarask.wikipedia.orgがあるので、残念ながらこれはすべてのケースで正しく機能していません。古いものからリダイレクトを設定しましたドメイン。私は将来、これらの症例がさらに増えると期待しています。 – Krenair

関連する問題