Wikidata:Einen Bot erstellen

This page is a translated version of the page Wikidata:Creating a bot and the translation is 98% complete.
Outdated translations are marked like this.

Diese Seite erklärt, wie man für Wikidata Bots erstellt . Überlege, ob du deinen Programmcode teilst, neue Beispiele hinzufügst oder etwas anderes verbesserst.

Voraussetzungen

Um einen Bot zu erstellen, benötigst du:

  • Programmierkenntnisse (Python, Perl, PHP...)
  • Ein Bot-Framework (eines der Frameworks weiter unten) und einen Code, der eine Aufgabe erfüllt.
  • Ein Botkonto (und Erlaubnis)
  • Einen Texteditor (Notepad++, Geany, vi, emacs)

Empfehlung

  • Trete einem Wikidata-Telegram-Kanal bei und beteilige dich an den Diskussionen (und frage nach Hilfe, wenn du Probleme bei der Programmierung hast).

Pywikibot

Im nächsten Abschnitt lernst du, wie du einen Pywikibot installierst, konfigurierst und anmeldest. Die ersten drei Schritte müssen nur einmal gemacht werden. Du findest hier auch ein paar grundlegende Beispiele für die Botprogrammierung.

Installation

Für weiterführende Informationen über die pywikibot-Installation siehe mw:Manual:Pywikibot/Installation und Wikidata:Pywikibot - Python 3 Tutorial/Setting up Shop.
Um pywikibot ohne Installation zu verwenden siehe mw:Manual:Pywikibot/PAWS

Um pywikipediabot zu installieren:

Konfiguration

:Für weitere Informationen zur pywikibot-Konfiguration siehe mw:Manual:Pywikibot/user-config.py.

Es muss die user-config.py-Datei konfiguriert werden mit dem Benutzernamen des Bots sowie das Familienprojekt und die Sprache eingefügt werden. Wikidata betreffend sind Projektfamilie und Sprachparameter das gleiche, wikidata.

Du kannst die Wartezeiten zwischen den Bearbeitungen reduzieren, indem du folgendes änderst: put_throttle = 1

Anmeldung (Login)

Nachdem du die user-config.py-Datei konfiguriert hast, melde dich wie folgt an:

$ python login.py

Du wirst nach deinem Bot-Passwort gefragt. Gib es ein und klick auf Enter. Du solltest jetzt angemeldet sein.

Beispiel 1: Die Daten holen

Dieses Beispiel erhält Daten für die Seite, die sich auf Douglas Adams bezieht. Speichere den folgenden Source-Code in einer Datei und führe sie aus: python example1.py

item.get() greift auf Wikidata zu und holt die Daten. Das Ergebnis ist (anders formatiert zum Überblick):

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

Es zeigt einen Eintrag mit Schlüsseln für

  • die Aussagen auf der Seite: Property:P646 ist die Freebase-Kennung, Property:P800 steht für "bedeutende Werke", etc.
  • die Bezeichnung des Objekts in vielen Sprachen
  • die Interwikilinks für das Objekt, nicht nur für Wikipedias in vielen Sprachen, sondern auch für Wikiquotes in vielen Sprachen
  • die Objektbeschreibung in vielen Sprachen
  • die Alternativnamen des Objekts in vielen Sprachen

Dann eine Liste mit allen Schlüsseln für die Schlüssel-Wert-Paare in dem Wörterbuch. Am Ende kannst du sehen, dass das Objekte für Douglas Adams Q42 ist.

Alternativen

Das Beispiel oben ruft die Objektseite auf, indem es den englischen Wikipediaartikel benutzt. Alternativ kann man auch die Objektseite direkt aufrufen.

Beispiel 2: Interwiki-Links ausgeben

Nach item.get() kann beispielsweise auf die Seitenlinks zugegriffen werden. Das sind die Links auf alle Wikimediaprojekte, die diesen Artikel haben.

Die Ausgabe ist:

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

Mit item.interlinks(), wird eine wiederholter Zugriff auf diese Seitenlinks zurückgegeben, in dem jeder Artikel nicht als einfacher Text ausgegeben wird, sondern bereits als ein Seiteneintrag für weitere Behandlung (z. B. um den Text im zugehörigen Wikiartikel zu bearbeiten).

