Programmeren in Python/Pywikibot: verschil tussen versies
Verwijderde inhoud Toegevoegde inhoud
Geen bewerkingssamenvatting |
korte uitleg van de opbouw van een wikidata-item |
||
Regel 139: | Regel 139: | ||
if mypage.namespace().id in allowed_namespaces: |
if mypage.namespace().id in allowed_namespaces: |
||
print(mypage.title()) |
print(mypage.title()) |
||
</source> |
|||
==Wikidata-items bekijken== |
|||
<source lang="python"> |
|||
#import pywikibot |
|||
site=pywikibot.Site('nl') |
|||
repo=site.data_repository() |
|||
wikidataitem=pywikibot.ItemPage(repo,'Q2013') |
|||
for label in wd.labels: |
|||
print('%s : %s' % (label, wikidataitem.labels[label])) #print taalcode + label in die taal |
|||
for lng in wikidataitem.descriptions: |
|||
print('%s : %s' % (lng,wikidataitem.descriptions[lng])) #print taalcode + omschrijving in die taal |
|||
for claim in wikidataitem.claims: #print all claims plus their value (target) |
|||
print('%s: %s' % (claim, wikidataitem.claims.get(claim)[0].getTarget() )) |
|||
for al in wikidataitem.aliases: #alle alternatieve namen van dit item |
|||
print('%s : %s' % (al, wikidataitem.aliases[al])) |
|||
for sl in wikidataitem.sitelinks: #alle talen en de link naar het artikel in die taal |
|||
print('%s : %s' % (sl, wikidataitem.sitelinks[sl])) |
|||
</source> |
</source> |
||
Versie van 20 jun 2016 14:39
Pywikibot is een class library in Python om Wikimedia-projecten te kunnen lezen en schrijven. Uiteraard kunnen Wikipedia-pagina's worden bewerkt, maar ook afbeeldingen op Commons of Wikidata kunnen worden bewerkt.
Een script eindigt doorgaans op de extentie .py en wordt gestart door het als parameter naar python te sturen:
- pyton3 myscript.py
Maar om de zaken zoals inloggen op Wikimedia te regelen, wordt een script voor pywikibot via pwb.py gestart:
- python3 ~/pywikibot/core/pwb.py myscript.py
Wanneer je python3 hebt opgestart zonder parameters, zodat je in de command line zelf commando's wilt intypen, dan geef je het best eerst deze twee commando's:
- import pwb
- import pywikibot
en daarna bijvoorbeeld:
- site = pywikibot.Site('nl')
- repo = site.data_repository()
Wikidata redirect
x = pywikibot.ItemPage(repo, 'Q18362289') #this one is a redirect
while x.isRedirectPage(): #controleer of dit een redirect is
x = pywikibot.ItemPage(repo,x.getRedirectTarget().title()) #lees de redirected page
print("Ik heb 'm [%s]" % (x.title()))
Alle pagina's uit een categorie
import pywikibot
from pywikibot import pagegenerators
print("Begonnen")
site = pywikibot.Site() #default site of user
cat = pywikibot.Category(site,'Categorie:Woerden')
gen = pagegenerators.CategorizedPageGenerator(cat,True) #generator geeft alle pagina's uit de categorie, tweede parameter zegt: ook sub-cats meenemen
#gen = pagegenerators.CategorizedPageGenerator(cat,1) #generator geeft alle pagina's uit de categorie, tweede parameter zegt: 1 sub-cat diep doorlopen
for page in gen:
print(page.title())
print("Klaar")
Alle pagina's uit een categorie, met andere taalversies
import pywikibot
from pywikibot import pagegenerators
def show_cat_all_pages(lng,catname, leveldeep): #print all page-titles from *category* in language *lng*
site = pywikibot.Site(lng)
cat = pywikibot.Category(site,catname)
catgen = pagegenerators.CategorizedPageGenerator(cat,leveldeep)
for pagefound in catgen:
yield pagefound
def gen_cat_all_pages(lng,catname,leveldeep):
site = pywikibot.Site(lng)
cat = pywikibot.Category(site,catname)
gen = pagegenerators.CategorizedPageGenerator(cat,leveldeep)
for page in show_cat_all_pages(lng,cat.title(),leveldeep):
#print("[%s]-[%s]" % ( 'nl',page.title()))
yield page
#print("Now go international!")
for interlinks in cat.iterlanglinks():
#print("Site: [%s]" % (interlinks.site.lang))
#print("Title: [%s]" % (interlinks.title))
for page in show_cat_all_pages(interlinks.site.lang,interlinks.title,leveldeep):
#print("[%s]-[%s]" % ( interlinks.site.lang,page.title()))
yield page
print("Begonnen")
for page in gen_cat_all_pages('nl','Woerden',1):
print("[%s]-[%s]" % (page.site.lang, page.title()))
print("Klaar")
Gebruiker emailen
import pywikibot
site = pywikibot.Site('nl')
wikiuser = pywikibot.User(site,'Testuser')
print("\n\n\n")
print(wikiuser)
print("\n\n\n")
wikiuser.sendMail(subject='bot-mail-subject',text='Hoi, het is gelukt! Ik kan naar een wiki-username een mail sturen, en het subject en de body van de email kan ik zelf bepalen!')
Wikidata property
site=pywikibot.site()
repo=site.data_repository()
pp=pywikibot.PropertyPage('P31')
pp.get()
for x in (dir(pp)):
print(x)
Alle links op een pagina
#import pywikibot
site=pywikibot.Site('nl')
page=pywikibot.Page(site,'Schaar')
for onelink in page.linkedPages():
print(onelink)
Alle links naar deze pagina
#import pywikibot
site=pywikibot.Site('nl')
page=pywikibot.Page(site,'Schaar')
for onelink in page.backlinks():
print(onelink.title())
Alle pagina's met een bepaald sjabloon erop
import pywikibot
from pywikibot import pagegenerators
language = 'en'
template = 'template:FIS'
allowed_namespaces = [0]
def genPagesWithTemplate(sitecode,template):
site=pywikibot.Site(sitecode)
refPage = pywikibot.Page(pywikibot.Link(template,site))
gen = pagegenerators.ReferringPageGenerator(refPage)
for onepage in gen:
yield(onepage)
for mypage in genPagesWithTemplate(language,template):
if mypage.namespace().id in allowed_namespaces:
print(mypage.title())
Wikidata-items bekijken
#import pywikibot
site=pywikibot.Site('nl')
repo=site.data_repository()
wikidataitem=pywikibot.ItemPage(repo,'Q2013')
for label in wd.labels:
print('%s : %s' % (label, wikidataitem.labels[label])) #print taalcode + label in die taal
for lng in wikidataitem.descriptions:
print('%s : %s' % (lng,wikidataitem.descriptions[lng])) #print taalcode + omschrijving in die taal
for claim in wikidataitem.claims: #print all claims plus their value (target)
print('%s: %s' % (claim, wikidataitem.claims.get(claim)[0].getTarget() ))
for al in wikidataitem.aliases: #alle alternatieve namen van dit item
print('%s : %s' % (al, wikidataitem.aliases[al]))
for sl in wikidataitem.sitelinks: #alle talen en de link naar het artikel in die taal
print('%s : %s' % (sl, wikidataitem.sitelinks[sl]))