Programmeren in Python/Pywikibot: verschil tussen versies

Uit Wikibooks
Verwijderde inhoud Toegevoegde inhoud
Vangelis (overleg | bijdragen)
sub
Edoderoo (overleg | bijdragen)
+ ==Alle links op een pagina==
Regel 100: Regel 100:
</source>
</source>


==Alle links op een pagina==
<source lang="python">
#import pywikibot
site=pywikibot.Site('nl')
page=pywikibot.Page(site,'Schaar')
for onelink in page.linkedPages():
print(onelink)
</source>
<!-- ----- Hieronder onderhoudsmeldingen, niet verwijderen ----- -->
<!-- ----- Hieronder onderhoudsmeldingen, niet verwijderen ----- -->
{{sub}}
{{sub}}

Versie van 23 apr 2016 13:04

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)
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.