Wikidata:Créer un robot
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
Avertissement : Cet environnement pour les robots manque de support concernant les lexèmes depuis juin 2022. Voir les autres bibliothèques ci-dessous pour avoir un support complet. |
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 :
- Installez Python (Python v3.5.2 ou supérieur sont nécessaires)
- Téléchargez pywikibot :
- En tant que fichier zip
- Ou en utilisant le dépôt git : Manual:Pywikibot/Gerrit
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
.
Extended content |
---|
mylang = "wikidata"
family = "wikidata"
usernames["wikidata"]["wikidata"] = 'MyBotName'
|
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
Extended content |
---|
import pywikibot
site = pywikibot.Site("en", "wikipedia")
page = pywikibot.Page(site, 'Douglas Adams')
item = pywikibot.ItemPage.fromPage(page)
dictionary = item.get()
print(dictionary)
print(dictionary.keys())
print(item)
|
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 :
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
|
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.
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
item.get()
print(",".join(item.sitelinks))
|
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.
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
item.get()
mydescriptions = {'en': 'English writer and humorist', 'de': 'Keine Panik!'}
item.editDescriptions(mydescriptions, summary='Setting/updating descriptions.')
|
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 :
Extended content |
---|
import pywikibot
site = pywikibot.Site("en", "wikipedia")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
page = pywikibot.Page(site, 'Douglas Adams')
item.setSitelink(page, summary='Setting (/updating?) sitelink.')
|
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).
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
claim = pywikibot.Claim(repo, 'P19')
target = pywikibot.ItemPage(repo, 'Q350')
claim.setTarget(target)
item.addClaim(claim, summary='Adding claim')
|
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) :
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q42')
stringclaim = pywikibot.Claim(repo, 'P345')
stringclaim.setTarget('nm0010930')
item.addClaim(stringclaim, summary='Adding string claim')
coordinateclaim = pywikibot.Claim(repo, 'P625')
coordinate = pywikibot.Coordinate(lat=52.208, lon=0.1225, precision=0.001, site=site)
coordinateclaim.setTarget(coordinate)
item.addClaim(coordinateclaim, summary='Adding coordinate claim')
|
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.
Extended content |
---|
qualifier = pywikibot.Claim(repo, 'P678')
target = pywikibot.ItemPage(repo, "Q35409")
qualifier.setTarget(target)
claim.addQualifier(qualifier, summary='Adding a qualifier.')
|
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.
Extended content |
---|
statedin = pywikibot.Claim(repo, 'P248')
itis = pywikibot.ItemPage(repo, "Q82575")
statedin.setTarget(itis)
retrieved = pywikibot.Claim(repo, 'P813')
date = pywikibot.WbTime(year=2014, month=3, day=20)
retrieved.setTarget(date)
claim.addSources([statedin, retrieved], summary='Adding sources.')
|
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).
Extended content |
---|
import pywikibot
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q13515')
item.get()
sourcesid = 'P1343'
sourceid = 'Q17378135'
urlid = 'P854'
nameid = 'P1476'
# item.claims['P1343'][1].qualifiers.items(): # This are direct way to get list qualifiers. But '[1]' is hard link to index of list, it will break over time.
if sourcesid in item.claims:
for source in item.claims[sourcesid]:
if source.target.id == sourceid:
s = source.qualifiers
if urlid in s: url = s.get(urlid)[0].target
if nameid in s: name = s.get(nameid)[0].target['text']
print (url, name)
|
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
- Télécharger : DotNetDataBot
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.
Extended content |
---|
C# using DotNetDataBot;
public static void Main()
{
Site wikidata = new Site("http://www.wikidata.org", "User", "Password");
}
|
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.
Extended content |
---|
C# using DotNetDataBot;
public static void Main()
{
Site site = new Site("http://www.wikidata.org", "User", "Password");
Item item = new Item(site);
if (item.itemExists("it", "George Lucas")) // Check if exist on Wikidata
{
Console.Write("Q" + item.GetIdBySitelink("it", "George Lucas"));
}
else
{
Console.Write("Doesn't exist");
}
}
|
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.
Extended content |
---|
C# using DotNetDataBot;
public static void Main()
{
Site site = new Site("http://www.wikidata.org", "User", "Password");
Item item = new Item(site);
item.id = item.GetIdBySitelink("it", "George Lucas");
item.Load();
foreach(KeyValuePair<string, string> link in item.links)
{
Console.Write(link.Key); // lang (eg. en or it)
Console.Write(link.Value); // page (eg. George_Lucas)
}
}
|
Exemple 3 : Définir une description
Pour fixer une description, vous devez utiliser la fonction setDescription
.
Extended content |
---|
C# using DotNetDataBot;
public static void Main()
{
Site site = new Site("http://www.wikidata.org", "User", "Password");
Item item = new Item(site, "Q4115189");
item.Load();
if (item.descriptions.ContainsKey("it")) // if alredy exist description in italian
{
// Nothing to do
}
else
{
item.setDescription("it", "description in italian", "Bot: Add italian description");
}
}
|
Exemple 4 : Définir un libellé
Cela fonctionne de la même façon pour mettre un libellé. Appelez simplement setLabel
.
Extended content |
---|
C# using DotNetDataBot;
public static void Main()
{
Site site = new Site("http://www.wikidata.org", "User", "Password");
Item item = new Item(site, "Q4115189");
item.Load();
if (item.labels.ContainsKey("it")) // if alredy exist label in italian
{
// Nothing to do
}
else
{
item.setLabel("it", "label in italian", "Bot: Add italian label");
}
}
|
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.
Extended content |
---|
<?php
/**
* Basic example for the use of the libary with some small edits
*/
require_once( __DIR__ . "/vendor/autoload.php" );
// Creates some useful objects and logs into the api
$api = new \Mediawiki\Api\MediawikiApi( "http://www.wikidata.org/w/api.php" );
$api->login( new \Mediawiki\Api\ApiUser( 'username', 'password' ) );
$dataValueClasses = array(
'unknown' => 'DataValues\UnknownValue',
'string' => 'DataValues\StringValue',
);
$wikidata = new \Wikibase\Api\WikibaseFactory(
$api,
new DataValues\Deserializers\DataValueDeserializer( $dataValueClasses ),
new DataValues\Serializers\DataValueSerializer()
);
// Gets the current revision for item Q777
$revision = $wikidata->newRevisionGetter()->getFromId( 'Q777' );
$item = $revision->getContent()->getData();
// Outputs the current sitelink for enwiki
var_dump( $item->getSiteLink( 'enwiki' ) );
// Sets the de description to 'Foobar'
$item->getFingerprint()->setDescription( 'de', 'Foobar' );
// Saves the item
$wikidata->newRevisionSaver()->save( $revision );
//Log out
$api->logout();
|
Exemple 2 : Créer des claims
Voyez les commentaires dans le source pour comprendre comme cela fonctionne.
Extended content |
---|
<?php
/**
* Basic example for the use of the library with some small edits.
*/
require_once( __DIR__ . "/vendor/autoload.php" );
// Creates some useful objects and logs into the api
$api = new \Mediawiki\Api\MediawikiApi( "https://www.wikidata.org/w/api.php" );
$api->login( new \Mediawiki\Api\ApiUser( 'username', 'password' ) );
$dataValueClasses = array(
'unknown' => 'DataValues\UnknownValue',
'string' => 'DataValues\StringValue',
);
$services = new \Wikibase\Api\WikibaseFactory(
$api,
new DataValues\Deserializers\DataValueDeserializer( $dataValueClasses ),
new DataValues\Serializers\DataValueSerializer()
);
$revision = $services->newRevisionGetter()->getFromId( 'Q777' );
$item = $revision->getContent()->getData();
$statementList = $item->getStatements();
if( $statementList->getByPropertyId( \Wikibase\DataModel\Entity\PropertyId::newFromNumber( 1320 ) )->isEmpty() ) {
$services->newStatementCreator()->create(
new \Wikibase\DataModel\Snak\PropertyValueSnak(
\Wikibase\DataModel\Entity\PropertyId::newFromNumber( 1320 ),
new \DataValues\StringValue( 'New String Value' )
),
'Q777'
);
}
// Log out
$api->logout();
|
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 :
- Wikidata query
- Catscan 2
- Quick intersection
- Qui pointe ici sur Wikidata
- 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
- Wiki (partiel)
- User talk:ValterVB :)
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).
Extended content |
---|
private void CompleteExample()
{
//Wikidata query
string strWDQ = "CLAIM[31:24862] AND CLAIM[57] AND BETWEEN[577,+00000001908-00-00T00:00:00Z,+00000001908-12-31T00:00:00Z]";
ListGenerator lg = new ListGenerator();
List<string> chunks = lg.WDQ(strWDQ, 50);
//Connection to Wikipedia
WikimediaAPI WP = new WikimediaAPI("https://it.wikipedia.org", User, Password);
Pages PageList = new Pages();
//Connection to Wikidata
WikimediaAPI WD = new WikimediaAPI("https://www.wikidata.org", User, Password);
Entities EntityList = new Entities();
Dictionary<string, string> Labels = new Dictionary<string, string>();
foreach (string list in chunks)
{
// Load all entity of the chunk
string strJson = WD.LoadWD(list);
EntityList = new Entities();
EntityList = JsonConvert.DeserializeObject<Entities>(strJson, new DatavalueConverter());
foreach (KeyValuePair<string, Entity> entity in EntityList.entities)
{
if (entity.Value.sitelinks.ContainsKey("itwiki"))
{
// Load Wikipage
string Pages = WP.LoadWP(entity.Value.sitelinks["itwiki"].title);
PageList = JsonConvert.DeserializeObject<Pages>(Pages, new DatavalueConverter());
//Director from template
string director = Utility.GetTemplateParameter(PageList.query.FirstPageText, "film","Regista").Replace("[","").Replace("]", "");
Labels = new Dictionary<string, string>();
if (director=="")
{
Labels.Add("en", "1908 short movie");
}
else
{
Labels.Add("en", "1908 short movie directed by " + director);
}
// Update Wikidata
WD.EditEntity(entity.Value.id, null, Labels, null, null, null, "BOT: Update en label");
}
}
}
}
|
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) :
Extended content |
---|
repo = LexData.WikidataSession("YourUsername", "YourPassword")
|
Récupérer un lexème
Vous pouvez ouvrir les lexèmes existants et lire leur contenu.
Extended content |
---|
L2 = LexData.Lexeme(repo, "L2")
print(L2.claims)
print(L2.forms)
print(L2.senses)
sense1 = L2.senses[0]
print(sense1.claims)
|
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.
Extended content |
---|
# Find an existing Lexeme by lemma, language and grammatical form
L2 = LexData.search_lexemes(repo, "first", en, "Q1084")
# Create a new Lexeme
L2 = LexData.create_lexeme(repo, "first", en, "Q1084")
# Find or create a Lexeme
L2 = LexData.get_or_create_lexeme(repo, "first", en, "Q1084")
|
Ajouter des informations
Vous pouvez facilement créer des forms ou des senses, avec ou sans claims supplémentaires :
Extended content |
---|
if len(L2.forms) == 0:
L2.createForm("firsts", ["Q146786"])
if len(L2.senses) == 0:
L2.createSense(
{
"en": "Element in an ordered list which comes before all others according to the ordering",
"de": "einer Ordnung folgend das Element vor allen anderen",
},
claims={"P5137": ["Q19269277"]},
)
|
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
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
Extended content |
---|
#!/usr/bin/python3
from requests import get
def get_qnumber(wikiarticle, wikisite):
resp = get('https://www.wikidata.org/w/api.php', {
'action': 'wbgetentities',
'titles': wikiarticle,
'sites': wikisite,
'props': '',
'format': 'json'
}).json()
return list(resp['entities'])[0]
print(get_qnumber(wikiarticle="Andromeda Galaxy", wikisite="enwiki"))
|
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