User:Edoderoobot/SV-berg
Jump to navigation
Jump to search
import pywikibot
from pywikibot import pagegenerators
from pywikibot import pagegenerators as pg, textlib, WikidataBot
import pywikibot.data.wikidataquery as wdquery
import codecs #used in logfiles, unicoded strings
from datetime import datetime, date, time
import sys
debugedo=True
debugedo=False
Q_mountain = u'Q8502'
P_is_a = u'P31'
P_height = u'P2044'
P_country = u'P17'
P_geo = u'P625'
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
def collect_wikidata_from_interwiki_cat(lng, catname, leveldeep):
for page in gen_cat_all_pages(lng,catname,leveldeep):
pass
def get_claim_str(wditem,whichclaim):
if (whichclaim in wditem.claims):
myclaim = wditem.claims.get(whichclaim)[0].getTarget().title()
else:
myclaim = None
return myclaim
def get_claim_value(wditem,whichclaim):
if (whichclaim in wditem.claims):
myclaim = wditem.claims.get(whichclaim)[0].getTarget().amount
else :
myclaim = None
return myclaim
def swoop_whole_cat(lng,catname,depth) :
rotateindex = 0
site = pywikibot.Site(lng)
repo = site.data_repository()
for page in gen_cat_all_pages(lng,catname,depth):
wditem = pywikibot.ItemPage(repo,page.data_item().title())
item_dict = wditem.get()
page.get()
template_elevation = 0
template_highest_elevation = 0
template_country = ''
template_other_name = ''
template_lat_d = 0.00
template_long_d = 0.00
template_native_name = ''
#print("%s gevonden, %s" % (page.title(), wditem.title()))
if (get_claim_str(wditem,P_is_a)==Q_mountain):
pass #get from geobox | 1 = Mountain
# elevation -> P2044
# highest_elevation ->
# country -> P17
# other_name
# lat_d, long_d -> P625
# native_name
pagetext = page.get()
templates = textlib.extract_templates_and_params(pagetext)
rotateindex += 1 #print a rotating character, to show that we are alive (and about how fast)
x = rotateindex % len(rotatelike)
sys.stdout.write("\r%s" % (rotatelike[x:x+1]))
for (template, fielddict) in templates:
if template=='geobox' :
i = 0
for field, value in fielddict.items():
i+=1
field = field.strip()
value = value.strip()
if field=='elevation' : template_elevation = value #used
elif field=='highest_elevation': template_highest_elevation = value
elif field=='country' : template_country = value
elif field=='other_name' : template_other_name = value
elif field=='lat_d' : template_lat_d = value
elif field=='long_d' : template_long_d = value
elif field=='native_name' : template_native_name = value
if not(P_height in wditem.claims):
add_height(int(template_elevation), repo, wditem, u'P143', u'Q169514')
#if not(P_country in wditem.claims):
# add_country(repo,wditem,template_country, u'P143', u'Q169514')
#if not(P_get in wditem.claims):
# add_geo(template_lat_d,template_long_d)
def add_height(height, repo, wditem, src, srclink):
claim = pywikibot.Claim(repo,P_height)
add_elevation = pywikibot.WbQuantity(int(height))
add_elevation.amount= int(height)
add_elevation.lowerBound=int(height)
add_elevation.upperBound=int(height)
add_elevation.unit = 'http://www.wikidata.org/entity/Q11573' #meter
wd_elevation = None
claim.setTarget( add_elevation )
wditem.addClaim(claim)
add_source(repo,claim,src,srclink)
def add_source(repo,claim,src,srclink):
statedin = pywikibot.Claim(repo, src) #imported from
itis = pywikibot.ItemPage(repo, srclink)
statedin.setTarget(itis)
retrieved = pywikibot.Claim(repo, u'P813') #retrieved date
date = pywikibot.WbTime(year=datetime.now().year, month=datetime.now().month, day=datetime.now().day)
retrieved.setTarget(date)
claim.addSources([statedin, retrieved])
def add_country(repo, item, countrycode, src, srclink):
claim = pywikibot.Claim(repo,P_country)
target = pywikibot.ItemPage(repo,countrycode) #should be like Q31/Q55/etc
claim.setTarget(target)
item.addClaim(claim)
add_source(repo,src,srclink)
def add_geo(lat_d, long_d):
claim = pywikibot.Claim(repo,'');
pass
def testrun():
site=pywikibot.Site('sv')
repo=site.data_repository();
item = pywikibot.ItemPage(repo, 'Q1650016') #Stormberg, mountain in Namibia
item.get(get_redirect=True)
item_dict = item.get()
"""
page.get()
pagetext = page.get()
templates = textlib.extract_templates_and_params(pagetext)
for x in templates:
print(x)
"""
#main
print("Begonnen")
rotatelike = "―\|/"
rotateindex = 0
if False:
testrun()
else :
swoop_whole_cat('sv',u'category:Berg efter land',12)
print("Klaar")