User:Underlying lk/sandbox

From Wikidata
Jump to: navigation, search

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  -*-
"""
&params;
"""
 
import pywikibot
from pywikibot import pagegenerators as pg
 
docuReplacements = {'&params;': 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()