-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Connecter TaxHub à wikidata pour en récupérer les médias #150
Comments
C'est top ça ! Merci @amandine-sahl |
Génial ! |
Ci joint le code, même si ça reste à l'état de brouillon Pour que ça fonctionne il faut installer les librairies python : SPARQLWrapper et psycopg2 import requests
import psycopg2
from SPARQLWrapper import SPARQLWrapper, JSON
try:
conn = psycopg2.connect("dbname='mabase' user='monuser' host='monhost' password='monpass'")
except:
print "I am unable to connect to the database"
#DbMedia Query
query = """SELECT ?item ?itemLabel ?nomSc ?image ?identifiant_TAXREF WHERE {
?item wdt:P225 ?nomSc.
?item wdt:P18 ?image.
?item wdt:P3186 '%s'
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr" }
} LIMIT 200"""
sparql = SPARQLWrapper("https://query.wikidata.org/sparql")
cur = conn.cursor()
#cur.execute("""SELECT cd_ref from taxonomie.bib_noms LIMIT 100""")
#cur.execute("""SELECT cd_ref from atlas.vm_taxons_plus_observes LIMIT 100""")
cur.execute("""SELECT DISTINCT cd_ref from taxonomie.bib_noms LEFT OUTER JOIN taxonomie.t_medias USING(cd_ref) WHERE id_media IS NULL""")
rows = cur.fetchall()
sqlI = "INSERT INTO taxonomie.t_medias(cd_ref, titre, url,is_public, id_type, auteur) VALUES (%s, '%s', '%s', true, 2, '%s')"
for cd_ref in rows:
try:
print("Taxon %s" % cd_ref[0])
sparql.setQuery(query % cd_ref[0])
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
if (result['image']['value']):
print ' -- INSERT IMAGE'
from lxml import etree
#Recuperation des donnees sur commons
url = "https://tools.wmflabs.org/magnus-toolserver/commonsapi.php?image=%s"% result['image']['value'].split('Special:FilePath/', 1 )[1]
r = requests.get(url)
import xmltodict
a = xmltodict.parse(r.content)
try:
aut = 'Commons'
if 'author' in a['response']['file']:
if len( a['response']['file']['author'] ) < 500:
aut = a['response']['file']['author']
sql= sqlI % (cd_ref[0], a['response']['file']['name'], result['image']['value'], aut)
cur.execute(sql)
conn.commit()
except Exception as e:
print(' ERREOR')
print(e)
conn.rollback()
pass
except Exception as e:
pass
cur.execute("""
UPDATE taxonomie.t_medias SET id_type = 1
WHERE id_media IN (SELECT max(id_media)
FROM taxonomie.t_medias
GROUP BY cd_ref);
""")
cur.execute("REFRESH MATERIALIZED VIEW atlas.vm_medias;")
cur.execute("REFRESH MATERIALIZED VIEW atlas.vm_taxons_plus_observes;")
conn.commit()
conn.close() |
@amandine-sahl, faut il une version minimale de taxhub ? Au PNM nous utilisons la version 1.1.1. |
Super nouvelle ! |
A voir si il est utile d'ajouter un type, peut-être. |
Commit principal : 00da9a6 Les champs |
DÉBUT D'EXPLICATION : Wikidata permet de récupérer les ID des images associés au CD_REF (propriété 3186 dans Wikidata). Ensuite on récupère les images et leurs infos dans COMMONS avec les ID IMAGES récupérés dans Wikidata. Pour choisir pour quels CD_REF on souhaite interroger Wikidata et rapatrier des images, il faut adapter la requête SQL dans
|
Installation de l’environnement python
Configuration du script
Execution du script
|
A noter qu'il est possible de récupérer les photo wikimedia à partir du cd_nom. Exemple avec 163394 : Voir aussi la nouvelle API Taxref dans laquelle les médias CC sont interrogeables : https://taxref.mnhn.fr/taxref-web/api/doc |
Voilà un test de récupération des photos avec l'API Taxref (2 scripts shell indépendants, un avec suivi des ajouts de photos, un sans) : Splendens/atlas_biodiv_pdl@2780bea |
L'INPN indique qu'il est important de véhiculer source et licences associés. La licence doit donc aussi être affichée donc. Je ferai quelque chose comme : |
Je me demande aussi si c'est pertinent de télécharger les photos ou si il vaudrait pas mieux juste utiliser l'URL de l'image sans la stocker localement. |
Je dirais que si la source est fiable et durable il est préférable de ne pas la stocker. Mais peut on mettre en place un mécanisme pour tirer les sources pertinentes de celles qui ne le sont pas ? |
Quand on se connecte à l'API on peut choisir de renseigner l'URL du média là où il est ou bien de la rapatrier en local en de stocker son chemin. |
Le script d'import de médias INPN a été réécrit en Python et ajusté par @amandine-sahl et est maintenant disponible ici : https://github.com/PnX-SI/TaxHub/tree/develop/data/scripts/import_inpn_media |
… au changement de l'API - cf #150
Bonjour, Je suis en train de tester le script d'import et j'ai l'erreur suivante. Je ne comprends pas ce qui pose pb.
|
Désolé @RomainBaghi , pas de réponse à te donner pour ma part, j'espère que tu as pu solutionner ton soucis. Pour ma part, ça a marché tout seul. Un grand merci à @amandine-sahl pour ce script ! (pour info, j'ai également pris le premier media pour chaque cd_ref afin de le rendre de type media_principal :
|
Il faudrait si possible que tu indiques la requete utilisée dans ton script. |
Salut à tous, Je poste ici car c'est connexe mais nécessite peut-être une autre issue. J'ai utilisé moi aussi le script d'@amandine-sahl pour peupler notre liste de taxons avec les médias INPN (grand merci à elle en passant !). Après échange avec @DonovanMaillard, même comportement sur son instance. Il est allé aux nouvelles auprès du MNHN qui lui confirme que le problème vient bien de chez eux, qu'il a été identifié et déjà réglé une 1ere fois ce matin. Là, c'est reparti semble-t'il. Cela (re)pose la question de l'inter-dépendances des webservices même auprès de ceux réputés stables et suivis (on peut faire le parallèle avec les géoservices IGN qui ont été plus que capricieux ces derniers mois...). Comment améliorer cela selon vous ?
Bon c'est sûr que l'idéal c'est que tous les webservices qu'on utilisent fonctionnent toujours au top (redondances, délais de rétablissement très rapide etc.). Ce qui est déjà pas loin d'être le cas en passant. Mais il y a forcément des couacs de temps en temps... Merci pour vos retours, |
En effet les médias ne sont pas stockés. Je pense que c'est bien de faire comme ça, mais un paramètre pour laisser le choix à chacun serait une évolution intéressante. Par contre on a maintenant un mécanisme de génération dynamique de vignettes et celles-ci sont stockés en cache sur le serveur après avoir été appelés une fois. Pour toutes les avoir directement, @amandine-sahl a pré-généré les vignettes en faisant une boucle de wget. Ajouter un test qui affiche une autre image par défaut est intéressant aussi. |
Pour info, niveau maintenance, l'API inpn a été réparé en quelques heures après leur avoir fait remonter l'information. Mais en effet, un paramètre serait intéressant pour pouvoir stocker en local soi rien, soit le média principal, soit tous les médias. A voir pour la suite :) |
@RomainBaghi je pense que l'erreur en question venait du fait que l'API renvoyait un code HTTP qui n'était pas 200 et donc une réponse vide. J'ai eu le cas avec un appel à l'API qui renvoyait le code 404 (not found). J'ai modifié le code pour éviter ce problème dans la pull request #240 . J'en ai profité pour compléter le README du script en ajoutant la proposition de requête de @DonovanMaillard pour sélectionner une photo principale. |
Dans le cadre de la prestation GeoNature/Opendata/Interopérabilité qui a été lancée récemment (http://geonature.fr/documents/cctp/2017-10-CCTP-GeoNature-interoperabilite.pdf), @amandine-sahl a fait des premiers tests exploratoires.
Les tests s'appuient sur la démarche https://fr.okfn.org/2017/03/03/diplonum-mieux-proteger-les-especes-menacees-avec-wikidata/
L'objectif est de récupérer les médias de Wikidata et Commons pour les intégrer dans les taxons présents dans une instance de TaxHub (
taxonomie.t_medias
) : https://github.com/PnX-SI/TaxHub/blob/master/data/taxhubdb.sql#L359-L372Ces tests ont ainsi permis au PnCevennes de récupérer 6261 médias pour 4255 taxons sur 7262.
Il serait aussi possible de récupérer les cartes de répartition (P181) et les médias audio (p51).
Code expérimental du test :
The text was updated successfully, but these errors were encountered: