User:Underlying lk/sandbox
From Wikidata
Common property-item pairs[edit]
- Instance of human
- P31 Q5
- Country of citizenship South Africa
- P27 Q258
- Occupation or profession singer
- P106 Q177220
- Sex or gender male
- P21 Q6581097
- Sex or gender female
- P21 Q6581072
- Country South Africa
- P17 Q258
Code snippets[edit]
# -*- coding: utf-8 -*- """ ¶ms; """ import pywikibot from pywikibot import pagegenerators as pg docuReplacements = {'¶ms;': pywikibot.pagegenerators.parameterHelp} class MonBot: def __init__(self, generator): """ Arguments: * generator - A generator that yields Page objects. """ self.generator = pg.PreloadingGenerator(generator) pywikibot.output('Defining data source') self.repo = pywikibot.Site('wikidata', 'wikidata').data_repository() mediasite = pywikibot.Site("commons", "commons") pywikibot.output('Starting to set claims') # the item to which these claims are added wikisite = pywikibot.Site("en", "wikipedia") #wikiarticle = raw_input("Enter the name of the article: ") #wikipage = pywikibot.Page(wikisite, wikiarticle) #item = pywikibot.ItemPage.fromPage(wikipage) #item = pywikibot.ItemPage(repo, u"Q4115189") #alternative, just specify the item ID def run(self): for page in self.generator: try: self.procesPage(page) except Exception as e: pywikibot.exception(tb=True) def procesPage(self, page): repo = pywikibot.Site('wikidata', 'wikidata').data_repository() mediasite = pywikibot.Site("commons", "commons") wikisite = pywikibot.Site("en", "wikipedia") item = pywikibot.ItemPage.fromPage(page) pywikibot.output('Processing %s' % page) if not item.exists(): pywikibot.output('%s doesn\'t have a wikidata item :(' % page) else: pywikibot.output('%s found' % page) #sets a claim, a so-called item claim claimclaim = pywikibot.Claim(repo, u'P17') theitem = pywikibot.ItemPage(repo, u"Q12356") claimclaim.setTarget(theitem) # Check if the property isn't already set if claimclaim.getID() in item.get().get('claims'): pywikibot.output( u'A claim for %s already exists. Skipping' % claimclaim.getID()) else: item.addClaim(claimclaim) print "Finished adding item claim" #this will add a source to the item claim source = pywikibot.Claim(repo, 'p143') sourceitem = pywikibot.ItemPage(repo, u"Q10000") source.setTarget(sourceitem) if claimclaim.getID() in item.get().get('claims'): pywikibot.output( u'No source will be added') else: claimclaim.addSource(source, bot=True) print "Source added to the item claim" item.removeClaims(claimclaim) print "Removed that claim" #this tidbit here adds a string claim, also works for url datatype stringclaim = pywikibot.Claim(repo, u'P856') #first the property stringclaim.setTarget(u"http://www.stormyseas.co.za") #then what you want to add item.addClaim(stringclaim) #and it goes print "Finished adding string claim" pywikibot.output('Adding %s --> %s' % (stringclaim.getID(), stringclaim.getTarget())) #this one adds a media claim imageclaim = pywikibot.Claim(repo, u'P18') image = pywikibot.ImagePage(mediasite, u"Example.png") imageclaim.setTarget(image) item.addClaim(imageclaim) print "Finished adding image claim" #this is for the coordinates coordinateclaim = pywikibot.Claim(repo, u'P625') coordinate = pywikibot.Coordinate(lat=52.28, lon=30.125, precision=0.001) coordinateclaim.setTarget(coordinate) item.addClaim(coordinateclaim) print "Finished adding coordinate claim" #this one adds a time claim timeclaim = pywikibot.Claim(repo, u'P571') time = pywikibot.WbTime(year=1690) timeclaim.setTarget(time) item.addClaim(timeclaim) print "Finished adding time claim" # this is how you add descriptions mydescriptions = {u'en': u'Wikidata test page', u'de': u'KeiPanik!'} item.editDescriptions(mydescriptions) print "The description has been added" def main(): gen = pg.GeneratorFactory() commandline_arguments = list() for arg in pywikibot.handleArgs(): if gen.handleArg(arg): continue generator = gen.getCombinedGenerator() bot = MonBot(generator) bot.run() if __name__ == "__main__": main()