Manual:Pywikibot/Compat/Wikidata
From Linux Web Expert
<translate> This page is kept for historical interest.</translate> | <translate> This page is documentation for Pywikipedia Compat, which is no longer supported.</translate> <translate> This page is kept for historical interest.</translate> <translate> It may document scripts and features that are obsolete and/or no longer supported.</translate> <translate> Do not rely on the information here being up-to-date.</translate> |
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.
File:OOjs UI icon alert-destructive.svg <translate> Caution:</translate> | Use this code snippet with care. It does not test whether a data repository item already exists. It only test whether it exists for a given site page. This could also mean that a given site page has no language link on a given repository page. This should be checked before a page is created. |
# -*- 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")