Manual:Pywikibot/Compat/Wikidata/ja

From Linux Web Expert

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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.

データの取得

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()

ラベルの変更

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

説明の変更

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'})

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

項目の作成

data.createitem('summary')

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")