GautierPoupeau
Babel user information | ||||
---|---|---|---|---|
| ||||
Users by language |
Dresseur du bot User:GPUBot. Cette page me sert de foure-tout et de pense-bête sur les modifications effectuées dans Wikidata par mon bot
Propriétés ajoutées
editVoici la liste des propriétés que j'ai ajoutées à partir du script décrit ci-dessus :
- head of government (P6) (fr)
- spouse (P26) (fr)
- father (P22) (fr)
- mother (P25) (fr)
- child (P40) (fr)
- author (P50) (en,de,fr,nl)
- lyricist (P676) (fr)
- record label (P264) (fr)
- creator (P170) (it, fr, nl)
- collection (P195) (fr, nl, it, en)
- diocese (P708) (it)
- place of birth (P19) (communes en France) (Dbpedia fr)
- place of birth (P19) (communes hors France jusqu'à P) (Dbpedia fr)
- place of birth (P19) (Dbpedia it, nl)
- place of birth (P19) (Dbpedia fr)
- date of birth (P569) (fr, nl, de jusq'à C)
- date of death (P570) (en ==> les 50 000 premiers items, fr, nl)
- headquarters location (P159) (fr jusqu'à Paris ==> à revoir)
Ajout des comptes Facebook et Twitter sur les musées
editSuite à une demande sur twitter (cf [1]), la communauté Muzeonum sous l'impulsion d'Antoine Courtin a initié un tableur sur Google docs pour renseigner pour chaque institution patrimoniale le compte facebook et le compte Twitter.
Pour charger l'ensemble de ces données sur Wikidata, j'ai récupéré le fichier au format XLS et je l'ai au préalable retravaillé avec Open Refine (suppression des lignes sans équivalence sur Wikidata ou sans comptes Facebook/twitter et transformation en RDF). Puis, j'ai utilisé le fichier RDF généré et un script python utilisant la bibliothèque Python Pywikibot (branche Core) pour charger les données sur Wikidata. Le script python que j'ai développé est disponible sur GitHub (et certainement largement perfectible, n'hésitez pas à le forker...)
Opération réalisée pour la 1ère fois en Mars 2014
Ajout des identifiants Mérimée aux monuments historiques de Wikidata
editComme promis à User:Symac, voici quelques explications sur l'ajout automatique des identifiants Mérimée aux entrées correspondantes dans Wikidata. Cela s'est fait en deux temps :
- Récupération des identifiants Mérimée et de leurs liens vers la Wikipedia francophone sur Wikimedia Commons
- Chargement des identifiants Mérimée sur la ressource équivalente dans wikidata
Etape 1 : récupération des identifiants Mérimée et du WikiId de la Wikipedia francophone
editA compléter....
Etape 2 : Alimentation de Wikidata
editUn fichier XML contient pour chaque monument les liens vers la Wikipedia francophone ou anglophone et le code Mérimée. Un script bash utilisant les commandes curl et xmlstarlet récupère ces deux informations et les utilise pour créer l'assertion correspondante dans Wikidata.
Voici le code du script bash si ça intéresse quelqu'un, mais il faut savoir que ce script est vraiment horrible... (mais il fonctionne...)
#!/bin/bash
login="VOTRE_LOGIN"
password="VOTRE_MOT_DE_PASSE"
curl --silent --data "lgname=${login}&lgpassword=${password}&action=login&format=xml" -c cookie_wikidata -o login1.xml http://www.wikidata.org/w/api.php
token=$(xmlstarlet sel -T -t -m '/api/login/@token' -v '.' -n login1.xml)
curl --silent --data "lgname=${login}&lgpassword=${password}&action=login&format=xml&lgtoken=${token}" -b cookie_wikidata -o successLogin.xml http://www.wikidata.org/w/api.php
for file in pivot/*.xml
do
uriWikiFr=$(xmlstarlet sel -t -v 'substring-after(/Feature/links/link[@type="wikipediaFr"]/@href,"http://fr.wikipedia.org/wiki/")' -n $file)
merimeeIdentifier=$(xmlstarlet sel -t -v 'substring-after(/Feature/@uri,"http://data.culture.fr/merimee/")' -n $file)
uriCommons=$(xmlstarlet sel -t -v 'translate(substring-after(/Feature/links/link[@type="commons"]/@href,"http://commons.wikipedia.org/wiki/Category:"),"_"," ")' -n $file)
if [[ ${uriWikiFr} && ${merimeeIdentifier} ]]
then
reply=$(curl -o tmp.xml --write-out %{http_code} --silent -b cookie_wikidata http://www.wikidata.org/w/api.php?action=wbgetentities\&titles=${uriWikiFr}\&format=xml\&sites=frwiki)
if [ ${reply} == 200 ]
then
wikidataIdentifier=$(xmlstarlet sel -t -v '/api/entities/entity/@title' -n tmp.xml)
tokenRequest=$(curl -o tmp2.xml --write-out %{http_code} --silent -b cookie_wikidata --data "action=query&prop=info|revisions&intoken=edit&titles=${wikidataIdentifier}&format=xml" https://www.wikidata.org/w/api.php)
edittoken=$(xmlstarlet sel -t -v 'substring-before(/api/query/pages/page/@edittoken,"+\")' -n tmp2.xml)
checkRequest=$(curl -o tmp4.xml --write-out %{http_code} --silent -b cookie_wikidata --data "action=wbgetclaims&entity=${wikidataIdentifier}&format=xml" https://www.wikidata.org/w/api.php)
checkResponse=$(xmlstarlet sel -t -v 'boolean(/api/claims/claim[@id="P380"])' -n tmp4.xml)
if [[ $checkResponse == 'false' ]]
then
editRequest=$(curl --write-out %{http_code} --silent -o tmp3.xml -b cookie_wikidata --data "format=xml&action=wbcreateclaim&entity=${wikidataIdentifier}&property=P380&snaktype=value&value=\"${merimeeIdentifier}\"&token=${edittoken}%2B%5C" https://www.wikidata.org/w/api.php)
if [ ${editRequest} == 200 ]
then
echo "Modification de ${wikidataIdentifier} avec identifiant Mérimée ${merimeeIdentifier}"
fi
else
echo "L'identifiant Mérimée ${merimeeIdentifier} existe déjà pour la ressource ${wikidataIdentifier}"
fi
checkResponse2=$(xmlstarlet sel -t -v 'boolean(/api/claims/claim[@id="P373"])' -n tmp4.xml)
if [[ $checkResponse2 == 'false' ]]
then
editRequest=$(curl --write-out %{http_code} --silent -o tmp3.xml -b cookie_wikidata --data "format=xml&action=wbcreateclaim&entity=${wikidataIdentifier}&property=P373&snaktype=value&value=\"${uriCommons}\"&token=${edittoken}%2B%5C" https://www.wikidata.org/w/api.php)
if [ ${editRequest} == 200 ]
then
echo "Modification de ${wikidataIdentifier} avec categorie Commons ${uriCommons}"
fi
else
echo "La catégorie Commons ${uriCommons} existe déjà pour la ressource ${wikidataIdentifier}"
fi
fi
rm -rf tmp.xml tmp2.xml tmp3.xml tmp4.xml
fi
done
rm -rf login1.xml cookie_wikidata successLogin.xml
Alimenter Wikidata à partir de Dbpedia
editComme l'a montré User:Shonagon dans ce billet, il est possible d'alimenter Wikidata à partir des données de dbpedia. A la suite de User:Shonagon, je me suis appuyé sur Pywikibot pour ajouter des assertions dans wikidata. Mais, à la différence de User:Shonagon, mon script alimente Wikidata directement à partir d'une requête SPARQL grâce à la bibliothèque Python RDFLib.
Vous pouvez trouver le code sur GitHub.
Voici les instructions pour l'utiliser :
- Récupérer et installer la bibliothèque RDFLib
- Récupérer et installer Pywikibot
- Récupérer le script feedWikidata.py et copier le dans le répertoire de Pywikibot
- Dans le même répertoire, créer un fichier texte avec pour nom query.rq et contenant votre requête SPARQL.
- Lancer le script et indiquez le numéro de la propriété que vous souhaitez ajouter.
Instructions pour la requête SPARQL
editLa requête SPARQL doit contenir deux variables intitulés ?s et ?l. ?s correspondra à la page de Wikidata modifié et ?l correspondra à la page lié avec la propriété que vous souhaitez ajouter. Les variables ?s et ?l doivent être des ressources.
Exemple de requêtes SPARQL pour la propriété P6 (Chef de l'exécutif)
select distinct ?s ?l
where {
?s <http://fr.dbpedia.org/property/maire> ?l;
a <http://dbpedia.org/ontology/PopulatedPlace>.
?l a foaf:Person
}
Alignement automatique des œuvres dans data.bnf.fr et dans Wikidata
editExpliquer le processus de mise en relation...
Pour mémoire : Environ 1350 entités de Wikidata alignées automatiquement avec les œuvres équivalentes sur le site dataBNF
Ajout des identifiants BnF
editA partir des données du dump disponible sur le site de Viaf et de la récupération via WikidataQuery des entités possédant un identifiant ViaF mais pas d'identifiant BnF, alignement de l'identifiant BnF et de l'identifiant Wikidata.
Pour les plus curieux, l'alignement a été effectué par une requête SPARQL suite à la conversion en RDF des données de Viaf (le dump utilisé est un txt tabulé) et des données de Wikidata. Voici la requête SPARQL
CONSTRUCT {
?wikidata <http://www.w3.org/2002/07/owl#sameAs> ?bnf
}
WHERE {
?viaf <http://www.w3.org/2002/07/owl#sameAs> ?bnf.
?wikidata <http://www.w3.org/2002/07/owl#sameAs> ?viaf.
FILTER regex(str(?viaf),"^http://viaf.org")
}
L'alignement obtenu est en cours de chargement dans Wikidata via la bibliothèque Python Pywikibot et libRDF