Wikidata:Aanmaken van een bot

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

Deze pagina legt uit hoe u een bot voor Wikidata kunt maken. Daarnaast, overweeg om de code die u gebruikt te delen en om nieuwe voorbeelden en verbeteringen toe te voegen.

Vereisten

Om een bot te creëren heeft u het volgende nodig:

  • Wat codeervaardigheden (Python, Perl, PHP...)
  • Een framework (een van de onderstaande frameworks) en wat code om uit te voeren om een taak te voltooien
  • Een goedgekeurd bot-account
  • Een broncode-editor (Notepad ++, Geany, vim, emacs)

Aanbevelingen

  • Word lid van een Wikidata telegram-kanaal en neem deel aan de discussies (en vraag om hulp als u vastloopt bij het programmeren).

Pywikibot

In de volgende secties leert u hoe u uw bot installeert en configureert in pywikibot. Deze eerste stappen hoeft u slechts een keer te doen. Daarnaast zijn er een aantal standaardvoorbeelden die u dient te kennen over het basisprogrammeren van een bot.

Installatie

Voor meer details over de installatie van pywikibot, zie Installatie en Instellen Shop
Om pywikibot te gebruiken zonder te installeren, zie PAWS.

Zo installeert u pywikibot:

Configuratie

:Voor meer details over de configuratie van pywikibot, zie deze handleiding.

U moet bestand user-config.py configureren met de gebruikersnaam van de bot, het familieproject en de taal. Voor Wikidata zijn zowel familie- als taalparameters hetzelfde,wikidata.

U kunt de vertraging tussen bewerkingen verminderen door het volgende toe te voegen: put_throttle = 1

Inloggen

Nadat u het bestand user-config.py hebt geconfigureerd, logt u als volgt in:

$ python login.py

Het zal u vragen om uw botwachtwoord, het invoegen en op enter drukken. U zou nu ingelogd moeten zijn.

Voorbeeld 1: Gegevens ophalen

In dit voorbeeld worden gegevens opgehaald voor de pagina die verwijst naar Douglas Adams. Sla de volgende broncode op in een bestand en voer deze uit met python example1.py

item.get() maakt verbinding met Wikidata en haalt de gegevens op. De uitvoer is (opnieuw geformatteerd voor de duidelijkheid):

