User:Checkallthestrings bot/Task 2

From Wikidata
Jump to navigation Jump to search
import sys
import pywikibot
from pywikibot import pagegenerators as pg

def list_template_usage(site_obj, tmpl_name):
    name = "{}:{}".format(site.namespace(10), tmpl_name)
    tmpl_page = pywikibot.Page(site, name)
    ref_gen = pg.ReferringPageGenerator(tmpl_page, onlyTemplateInclusion=True)
    filter_gen = pg.NamespaceFilterPageGenerator(ref_gen, namespaces=[0])
    generator = site.preloadpages(filter_gen, pageprops=True)
    return generator

def check_for_statement(item, country):
    item_dict = item.get()
    claims = item_dict["claims"]
    try:
        country_claim = claims["P17"][0]
        print(country_claim.target.id)
        if country_claim.target.id == country:
            return True
        else:
            return False
    except:
        print("P17 statement missing!")
        return False

def add_country_claim(item, country, repo):
    claim = pywikibot.Claim(repo, "P17")
    target_item = pywikibot.ItemPage(repo, country)
    claim.setTarget(target_item)
    item.addClaim(claim, summary="Importing P17 from ar-wiki", bot=True)
                  #putthrottle=0)

    source_target = pywikibot.ItemPage(repo, "Q199700")
    source_claim = pywikibot.Claim(repo, "P143", isReference=True)
    source_claim.setTarget(source_target)
    claim.addSources([source_claim], bot=True)


template_name = "قرية مصرية"
country = "Q79"
site = pywikibot.Site("ar", "wikipedia")
tmpl_gen = list_template_usage(site, template_name)

data_site = pywikibot.Site("wikidata", "wikidata")
repo = data_site.data_repository()
count = 0

for page in tmpl_gen:
    count += 1
    print("------({})------".format(count))
    try:
        item = pywikibot.ItemPage.fromPage(page)
    except:
        print("Not connected to Wikidata")
        continue
    try:
        print(item.get()["labels"]["ar"])
    except:
        pass
    country_set = check_for_statement(item, country)
    print("Egypt set:", country_set)
    if country_set == False:
        add_country_claim(item, country, repo)