Jump to content

Handbuch:Pywikibot/Compat/Wikidata

From mediawiki.org
This page is a translated version of the page Manual:Pywikibot/Compat/Wikidata and the translation is 100% complete.

Erstellen eines DataPage-Objekts

Verschiedene Möglichkeiten zum Erstellen eines DataPage- und Page-Objekts für Wikidata: Die erste Möglichkeit besteht darin, zuerst ein data_repo zu erstellen, verwende diese Methode nur, wenn du die ID des Datenobjekts (Q####) hast

import pywikibot
# create a site object, here for en-wiki
site = pywikibot.getSite('en')

# get the data repository site for the given site
repo = site.data_repository()

# OR you may also get the site by language code/family:
# repo = pywikibot.getSite('wikidata', 'wikidata')

# We also can create a DataPage by its ID in two ways
# First by site and title:
data = pywikibot.DataPage(repo, "Q42")
#OR the second way by the ID number:
data = pywikibot.DataPage(42)

Die zweite Möglichkeit ist:

import pywikibot
# create a site object, here for en-wiki
site = pywikibot.getSite('en')

# create a Page object for en-wiki
page = pywikibot.Page(site, "Helium")

# Now we create the corresponding DataPage:
data = pywikibot.DataPage(page)
# Warning: This page does not have a valid title until you get its content
Du kannst kein Datenobjekt, Wert oder Bezeichnung ändern, ohne vorher die Daten abzurufen.

Daten abrufen

Rufe die Daten auf einfache Weise ab

# get an entity of that page
dictionary = data.get()

# get interwiki links as page objects
language_links = data.interwiki()

Bezeichnungen ändern

data.setitem(summary=u"BOT SUMMARY",
         items={'type': u'item', 'label': 'fa', 'value': 'هلیم'})

Beschreibungen ändern

page.setitem(summary=u"BOT SUMMARY",
         items={'type': u'description', 'language': 'en', 'value': 'noble gas'})

data.setitem(summary=u"BOT SUMMARY",
         items={'type': u'sitelink', 'site': 'de', 'title': 'OK'})

Aussagen ändern oder erstellen

data.editclaim(property, value ,refs={("ref1","value1"),("ref2","value2")})
Die Eigenschaft kann eine Zeichenkette wie "capital" oder "p36" oder "P36" oder "36" oder 36 sein.
Der Wert kann eine Zeichenkette wie "Moscow" oder "Q649" oder "q649" oder "649" oder 649 sein.
Fundstellen sind optional und wenn du keine Fundstellen hinzufügst, ändert der Bot entweder:
Die Fundstelle kann eine Zeichenkette wie "imported from" oder "p143" usw. sein.
Der Wert kann eine Zeichenkette wie "English Wikipedia" oder "q328" usw. sein.
Andere Fundstellen sind ebenfalls optional.
Merke
Wichtig: Die Sprache der Werte muss mit der Sprache der zuerst geladenen Wikipedia-Seite übereinstimmen. Wenn du beispielsweise Russland aus der deutschsprachigen Wikipedia lädst, müssen deine Werte folgende sein:
data.editclaim("Hauptstadt", "Moskau" ,refs={("Datenvorlage","Englischsprachige Wikipedia ")})

Und wenn du deinen Bot mit englischen Werten ausführst, wird der Bot nicht funktionieren.

Falls bereits ein Aussage existiert, ändert der Code die Aussage, andernfalls fügt er die Aussage hinzu.

Alle Entitäten (eines Datenobjekts) abrufen

dictionary = data.get()

Aussagen entfernen

data.removeclaim(property, value)

Du kannst die Eigenschaft wie oben gezeigt hinzufügen, der Wert ist optional und sollte verwendet werden, wenn mehrere Aussagen für eine Eigenschaft vorliegen. Wenn du keinen Wert angibst, werden alle Aussagen, die die Eigenschaft verwenden, entfernt.

Ein Datenobjekt erstellen

data.createitem('summary')

Beispiel

Einfaches Beispiel für die Erstellung neuer Datenobjekte.

Achtung! Achtung: Dieser Codeschnipsel sollte mit Vorsicht verwendet werden. Er prüft nicht, ob ein Datenobjekt im Datenrepositorium bereits existiert, sondern nur, ob es für eine bestimmte Seite der Website vorhanden ist. Dies könnte beispielsweise bedeuten, dass eine bestimmte Seite der Website keinen Sprachlink auf einer bestimmten Seite des Repositoriums hat. Dies sollte vor dem Erstellen einer Seite überprüft werden.
# -*- coding: utf-8  -*-
import wikipedia
site = wikipedia.getSite('fa') # add parameter fam='wikipedia' if you haven't declared family = 'wikipedia' in your user-config.py

list_of_articles=[u"دهستان جونقان", u"قنات_بزل_وار", u"قنات_بسک", u"قنات_بشرآباد"]
for name in list_of_articles:
    # create a Page object of a site
    page = wikipedia.Page(site, name)
    # create the corresponding data repository object
    data = wikipedia.DataPage(page)
    if data.exists():
        wikipedia.output(u"%s already exists. Skipping..." % name)
    else:
        wikipedia.output(u"%s is missing. Creating..." % name)
        data.createitem(u"Bot: Importing article from Persian wikipedia")