{
    '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]]

Het drukt een woordenboek af met sleutels voor

  • de reeks claims op de pagina: Property:P646 is de Freebase-id, Property:P800 is "opmerkelijk werk", enz.
  • het label van het artikel in vele talen
  • de sitelinks voor het item, niet alleen Wikipedia's in vele talen, maar ook Wikiquote in vele talen
  • de objectbeschrijving in vele talen
* de aliassen voor het item in vele talen Dan een lijst met alle sleutels voor de sleutel-waardenparen in het woordenboek. Ten slotte kunt u zien dat het Wikidata-item over Douglas Adams Q42 is.

Alternatieven

Het bovenstaande voorbeeld krijgt de ItemPage met behulp van het en wikipedia artikel. Als alternatief kunnen we de ItemPage ook rechtstreeks krijgen:

Voorbeeld 2: Interwikilinks verkrijgen

Na item.get() kunnen bijvoorbeeld de sitelinks worden geopend. Dit zijn links naar alle Wikipedia's die het artikel hebben.

De uitvoer is:

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

Met item.iterlinks() wordt een iterator over al deze sitelinks geretourneerd, waarbij elk artikel niet zo platte tekst krijgt als hierboven, maar al als een paginaobject voor verdere verwerking (bijvoorbeeld de tekst in de bijbehorende Wikipedia-artikelen bewerken).

Voorbeeld 4: Een beschrijving plaatsen

In dit voorbeeld wordt een Engelse en een Duitse beschrijving gegeven voor het item over Douglas Adams.

Het instellen van labels en aliassen werkt op een soortgelijke manier.

Voorbeeld 6: een sitekoppeling instellen

Om een sitelink in te stellen, kunnen we een overeenkomstig woordenboek dat overeenkomt met voorbeeld 4 of paginaobjecten gebruiken:

Voorbeeld 7: een verklaring toevoegen

Verklaringen worden ingesteld met de klasse Claim. Hieronder stellen we die in voor Douglas Adams place of birth (P19): Cambridge (Q350).

Voor andere datatypes werkt dit vergelijkbaar. In het volgende voegen we claims toe met string (IMDb ID (P345)) en coördinerende (coordinate location (P625)) datatypes (URL is hetzelfde als string):

Voorbeeld 8: een kwalificatie toevoegen

Kwalificaties worden ook vertegenwoordigd door de Claim-klasse. Hieronder voegen we de kwalificatie incertae sedis (P678): family (Q35409) toe aan de claim "claim". Zorg ervoor dat u het item toevoegt voordat u de kwalificatie toevoegt.

Voorbeeld 9: een bron toevoegen

Ook worden bronnen vertegenwoordigd door de klasse Claim. Anders dan voor kwalificaties kan een bron meer dan één claim bevatten. Hieronder voegen we stated in (P248): Integrated Taxonomic Information System (Q82575) met retrieved (P813) 20 maart 2014 als bron toe aan de claim "claim". De claim moet vooraf worden opgehaald van Wikidata of worden toegevoegd aan een itempagina.

Voorbeeld 10: Paginageneratoren

TODO

Voorbeeld 11: Waarden van subeigenschappen ophalen

In het volgende krijgen we waarden van subeigenschappen van branch described by source (P1343) -> Great Soviet Encyclopedia (1969–1978) (Q17378135) -> eigenschappen reference URL (P854) en title (P1476).

Meer voorbeelden

Sommige gebruikers delen ook hun code. Lees meer hierover in de volgende links.

  • User:RobotMichiel1972/wikidata lowercase.py - pywikipedia voorbeeld hoe u het label kunt corrigeren naar kleine letters met behulp van het Engelse label hoofdlettergebruik als 'referentie' (hier hard gecodeerd geïmplementeerd voor nlwiki alleen) lopend over selectie van pagina's in eigen wikipedia.
  • File:Bots hackathon 2013.pdf met "claimit.py" en "template_harvest.py" in de kernversie (voorheen re-write).

Wikidata-integrator

WikidataIntegrator is een bibliotheek voor het lezen en schrijven naar Wikidata/Wikibase. We hebben het gemaakt om Wikidata te vullen met inhoud van gezaghebbende bronnen over genen, eiwitten, ziekten, medicijnen en anderen. Details over de verschillende taken zijn te vinden op de Wikidata-pagina van de bot.

Pywikibot is een bestaand framework voor interactie met de MediaWiki API. De reden waarom we onze eigen oplossing hebben bedacht, is dat we een hoge integratie met het Wikidata SPARQL-eindpunt nodig hebben om gegevensconsistentie te garanderen (dubbele controles, consistentiecontroles, juiste itemselectie, enz.). In vergelijking met Pywikibot is WikidataIntegrator momenteel geen volledige Python-wrapper voor de MediaWiki API, maar is het uitsluitend gericht op het bieden van een eenvoudig middel om op Python gebaseerde Wikidata-bots te genereren.

'Voor meer informatie, documentatie, download- en installatie-instructies, zie: github.com/SuLab/WikidataIntegrator/

Voorbeeld Notebook

Een voorbeeld met een notitieblok dat een bot demonstreert om therapeutische gebieden toe te voegen aan medicijnitems, waaronder het gebruik van de fastrun-modus, het controleren van referenties en het verwijderen van oude verklaringen:

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

WikibaseIntegrator

Gevorkt van Wikidata Integrator door User:Myst in 2020 en die heeft verschillende verbeteringen aan de API aangebracht die het nog gemakkelijker maken om bots te maken met behulp van de bibliotheek.

Voor meer informatie, documentatie, download- en installatie-instructies, zie: https://github.com/LeMyst/WikibaseIntegrator

Voorbeeld semi-automatisch script

LexUse semi-automatische hulpmiddel voor het vinden en toevoegen van gebruiksvoorbeelden aan lexemen. Het is gratis software geschreven met Python 3 in 2020 Wikidata:LexUse.

Wikibase.NET (ontraden)

Wikibase.NET is een API die het nu verouderde API-client DotNetDataBot vervangt voor de Mediawiki extensie Wikibase.

Downloaden en installeren

U kunt Wikibase.NET downloaden van GitHub. Volg de instructies op die pagina.

Bekende problemen

  • [github.com/Benestar/wikibase.net/issues/3 Quantity type not supported] ([github.com/Ahoerstemeier/wikibase.net/tree/rework fix])
  • [github.com/Benestar/wikibase.net/issues/3 Eentalige tekst niet ondersteund]

Voorbeelden

Volgt, ooit...

DotNetDataBot (verouderd)

Installatie

Configuratie

Na het uitpakken van het pakket ziet u een bestand met de naam DotNetDataBot.dll en een bestand met de naam DotNetDataBot.xml. Het xml-document is alleen voor documentatie. Om het te gebruiken, moet u een nieuwe verwijzing in uw project maken. Vervolgens kunt u schrijven met DotNetDataBot; om het framework te importeren.

Login

Om in te loggen moet u een nieuw object Site maken met de url van de wiki, de gebruikersnaam van uw bot en het wachtwoord.

Voorbeeld 1: Verkrijg een id door wiki page te gebruiken

U kunt toegang krijgen tot de id van een item door te zoeken naar het gebruik van de site en de titel van de verbonden pagina.

Voorbeeld 2: Interwikilinks verkrijgen

U kunt de interwiki-links van een item krijgen door de inhoud te laden en het veld links van het object te openen.

Voorbeeld 3: een beschrijving plaatsen

Als u een beschrijving wilt instellen, moet u de functie setDescription aanroepen.

Voorbeeld 4: label plaatsen

Het werkt op dezelfde manier voor het instellen van een label. Roep gewoon setLabel aan.

Voorbeeld 5: Interwikilinks verkrijgen voor 100 pagina's

Deze functie wordt niet ondersteund. Loop de lijst nogmaals door.

Wikibase-API voor PHP

Dit is een api client voor Wikibase geschreven in PHP. Het kan worden gedownload van

Voorbeeld 1: basisvoorbeeld

Bekijk de broncommentaren om te begrijpen hoe het werkt.


Voorbeeld 2: Claims aanmaken

Bekijk de broncommentaren om te begrijpen hoe het werkt.

VBot (geen updates sinds 2017)

Framework voor Wikidata en Wikipedia. Lees en schrijf op Wikidata en andere Wikimedia-projecten en heb een handige lijstgenerator om een lijst van Wikipedia-pagina en Wikidata-entiteit te genereren. Kan ook JSON dump van Wikidata lezen.

Overzicht

Bot om Wikidata en Wikipedia te lezen en te bewerken.

  • Licentie: CC0 1.0
  • Taal C#
  • Kan lezen en schrijven entiteiten met alle datatype op Wikidata
  • Kan lezen en schrijven pagina's op alle Wiki project
  • Kan parameter lezen van sjabloon op wiki-pagina's
  • Kan lezen JSON dump
  • Kan lijsten maken met behulp van:
  • Getest met Visual Studio Express 2013 voor Windows Desktop.
    • Is noodzakelijk om Newtonsoft.Json te hebben. U kunt het installeren met NuGet in Visual Studio
    • Is noodzakelijk om handmatig een verwijzing naar System.Web toe te voegen voor "HttpUtility.UrlEncode"

Download

Het framework kan worden gedownload van [github.com/ValterVB/VBot GitHub].

Instructies

Voorbeeld 1

Update en label voor alle items met instance of (P31): short film (Q24862) die director (P57) hebben en die publication date (P577) hebben in 1908. (Gebruik van Wikidata query)

LexData (Python; voor Lexicografische gegevens)

[nudin.github.io/LexData/ LexData] is een eenvoudig te gebruiken python-bibliotheek om Lexemen, Betekenissen en Vormen te maken en te bewerken.

Tips

De documentatie van LexData ontbreekt nog een beetje, dus kijk naar bestaande implementaties in 'MachtSinn of Wikdata Lexeme Forms' voor ideeën hoe het te gebruiken.

Als u alleen verklaringen aan Lexemen wilt toevoegen (geen vormen of betekenissen), is WikibaseIntegrator misschien een betere keuze, omdat het veelzijdiger is en veel gegevenstypen ondersteunt.

Installatie

U kunt LexData installeren via pip:

$ pip install LexData

Inloggen

Voor alle bewerkingen heb je een WikidataSession nodig. U kunt het maken met uw inloggegevens, een botwachtwoord of een Edit Token (bijvoorbeeld om te bewerken via OAUTH):


Een lexeem ophalen

U kunt bestaande Lexemen openen en hun inhoud lezen.

Lexemen zoeken en aanmaken

Als u het L-id van een lexeem niet kent, kunt u ernaar zoeken. En als het niet bestaat, kunt u het maken.

Informatie toevoegen

U kunt eenvoudig vormen of betekenissen creëren, met of zonder extra claims:

De Wikidata-API direct gebruiken

In de andere secties wordt beschreven hoe u botframeworks kunt gebruiken om Wikidata-informatie te openen en bij te werken. U kunt ook rechtstreeks communiceren met de Wikibase API die Wikidata biedt. U moet dit doen als u uw eigen framework ontwikkelt of als u iets moet doen dat een framework niet ondersteunt. De documentatie voor de Wikibase API staat op mediawiki.org. U kunt er ook mee spelen in de Zandbak, probeer action=wbgetentities.

Wikibase biedt zijn API aan als een set modules voor MediaWiki's API "action". U krijgt hier toegang toe door HTTP-verzoeken te doen aan /w/api.php. De standaardantwoordindeling is JSON. Dus voor de taal van uw keuze hebt u alleen een bibliotheek nodig om HTTP-verzoeken uit te voeren en een JSON- of XML-bibliotheek om de antwoorden te parseren.

Voorbeeld 1: Q-nummer ophalen

In dit voorbeeld wordt het item Q-nummerin een Engelstalige Wikipedia-artikel over Andromedanevel opgehaald. De belangrijkste "werkpaard" module action=wbgetentities van de Wikibase API biedt deze informatie. Het HTTP-verzoek (met behulp van jsonfm-indeling voor door mensen leesbare JSON-uitvoer) is eenvoudig

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

Probeer de link te volgen. Dit vraagt geen aanvullende informatie over de entiteit; verwijder &props= van de URL om er veel meer informatie over te zien. Zie de genereerde help voor wbgetentities voor de parameters die u kunt opgeven.

Python

De uitvoer is:

Q2469

Voorbeeld 2: Een lijst met items ophalen zonder specifieke interwiki

...draag a.u.b. bij als u weet hoe...

Zie ook

Externe links