2010-10-28 5 views
11

Est-il possible d'interroger l'API Wikipedia pour les articles qui contiennent un modèle spécifique? The documentation ne décrit aucune action susceptible de filtrer les résultats de la recherche sur les pages contenant un modèle. Plus précisément, je suis après les pages qui contiennent Template:Persondata. Après cela, j'espère être en mesure de récupérer seulement ce modèle spécifique afin de remplir les données de généalogie pour le projet openancestry.org.L'assistance de l'API Wikipedia recherche-t-elle un modèle spécifique?

La requête ci-dessous montre que la page Albert Einstein contient le modèle Persondata, mais il ne renvoie pas le contenu du modèle, et je ne sais pas comment obtenir une liste des titres de page qui contiennent le modèle. http://en.wikipedia.org/w/api.php?action=query&prop=templates&titles=Albert%20Einstein&tlcontinue=736|10|ParmPart

Retours:

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

Je pense que je ne peux pas obtenir ce que je besoin de l'API, mais j'espère que je me trompe et que quelqu'un a déjà ouvert la voie sur ce chemin .

Répondre

7

Vous pouvez utiliser la requête embeddedin pour trouver toutes les pages qui incluent le modèle:

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

Ce qui vous permet de vous:

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

Voir full docs à mediawiki.org.

Modifier Utilisez embeddedin requête au lieu de backlinks (qui ne couvre pas les inclusions de modèle)

+0

+1 C'est cool et fait presque ce dont j'ai besoin, mais pour une raison quelconque, les résultats ont tendance à être de tout sauf l'espace de noms principal le rendant inutile pour mes besoins. Même si j'ajoute blnamespace = 0 selon les docs, la recherche ne renverra pas les données de l'espace de noms des articles, où se trouvent toutes les biographies de personnes utiles. Persondata dans l'espace de noms de conversation est à peu près inutile. – grenade

+0

Oops, apparemment cela ne couvre pas les inclusions de gabarit. Mais la requête 'embeddedin' le fait, alors essayez plutôt ceci:' http: //en.wikipedia.org/w/api.php? Action = query & list = embeddedin & eititle = Modèle: Persondata & format = xml' – jpatokal

3

En utilisant embeddedin ne vous permet pas de rechercher une personne spécifique, la chaîne de recherche devient le Template:Persondata.

La meilleure façon que j'ai trouvé pour obtenir que les gens de Wikipedia est d'utiliser list=search et filtrer la recherche en utilisant 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` 

Rappelez-vous que Wikipédia utilise un moteur de recherche qui ne fonctionne pas encore permettez-nous de rechercher seulement le titre, il recherchera le texte intégral. Vous pouvez en profiter pour obtenir des résultats plus précis.

+0

La recherche dans le titre a été possible au moins depuis 2013 avec 'intitle:'. – Tgr

Questions connexes