2010-10-28 12 views
11

¿Es posible consultar la API de Wikipedia para artículos que contienen una plantilla específica? The documentation no describe ninguna acción que filtrar los resultados de búsqueda a las páginas que contienen una plantilla. Específicamente, estoy buscando páginas que contengan Template:Persondata. Después de eso, espero poder recuperar solo esa plantilla específica para rellenar datos de genealogía para el proyecto openancestry.org.¿El API de Wikipedia admite una plantilla específica?

La siguiente consulta muestra que la página de Albert Einstein contiene la plantilla Persondata, pero no devuelve el contenido de la plantilla, y no sé cómo obtener una lista de títulos de página que contienen la plantilla. http://en.wikipedia.org/w/api.php?action=query&prop=templates&titles=Albert%20Einstein&tlcontinue=736|10|ParmPart

Devuelve:

<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> 

Sospecho que no puedo conseguir lo que necesito de la API, pero espero que me equivoque y que alguien ya ha abierto un camino por este camino .

Respuesta

7

Usted puede utilizar la consulta embeddedin para encontrar todas las páginas que incluyen la plantilla:

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

que te lleva:

<?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> 

Ver full docs en mediawiki.org.

Editar Uso embeddedin consulta en lugar de backlinks (que no cubre inclusiones plantilla)

+0

1 Eso está bien y casi lo hace Lo que necesito, pero por alguna razón, los resultados tienden a ser de todos, pero el espacio de nombres principal lo hace inútil para mis necesidades. Incluso si anexo blnamespace = 0 de acuerdo con los documentos, la búsqueda no arrojará datos del espacio de nombres de los artículos, que es donde estarán todas las biografías personales de datos personales. Persondata en el espacio de nombres de la conversación es bastante inútil. – grenade

+0

Vaya, aparentemente eso no cubre inclusiones de plantilla. Pero la consulta 'embeddedin' sí, intente esto en su lugar:' http: //en.wikipedia.org/w/api.php? Action = query & list = embeddedin & eititle = Plantilla: Persondata & format = xml' – jpatokal

3

Usando embeddedin no le permite a la búsqueda de una persona específica, la cadena de búsqueda se convierte en el Template:Persondata.

La mejor manera que he encontrado para obtener sólo las personas de Wikipedia es utilizar list=search y filtrar la búsqueda usando 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` 

Recuerda que Wikipedia está utilizando un motor de búsqueda que no lo hace todavía nos permite buscar solo el título, buscará el texto completo. Puede aprovechar eso para obtener resultados más precisos.

+0

Ha sido posible buscar en el título al menos desde 2013 con 'intitle:'. – Tgr

Cuestiones relacionadas