User:Edoderoobot/SV-berg

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