2015-11-09 20 views

risposta

8

Approccio 3: Utilizzando un'API nella wiki farm Wikimedia ed estensione: Sitematrix

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

Mentre questo restituirà tutti i wiki, la matrice sa, è facilmente filtrato lato client code [fin d'ora, uno dei: wiki (Wikipedia), wiktionary, wikibooks, wikinews, wikiquote, wikisource, wikiversity, wikivoyage] e dal suo stato closed. Una richiesta con solo un po 'di overhead del corpo della risposta, ma poiché è facilmente memorizzabile nella cache e si comprime bene, non quella che serve.

+1

Questa sembra una soluzione al mio problema. Avrò bisogno di tempo per testare e dare un feedback. –

+1

Se si utilizza un linguaggio tipografico, accertarsi di testare la proprietà 'closed' con undefined o usando' .hasOwnProperty() ', poiché una stringa vuota può essere valutata su false. –

7

Approccio 1: utilizzando un'API nella Wikimedia wiki farm

Per ottenere tutti prefissi interwiki che un wiki conosce, utilizzare la meta del modulo delle API MediaWiki, e interrogare qualsiasi progetto per siprop=interwikimap:

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

Si otterrà una vasta gamma di oggetti come questo:

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

protorel indica se l'url è un protocollo relativo o meno (ad es. a partire da //. Per i wiki WikiMedia, inizieranno con https. Lo $1 nell'URL è, come avresti immaginato, un segnaposto per il titolo.

per ottenere solo i wiki nella stessa wikifarm (ad es Wikimedia wikis), aggiungere sifilteriw=local alla query:

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

per ricavare il nome in voi langue uso siinlanguagecode, come questo (tutti i wiki Wikimedia, con i loro nomi svedesi, recuperato dall'arabo Wikipedia, ma avrebbe potuto essere qualsiasi endpoint in azienda wiki):

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

da qui si dovrà filtrare ad esempio, le Wikipedie.

Approccio 2: Utilizzo Wikistats a wmflabs

un elenco già filtrati per tipo di progetto è disponibile presso http://wikistats.wmflabs.org (CSV), dove è possibile filtrare Wikipedia, Wikiversità, etc. Il file CSV viene aggiornato base giornaliera, ma lo strumento è sperimentale e potrebbe non esserci per sempre.

In entrambi gli approcci, i wiki Wikimedia Incubator non verranno visualizzati.

+0

C'è un modo per restituire lo stato corrente delle lingue? Ricevo questa lista https://en.wiktionary.org/w/api.php?action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local&format=json&formatversion=2&callback=JSON_CALLBACK ma molti progetti sono stati chiusi. –

+2

Puoi controllare per ogni progetto se è chiuso, usando meta = siteinfo: https://ang.wikiquote.org/w/api.php?action=query&meta=siteinfo&siprop=general%7Cnamespaces%7Cnamespacealiases%7Cstatistics Ma io non pensa di poter filtrare la lista dall'inizio (potrei sbagliarmi) – leo

+0

Grazie per le tue risposte. Lascerò aperta questa domanda, forse qualcuno verrà con qualche soluzione. –

3

Sottrarre closed.dblist da wikipedia.dblist (other lists), quindi rimuovere wiki dall'estremità e sostituirlo con _-.

+0

Grazie Tgr, anche queste sono informazioni utili. –

+1

Purtroppo questo non ha funzionato correttamente in tutti i casi da https://phabricator.wikimedia.org/T11823 (settembre 2015) - be_x_oldwiki ha il dominio canonico be-tarask.wikipedia.org - Ho creato un reindirizzamento dal vecchio dominio però. Prevedo che avremo più di questi casi in futuro. – Krenair