Wikidata:Créer un robot

This page is a translated version of the page Wikidata:Creating a bot and the translation is 100% complete.

Cette page explique comment créer des robots pour Wikidata. N'hésitez pas à partager votre code, à ajouter de nouveaux exemples et toutes les améliorations que vous voudrez.

Exigences

Pour créer des robots, vous avez besoin de :

  • Quelques compétences en codage (Python, Perl, PHP...)
  • Un framework (un des frameworks ci-dessous) et un code à exécuter pour compléter une tâche
  • Un compte de robot (et approuvé)
  • Un éditeur de code source (Notepad++, Geany, vim, emacs)

Recommendation

  • Rejoignez un canal Wikidata telegram et participez aux discussions (et demandez de l'aide si vous êtes bloqués dans la programmation).

Pywikibot

Dans les sections suivantes vous allez apprendre comment installer, configurer et vous connecter en utilisant pywikibot. Vous n'avez besoin d'effectuer ces trois étapes qu'une seule fois. De plus, des exemples basiques sont là pour apprendre à programmer les robots.

Installation

Pour plus de détails à propos de l'installation de pywikibot, voir mw:Manual:Pywikibot/Installation et Wikidata:Pywikibot - Python 3 Tutorial/Setting up Shop
Pour utiliser pywikibot sans installation, voir mw:Manual:Pywikibot/PAWS

Pour installer pywikibot :

Configuration

Pour plus de détails à propos de la configuration de pywikibot, voir mw:Manual:Pywikibot/user-config.py.

Vous devez configurer le fichier user-config.py avec le nom d'utilisateur du robot, la famille du projet et la langue. Pour Wikidata, les paramètres de famille et de langue sont les mêmes, wikidata.

Vous pouvez réduire le délai entre chaque modification en ajoutant : put_throttle = 1

Connexion

Après avoir configuré le fichier user-config.py, connectez-vous comme suit :

$ python login.py

On vous demandera le mot de passe du robot, écrivez-le et pressez la touche Entrée. Si vous l'avez fait correctement, vous devriez à présent être connecté.

Exemple 1 : Récupérer des données

Cet exemple récupère des données pour la page se référant à Douglas Adams. Sauvegardez le code source suivant dans un fichier et exécutez-le avec python example1.py

item.get() se connecte à Wikidata et collecte les données. On obtiens alors (reformaté pour plus clareté) :

{
    'claims': {
        'P646': [<pywikibot.page.Claim instance at 0x7f1880188b48>],
        'P800': [<pywikibot.page.Claim instance at 0x7f1880188488>, <pywikibot.page.Claim instance at 0x7f1880188368>]
        ...
    }
    'labels': {
        'gu': '\u0aa1\u0a97\u0acd\u0ab2\u0abe\u0ab8 \u0a8f\u0aa1\u0aae\u0acd\u0ab8',
        'scn': 'Douglas Adams',
        ...
    }
    'sitelinks': {
        'fiwiki': 'Douglas Adams',
        'fawiki': '\u062f\u0627\u06af\u0644\u0627\u0633 \u0622\u062f\u0627\u0645\u0632',
        'elwikiquote': '\u039d\u03c4\u03ac\u03b3\u03ba\u03bb\u03b1\u03c2 \u0386\u03bd\u03c4\u03b1\u03bc\u03c2',
        ...
    }
    'descriptions': {
        'eo': 'angla a\u016dtoro de sciencfikcio-romanoj kaj humoristo',
        'en': 'English writer and humorist',
    },
    'aliases': {
        'ru': ['\u0410\u0434\u0430\u043c\u0441, \u0414\u0443\u0433\u043b\u0430\u0441'],
        'fr': ['Douglas Noel Adams', 'Douglas No\xebl Adams'],
        ...
    }
}
['claims', 'labels', 'sitelinks', 'descriptions', 'aliases']
[[wikidata:Q42]]

Il imprime un dictionnaire avec les clés pour

  • l'ensemble des déclarations de la page : Property:P646 est l'identifiant Freebase, Property:P800 est "travail remarquable", etc.
  • l'étiquette de l'élément dans plusieurs langues
  • les liens de site pour l'élément, pas seulement Wikipedia en plusieurs langues, mais aussi Wikiquote dans plusieurs langues
  • la description de l'élément en plusieurs langues
  • les alias de l'élément dans plusieurs langues

Ensuite, une liste de toutes les clés pour les paires clé-valeur du dictionnaire. Finalement, vous pouvez voir que l'élément Wikidata concernant Douglas Adams est Q42.

Alternatives

L'exemple ci-dessus fournit la page de l'élément en utilisant l'article de Wikipédia en anglais. Alternativement, vous pouvez également obtenir la page de l'élément directement :

Exemple 2 : Récupérer les liens interwiki

Après item.get(), par exemple les liens de sites peuvent être accessibles. Ce sont des liens vers tous les Wikipédia ayant l'article.

Ce qui donne :

{'fiwiki': 'Douglas Adams', 'eowiki': 'Douglas Adams', 'dewiki': 'Douglas Adams', ...}

Avec item.iterlinks(), un itérateur de tous ces liens de sites est retourné, où chaque article est présenté non pas sous forme de texte simple comme ci-dessus mais déjà comme un objet Page pour un traitement ultérieur (par exemple, modifier le texte dans les articles de Wikipédia correspondants).

Exemple 4 : Définir une description

Cet exemple définit une description anglaise et une description allemande pour l'élément sur Douglas Adams.

Le réglage des libellés et alias se fait en conséquence.

Exemple 6 : Définir un lien de site

Pour définir un lien vers un site, on peut soit créer un dictionnaire correspondant à l'exemple 4, soit utiliser les objets Page :

Exemple 7 : Définir une déclaration

Les déclarations sont définies en utilisant la classe Claim. Voici une définition pour Douglas Adams place of birth (P19): Cambridge (Q350).

Pour les autres types de données, cela fonctionne pareillement. Ci-dessous on ajoute Claims avec la chaîne (IMDb ID (P345)) et les types de données des coordonnées (coordinate location (P625)) (l'URL est considérée comme une chaîne) :

Exemple 8: Ajouter un qualificatif

Les qualificatifs sont représentés par la classe Claim. Dans ce qui suit, nous ajoutons le qualificatif incertae sedis (P678): family (Q35409) à la classe Claim "claim". Vérifiez que vous avez ajouté l'élément avant d'avoir ajouté le qualificatif.

Exemple 9: Ajouter une source

Les sources peuvent aussi être représentées par la classe Claim. A la différence des qualificatifs, une source peut contenir plus d'une Claim. Dans ce qui suit, nous ajoutons stated in (P248): Integrated Taxonomic Information System (Q82575) avec retrieved (P813) 20 Mars 2014 comme source au Claim "claim". Le claim doit être soit récupéré de Wikidata, soit préalablement ajouté à un itempage.

Exemple 10 : Générateurs de pages

TODO

Exemple 11 : obtenir les valeurs des sous-propriétés

Dans ce qui suit, nous obtenons les valeurs des sous-propriétés de la branche described by source (P1343) -> Great Soviet Encyclopedia (1969–1978) (Q17378135) -> propriétés reference URL (P854) et title (P1476).

D'autres exemples

Certains utilisateurs partagent leurs codes source. Voyez-en plus dans les liens suivants :

  • User:RobotMichiel1972/wikidata lowercase.py - exemple de pywikipedia montrant comment corriger le libellé pour le mettre en minuscules, en utilisant la capitalisation du libellé anglais en tant que 'référence' (ici implémenté codé en dur pour le wiki néerlandais uniquement) fonctionnant sur une sélection de pages sur son propre Wikipedia.
  • File:Bots hackathon 2013.pdf présentant "claimit.py" et "template_harvest.py" inclus dans la version du noyau (ancienne réécrite)

Intégrateur Wikidata

WikidataIntegrator est une bibliothèque pour lire et écrire dans Wikidata/Wikibase. Nous l'avons créée pour remplir Wikidata avec du contenu issu de ressources autorisées sur les gènes, les protéines, les maladies, les drogues et autres. Les détails des différentes tâches se trouvent sur la page Wikidata du robot.

Pywikibot est un framework existant pour interagir avec l'API MediaWiki. La raison pour laquelle nous avons mis au point notre propre solution est que nous avons besoin d’une intégration poussée avec le serveur de requête SPARQL de Wikidata afin d’assurer la cohérence des données (contrôles des doublons, contrôles de cohérence, sélection correcte d’éléments, etc.). Par rapport à Pywikibot, WikidataIntegrator n’est actuellement pas un wrapper Python complet pour l’API MediaWiki, mais vise uniquement à fournir un moyen simple de générer des robots Wikidata basés sur Python.

Pour plus d'information sur la documentation, le téléchargement et les instructions d'installation, veuillez consulter: https://github.com/SuLab/WikidataIntegrator/

Exemple de code

Exemple de d'ordinateur portable illustrant un type de robot pour ajouter des domaines thérapeutiques à des médicaments, y compris l’utilisation du mode exécution rapide (fastrun), la vérification des références et la suppression d’anciennes déclarations :

http://public-paws.wmcloud.org/46883698/example%20ema%20bot.ipynb

WikibaseIntegrator

Dérivé du Wikidata Integrator par User:Myst en 2020 avec de nombreuses améliorations apportées à l'API ce qui rend la création de robots plus facile par l'utilisation de la bibliothèque.

Pour d'autres informations concernant la documentation, le téléchargement ou les instructions d'installation, voir : https://github.com/LeMyst/WikibaseIntegrator

Exemple de script semi-automatique

LexUse est un outil semi-automatique pour chercher et ajouter des exemples d'utilisation aux lexèmes. C'est un logiciel libre écrit en Python 3 en 2020 Wikidata:LexUse.

Wikibase.NET (obsolète)

Wikibase.NET est l'API remplaçant DotNetDataBot qui est maintenant obsolète. Ils ne sont pas compatibles car Wikibase.NET n'a plus besoin du framework de DotNetWikiBot.

Téléchargement & installation

Vous pouvez télécharger le framework depuis GitHub. Suivez juste les instructions de la page.

Problèmes connus

Exemples

Pas à venir...

DotNetDataBot (obsolète)

Installation

Configuration

Après avoir décompressé le paquet vous pouvez voir un fichier appelé DotNetDataBot.dll et un autre appelé DotNetDataBot.xml. Le document .xml ne sert qu'à la documentation. Pour l'utiliser vous devez créer un nouveau référé dans votre projet. Vous pouvez alors écrire using DotNetDataBot; pour importer le framework.

Connexion

Pour vous connecter, vous devez créer un nouvel objet Site avec l'URL du wiki, le nom d'utilisateur de votre robot et son mot de passe.

Exemple 1 : Récupérer l'identifiant d'une page wiki

Vous pouvez accéder à l'ID d'un élément en cherchant le site et le titre de la page connectée.

Exemple 2 : Récupérer les liens interwiki

Vous pouvez obtenir les liens interwiki d'un élément en chargeant son contenu et en accédant au champ links de l'objet.

Exemple 3 : Définir une description

Pour fixer une description, vous devez utiliser la fonction setDescription.

Exemple 4 : Définir un libellé

Cela fonctionne de la même façon pour mettre un libellé. Appelez simplement setLabel.

Exemple 5 : Récupérer les liens interwiki pour 100 pages

Cette fonctionnalité n'est pas supportée. Réitérer simplement la liste.

API Wikibase pour PHP

Ceci est un client API pour Wikibase écrit en PHP. Il est téléchargeable ici.

Exemple 1 : Exemple basique

Voyez les commentaires dans le source pour comprendre comme cela fonctionne.


Exemple 2 : Créer des claims

Voyez les commentaires dans le source pour comprendre comme cela fonctionne.

VBot (pas de mise à jour depuis 2017)

Framework pour Wikidata et Wikipedia. Lit et écrit sur Wikidata et autres projets Wikimedia et possède un générateur de listes utile pour générer des listes de pages Wikipedia et des entités Wikidata. Peut également lire des vidages JSON (dump) de Wikidata.

Vue d’ensemble

Robot servant à lire et à modifier Wikidata et Wikipédia.

  • License: CC0 1.0
  • Langage C#
  • Peut lire et écrire des entités avec tout type de données sur Wikidata
  • Peut lire et écrire des pages sur tous les projets Wiki
  • Peut lire les paramètres d'un modèle sur les pages wiki
  • Peut lire les vidages JSON (dump)
  • Peut créer des listes en utilisant :
  • Testé avec Visual Studio Express 2013 pour les bureaux Windows.
    • Nécessite d'avoir Newtonsoft.Json. Vous pouvez l'installer avec NuGet dans Visual Studio
    • Nécessite d'ajouter manuellement une référence à System.Web pour "HttpUtility.UrlEncode"

Téléchargement

L'environnement de développement peut être téléchargé de GitHub ici.

Instructions

Exemple 1

Modifier le libellé anglais pour tous les éléments avec instance of (P31): short film (Q24862) qui ont director (P57) et qui avaient publication date (P577) en 1908 (utiliser une requête Wikidata).

LexData (Python, pour les données lexicographiques)

LexData est une bibliothèque Python facile à utiliser pour créer et modifier les lexèmes, les sens et les formes.

Astuces

La documentation de LexData comporte encore des manques, donc regardez les implémentations existantes dans MachtSinn ou dans les Wikdata Lexeme Forms pour avoir une idée sur la manière de l'utiliser.

Si vous ne souhaitez ajouter que des déclarations aux lexèmes (sans forms ou senses) WikibaseIntegrator serait peut être un meilleur choix, car il est plus souple et prend en charge beaucoup de types de données.

Installation

Vous pouvez installer LexData avec pip :

$ pip install LexData

Connexion

Pour toutes les opérations, vous devez avoir une WikidataSession. Vous pouvez la créer avec vos données personnelles, avec un mot de passe de robot ou un jeton d'édition (par exemple pour modifier via OAUTH) :


Récupérer un lexème

Vous pouvez ouvrir les lexèmes existants et lire leur contenu.

Chercher et créer des lexèmes

Si vous ne connaissez pas l'identifiant L-Id d'un lexème, vous pouvez le rechercher. S'il n'existe pas, vous pouvez le créer.

Ajouter des informations

Vous pouvez facilement créer des forms ou des senses, avec ou sans claims supplémentaires :

Utiliser directement l'API de Wikidata

Les autres sections décrivent comment utiliser les frameworks des robots pour accéder et mettre à jour les informations de Wikidata. Vous pouvez également interagir directement avec l'API Wikibase mise à disposition par Wikidata. Vous devez faire ceci si vous développer votre propre framework ou si vous avez besoin de faire quelquechose que le framework ne supporte pas. La documentation pour l'API de Wikibase se trouve surmediawiki.org. Vous pouvez également jouer avec dans Special:ApiSandbox, essayez action=wbgetentities.

Wikibase fournit ses API sous forme d'ensemble de modules pour l'API "action" de MediaWiki. Vous y accédez par des requêtes HTTP vers /w/api.php. Le format de la réponse par défaut est JSON. Aussi pour votre choix de langue, vous n'avez besoin que d'une bibliothèque pour générer les requêtes HTTP et d'une bibliothèque JSON ou XML pour analyser les réponses.

Exemple 1 : Récupérer le Q-numéro

Cet exemple récupère le Q-numéro de l'élément pour le Wikipédia anglais concernant la Galaxie Andromède. L'information est fournie par action=wbgetentities du module qui est le cheval de bataille principal de l'API Wikibase. La requête HTTP (qui utilise le format jsonfm pour la sortie JSON en format lisible par un humain) est simplement

https://www.wikidata.org/w/api.php?action=wbgetentities&titles=Andromeda%20Galaxy&sites=enwiki&props=&format=jsonfm&formatversion=2

Essayez le lien suivant. Cela ne demande pas d'informations supplémentaires sur l'entité; supprimez &props= de l'URL pour voir davantage d'informations à ce sujet. Voir l'aide générée pour wbgetentities pour les autres paramètres que vous pouvez spécifier.

Python

Ce qui donne :

Q2469

Exemple 2 : obtenir une liste d'éléments sans inter wiki particulier

...merci de compléter cette section si vous savez comment procéder...

Voir aussi

Liens externes