Beispiel 4: Eine Beschreibung hinzufügen

Dieses Beispiel fügt eine Beschreibung auf Englisch und Deutsch zu dem Objekt über Douglas Adams hinzu.

Bezeichner und Aliasse werden auf dieselbe Weise gesetzt.

Beipiel 6: Einen Interwikilink setzen

Um einen Sprachenlink zu setzen, können wir entweder wie bei Beispiel 4 vorgehen oder Page objects verwenden:

Beispiel 7: Eine Aussage erstellen

Aussagen werden gesetzt mit Hilfe der Claim Klassen. Im folgenden setzen wir für Douglas Adams place of birth (P19): Cambridge (Q350).

Bei den anderen Datentypen funktioniert es ähnlich. Im Folgenden setzen wir Behauptungen (Claims) mit den Datentypen String (IMDb ID (P345)) und Koordinaten (coordinate location (P625)) (URL funktioniert ebenso wie String):

Beispiel 8: Einen Qualifikator hinzufügen

Qualifikatoren gehören auch zu den Claims. Im folgenden fügen wir den Qualifikator incertae sedis (P678) family (Q35409) zur Behauptung "Claim" hinzu.

Beispiel 9: Eine Quelle hinzufügen

Auch Belege gehören zu der Klasse der Claims. Im Gegensatz zu Qualifikatoren kann ein Beleg mehr als eine Behauptung (Claim) haben. Im Folgenden fügen wir stated in (P248) Integrated Taxonomic Information System (Q82575) mit retrieved (P813) 20. März 2014 als Quelle für die Behauptung "Claim" hinzu. Die Behauptung muss entweder aus Wikidata abgerufen werden oder zuvor zu einer Objektseite hinzugefügt werden.

Beispiel 10: Seitengeneratoren

TODO

Beispiel 11: Werte aus Untereigenschaften lesen

Im Folgenden bekommen wir Werte von Untereigenschaften vom Zweig described by source (P1343) -> Great Soviet Encyclopedia (1969–1978) (Q17378135) -> Eigenschaften reference URL (P854) und title (P1476).

weitere Beispiele

Einige Benutzer teilen ihren Programmcode, dazu folgende Links:

  • User:RobotMichiel1972/wikidata lowercase.py - Pywikipedia-Beispiel dazu, wie man die Bezeichnung in Kleinschreibung korrigieren kann, indem die Groß- und Kleinschreibung der englischen Bezeichung als 'Referenz' benutzt wird (hier hartkodiert und nur für nlwiki eingerichtet). Der Bot läuft über eine Auswahl von Seiten in der eigenen Wikipedia. (Dieses Tool ist für deutsche Bezeichnungen nicht sinnvoll, da dewiki deutlich andere Regeln zur Groß- und Kleinschreibung hat als enwiki)
  • File:Bots hackathon 2013.pdf zeigt die in der Kernversion enthatenen Dateien "[mw:Special:MyLanguage/Manual:Pywikibot/claimit.py claimit.py]" und "template_harvest.py".

Wikidata Integrator

WikidataIntegrator ist eine Bibliothek zum Lesen und Schreiben in Wikidata/Wikibase. Wir haben sie geschaffen um Wikidata mit Inhalt von Datenbanken zu Genen, Proteinen, Krankheiten, Medikamenten und anderen zu füllen. Details zu den unterschiedlichen Aufgaben sind auf der Wikidata-Seite des Bots zu finden.

Pywikibot ist ein bestehendes Framework zur Interaktion mit der MediaWiki-API. Der Grund warum wir mit einer eigenen Lösung aufwarteten, ist, dass wir eine gute Integration des Wikidata-SPARQL-Endpoints benötigen um die Konsistenz der Daten sicherzustellen (Duplikatprüfung, Konsistenzprüfung, Auswahl des korrekten Datenobjekts, etc.). Verglichen mit Pywikibot ist WikidataIntegrator derzeit kein vollständiger Python-Wrapper für die MediaWiki-API, sondern ausschließlich darauf gerichtet, eine einfache Möglichkeit zu bieten, Python-basierte Wikidata-Bots zu erstellen.

