2010-10-28 9 views
11

È possibile interrogare l'API di Wikipedia per articoli che contengono un modello specifico? The documentation non descrive alcuna azione che filtra i risultati di ricerca in pagine che contengono un modello. In particolare, sono dopo le pagine che contengono Template:Persondata. Successivamente, spero di riuscire a recuperare solo quel modello specifico per popolare i dati genealogici per il progetto openancestry.org.L'API di Wikipedia supporta la ricerca di un modello specifico?

La query seguente mostra che la pagina di Albert Einstein contiene il modello di Persondata, ma non restituisce il contenuto del modello e non so come ottenere un elenco di titoli di pagina che contengono il modello. http://en.wikipedia.org/w/api.php?action=query&prop=templates&titles=Albert%20Einstein&tlcontinue=736|10|ParmPart

Returns:

<api> 
<query> 
    <pages> 
    <page pageid="736" ns="0" title="Albert Einstein"> 
    <templates> 
    ... 
    <tl ns="10" title="Template:Persondata"/> 
    ... 
    </templates> 
    </page> 
    </pages> 
</query> 
<query-continue> 
    <templates tlcontinue="736|10|Reflist"/> 
</query-continue> 
</api> 

ho il sospetto che non riesco a ottenere quello che ho bisogno da API, ma spero che mi sbaglio e che qualcuno ha già segnato un percorso questa strada .

risposta

7

È possibile utilizzare la query embeddedin per trovare tutte le pagine che includono il modello:

curl 'http://en.wikipedia.org/w/api.php?action=query&list=embeddedin&eititle=Template:Persondata&eilimit=5&format=xml' 

Che si ottiene:

<?xml version="1.0"?> 
<api> 
    <query> 
    <embeddedin> 
     <ei pageid="307" ns="0" title="Abraham Lincoln" /> 
     <ei pageid="308" ns="0" title="Aristotle" /> 
     <ei pageid="339" ns="0" title="Ayn Rand" /> 
     <ei pageid="340" ns="0" title="Alain Connes" /> 
     <ei pageid="344" ns="0" title="Allan Dwan" /> 
    </embeddedin> 
    </query> 
    <query-continue> 
    <embeddedin eicontinue="10|Persondata|595" /> 
    </query-continue> 
</api> 

Vedi full docs a mediawiki.org.

Modifica Usa embeddedin query invece di backlinks (che non copre inclusioni template)

+0

+1 che è cool e quasi fa quello di cui ho bisogno, ma per qualche motivo i risultati tendono ad essere da tutti tranne il namespace principale rendendolo inutile per le mie esigenze. Anche se aggiungo blnamespace = 0 come da documentazione, la ricerca non restituirà i dati dallo spazio dei nomi degli articoli, che è dove saranno tutte le biografie persondate utili. Persondata nello spazio dei nomi di talk è praticamente inutile. – grenade

+0

Oops, a quanto pare non copre le inclusioni del modello. Ma la query 'embeddedin' lo fa, quindi prova questo:' http: //en.wikipedia.org/w/api.php? Action = query & list = embeddedin & eititle = Template: Persondata & format = xml' – jpatokal

3

Utilizzando embeddedin non consente di cercare una persona specifica, la stringa di ricerca diventa il Template:Persondata.

Il modo migliore che ho trovato per ottenere solo le persone da Wikipedia è quello di utilizzare list=search e filtrare la ricerca utilizzando AND"Born"AND"Occupation":

http://en.wikipedia.org/w/api.php?action=query&list=search&srsearch="Tom Cruise"AND"Born"AND"Occupation"&format=jsonfm&srprop=snippet&srlimit=50` 

Ricordate che Wikipedia sta usando un motore di ricerca che ancora non permettici di cercare solo il titolo, cercherà il testo completo. Puoi approfittarne per ottenere risultati più precisi.

+0

La ricerca nel titolo è stata possibile almeno dal 2013 con 'intitle:'. – Tgr