User:Caliburn/code.py

From Wikidata
Jump to navigation Jump to search
#Note: This bot will only add the first, in the event that there is two. This will require a human to then clean it up.
import pywikibot
import mwparserfromhell
from scripts import pagegenerators
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
enwiki = pywikibot.Site('en', 'wikipedia')
encat = pywikibot.Category(enwiki, 'Category:Commons category without a link on Wikidata')
gen = pagegenerators.CategorizedPageGenerator(encat)
for page in gen:
	item = pywikibot.ItemPage.fromPage(page)
	parsertext = page.text
	wikicode = mwparserfromhell.parse(parsertext)
	strippedtext = wikicode.filter_templates()
	TEXT = None
	for template in strippedtext:
		if template.name.strip() in ("Commons category", "Commons cat", "Commonscat", "commonscat", "Commons Category", "commons category", "Wikimedia commons cat", "wikimedia commons cat", "Category commons", "category commons", "Ccat", "C cat", "ccat", "c cat", "Commonsimages cat", "commonsimages cat"):
			PARAMS_TO_PARSE = template.params
			try:
				TEXT =  template.get(1).value
			except ValueError:
				if TEXT == None:
					target = '%s' % page.title()
				else:
					print("Error parsing, please check %s") % page
	claim = pywikibot.Claim(repo, u'P373')
	target = '%s' % TEXT
	if TEXT == None:
		target = '%s' % page.title()
	#Solving events of duplicates (bot will skip complicated cases to leave them to human interpretation)
	if claim.id in item.claims:
		print("Duplicate claim")
		continue
	claim.setTarget(target)
	item.addClaim(claim, summary=u'Bot: Adding [[Property:P373|commons category]] property based on Wikipedia data. Please [[User_talk:Caliburn|report any errors]].')