Für weitere Informationen, Dokumentation, Download und Installationsanweisungen, siehe hier: https://github.com/SuLab/WikidataIntegrator/

Beispiel-Notizbuch

Ein Beispiel Notebook, das einen Beispiel-Bot zum Hinzufügen von therapeutischen Anwendungsbereichen zu Drogenartikeln zeigt, einschließlich der Verwendung des Fastrun-Modus, der Überprüfung von Referenzen und der Entfernung alter Aussagen:

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

WikibaseIntegrator

Fork des Wikidata Integrator von User:Myst aus 2020, hat mehrere Verbesserungen an der API erfahren, die es einfacher machen, Bots mithilfe der Bibliothek zu erstellen.

Für weitere Informationen, Dokumentation und Anleitung zum Download und zur Installation siehe hier: https://github.com/LeMyst/WikibaseIntegrator

Halbautomatisches Beispielskript

LexUse ist ein halbautomatisches Werkzeug, um Nutzungsbeispiele für Lexeme zu finden und zu ergänzen. Es handelt sich um freie Software, die 2020 mit Python 3 erstellt wurde.

Wikibase.NET (Veraltet)

Wikibase.NET ist die Api, die den nun veralteten DotNetDataBot versetzt. Api-Client für die MediaWiki-Erweiterung Wikibase. Sie sind nicht kompatibel, denn Wikibase.NET benötigt nicht länger DotNetWikiBot Framework.

Herunterladen und Installation

Wikibase.NET kann hier von GitHub heruntergeladen werden. Folge einfach den Anweisungen auf dieser Seite.

Bekannte Fehler

Beispiele

Kommt nicht demnächst ...

DotNetDataBot (Veraltet)

Installation

Konfiguration

Nch dem Entpacken siehst du die Dateien DotNetDataBot.dll und DotNetDataBot.xml. Das xml Dokument ist nur für die Dokumentation. Um es zu nutzen musst du ein neues Refer in deinem Projket erstellen. Dann kannst du schreiben using DotNetDataBot; um das Framework zu importieren.

Anmeldung (Login)

Um dich anzumelden, musst du ein neues Site-Objekt mit der URL des Wikis, dem Benutzernamen deines Bots und seinem Passwort erstellen.

Beispiel 1: ID über Wikiseite ermitteln

Du kannst auf die ID eines Objekts zugreifen durch Suche, indem du die Seite und den Titel der verbundenen Seite benutzt.

Beispiel 2: Interwiki-Links ausgeben

Du kannst die Interwikilinks eines Objekte bekommen indem du den Inhalt lädst und auf links des Objekts zugreifst.

Beispiel 3: Eine Beschreibung erstellen

Um eine Beschreibung zu setzen musst du die setDescription Function aufrufen.

Beispiel 4: Eine Bezeichnung erstellen

Arbeitet gleich wie eine Bezeichnung setzen, nur dass setLabel aufgerufen wird.

Beispiel 5: Interwiki-Links von 100 Seiten ermitteln

Diese Funktion wird nicht unterstützt. Du musst nur die Liste abarbeiten.

Wikibase API für PHP

Dieses ist ein API Client für Wikibase geschrieben in PHP. Herunterladen von hier.

Beispiel 1: Einfaches Beispiel

Schaue auf die Kommentare zum Quelltext um zu verstehen wie es funktioniert.


Beispiel 2:Behauptungen bearbeiten

Schaue auf die Kommentare zum Quelltext um zu verstehen wie es funktioniert.

VBot (keine Updates seit 2017)

Framework für Wikidata und Wikipedia. Liest und schreibt auf Wikidata und anderen Wikimedia-Projekten und bietet einen nützlichen Listen-Generator, der Listen von Wikipedia-Seiten und Wikidata-Entities erzeugt. Kann auch Wikidata-JSON-Dumps lesen.

Überblick

