< Manual:Pywikibot​‎ | Compat
Translate this page
Other languages:
English español français polski čeština 中文 日本語
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.
1Creating a DataPage object
2Getting data
3Changing labels
4Changing descriptions
5Changing sitelinks
6Changing or creating claims/statements
7Getting all entities (of an item)
8Removing claim or claims
9Creating an item
Creating a DataPage object​[​edit​]
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 siterepo = 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​[​edit​]
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​[​edit​]
data​.​setitem​(​summary​=​u​"BOT SUMMARY"​, items​=​{​'type'​: u'item', 'label': 'fa', 'value': 'هلیم'})
Changing descriptions​[​edit​]
page​.​setitem​(​summary​=​u​"BOT SUMMARY"​, items​=​{​'type'​: u​'description'​, 'language'​: 'en', 'value': 'noble gas'})
Changing sitelinks​[​edit​]
data​.​setitem​(​summary​=​u​"BOT SUMMARY"​, items​=​{​'type'​: u​'sitelink'​, 'site': 'de', 'title': 'OK'})
Changing or creating claims/statements​[​edit​]
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
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)​[​edit​]
dictionary = data​.​get​()
Removing claim or claims​[​edit​]
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​[​edit​]
Simple example for creating new items.
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​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"​)
Categories: Pages kept for historical interestPywikibot compat
This page was last edited on 24 August 2019, at 12:01.
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. See Terms of Use for details.
Privacy policy
Code of Conduct
Mobile view
Cookie statement
TalkContributionsCreate accountLog in
ReadEditView history
Visit the main pageMain pageGet MediaWikiGet extensionsTech blogContributeUser helpFAQTechnical manualSupport deskCommunicationBug trackerCode docsCode repositoryStatisticsCommunity portalRecent changesTranslate contentRandom pageVillage pumpSandboxWhat links hereRelated changesUpload fileSpecial pagesPermanent linkPage informationCite this pageCreate a bookDownload as PDFPrintable versionAdd links