Manual:Pywikibot/Compat/Wikidata
Appearance
This page is documentation for Pywikipedia Compat, which is no longer supported. This page is kept for historical interest. It may document scripts and features that are obsolete and/or no longer supported. Do not rely on the information here being up-to-date. |
Creating a DataPage object
Different ways to create a DataPage and Page object for Wikidata: First way is creating a data_repo first, use this way only when you have ID of the item (Q####)
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)
the second way is:
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
You cannot change any item, value, or label without getting data first.
Getting data
Get the data in a simple way
# get an entity of that page
dictionary = data.get()
# get interwiki links as page objects
language_links = data.interwiki()
Changing labels
data.setitem(summary=u"BOT SUMMARY",
items={'type': u'item', 'label': 'fa', 'value': 'هلیم'})
Changing descriptions
page.setitem(summary=u"BOT SUMMARY",
items={'type': u'description', 'language': 'en', 'value': 'noble gas'})
Changing sitelinks
data.setitem(summary=u"BOT SUMMARY",
items={'type': u'sitelink', 'site': 'de', 'title': 'OK'})
Changing or creating claims/statements
data.editclaim(property, value ,refs={("ref1","value1"),("ref2","value2")})
- property can be a string like "capital" or "p36" or "P36" or "36" or 36
- value can be a string like "Moscow" or "Q649" or "q649" or "649" or 649
- refs is optional and if you don't add any references the bot will change either:
- ref1 can be a string like "imported from" or "p143" or etc
- value1 can be a string like "English Wikipedia" or "q328" or etc
- other refs are optional too
- Remember
- Important:language of values must the same as the Wikipedia page you load at first. For example, if you load Russia from Deutsch Wikipedia your values must be:
data.editclaim("Hauptstadt", "Moskau" ,refs={("Datenvorlage","Englischsprachige Wikipedia ")})
and if you run your bot on English values, the bot won't work
If there was a claim already the code changes the claim, and if not the code adds the claim.
Getting all entities (of an item)
dictionary = data.get()
Removing claim or claims
data.removeclaim(property, value)
you can add the property in the way shown above, value is optional and it's better to use when we have multiple claims for a statement if you don't use value, every claim that uses the property will be removed
Creating an item
data.createitem('summary')
Example
Simple example for creating new items.
# -*- 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")