Bot zum Lesen und Bearbeiten von Wikidata und Wikipedia.

  • Lizenz: CC0 1.0
  • Sprache C#
  • Kann in Wikidata Datensätze mit allen Datentypen lesen und bearbeiten
  • Kann in allen Wiki-Projekten Seiten lesen und bearbeiten
  • Kann Parameter aus Vorlagen in Wikiseiten lesen
  • Kann JSON-Dumps lesen
  • Kann Listen erstellen mit:
  • Getestet mit Visual Studio Express 2013 für Windows Desktop.
    • Newtonsoft.Json ist erforderlich. Du kannst es mit NuGet in Visual Studio installieren
    • Es ist erforderlich, manuell eine Referenz zu System.Web für "HttpUtility.UrlEncode" hinzuzufügen

Download

Das Framework kann hier von GitHub heruntergeladen werden.

Anleitung

Beispiel 1

Bearbeite en-Bezeichner für alle Items mit instance of (P31): short film (Q24862) die director (P57) gesetzt haben und deren publication date (P577) 1908 ist. (Verwendet Wikidata Query.)

LexData (Python; für Lexikographische Daten)

LexData ist eine einfach zu nutzende Python-Bibliothek, um Lexeme, Senses und Formen zu erstellen und zu bearbeiten.

Tipps

Die Dokumentation von LexData ist noch lückenhaft. Sieh dir daher bereits vorhandene Implementationen in MachtSinn oder Wikidata Lexeme Forms an, um zu verstehen, wie du es nutzen kannst.

Wenn du nur Aussagen zu Lexemen hinzufügen möchtest (keine Formen oder Senses), ist WikibaseIntegrator möglicherweise eine bessere Wahl, da er vielseitiger ist und mehr Datentypen unterstützt.

Installation

Du kannst LexData via pip installieren:

$ pip install LexData

Login

Du benötigst für alle Aktionen eine WikidataSession. Du kannst sie mit deinen Anmeldeinformationen, einem Bot-Passwort oder einem Bearbeitungs-Token (zum Beispiel, um via OAUTH zu bearbeiten) erstellen:


Ein Lexem abrufen

Du kannst existierende Lexeme abrufen und ihren Inhalt lesen.

Nach Lexemen suchen und Lexeme erstellen

Wenn du die L-Id eines Lexems nicht kennst, kannst du nach ihr suchen. Und wenn es nicht existiert, kannst du es erstellen.

Informationen hinzufügen

Du kannst einfach Formen oder Seses erstellen, mit oder ohne zusätzliche Behauptungen:

Die Wikidata-API direkt verwenden

Die anderen Abschnitte beschreiben, wie man Bot-Frameworks nutzt, um Informationen aus Wikidata abzurufen und zu aktualisieren. Du kannst auch direkt die von Wikidata bereitgestellte Wikibase-API nutzen. Dies ist erforderlich, wenn du dein eigenes Framework entwickelst oder du etwas tuen musst, das von anderen Frameworks nicht nicht unterstützt wird. Die Dokumentation für Wikibase API befindet sich auf mediawiki.org. Du kannst es außerdem mit wbgetentities auf Special:ApiSandbox ausprobieren.

Wikibase stellt seine API als Modulsatz für die MediaWiki "action" API zur Verfügung. Auf diese kannst du über HTTP-Anfragen auf /w/api.php zugreifen. Das Standardantwortformat ist JSON. Für die Sprache deiner Wahl benötigst du also nur eine Bibliothek zum Senden von HTTP-Anfragen und eine JSON- oder XML-Bibliothek, um die Antworten zu analysieren.

Beispiel 1: Objektnummer ermitteln

Dieses Beispiel gibt das Objekt (Q-Nummer) für den englischsprachigen Wikipedia-Artikel über die Andromedagalaxie aus. Das Haupt-Arbeitsmodul der Wikibase-API, action=wbgetentities, enthält diese Information. Die HTTP-Anfrage (die das jsonfm-Format für eine menschenlesbare JSON-Ausgabe nutzt) ist einfach

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

Probiere den Link aus. Diese Anfrage fordert keine weiteren Informationen über den Datensatz an; entferne &props= aus der URL, um wesentlich mehr Informationen zu erhalten. Siehe die generierte Hilfeseite für wbgetentities für weitere Parameter, die du angeben kannst.

Python

Die Ausgabe ist:

Q2469

Beispiel 2: Liste von Objekten ohne Interwikilinks abrufen

...bitte trage etwas bei, wenn du dich auskennst...

Siehe auch

Weblinks