User:Ifeanyi liam/Outreachy 4

From Wikidata
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Code for task 4

import pywikibot as pw
from datetime import date

class wd_update:

    site = pw.Site('en', 'wikipedia')
    wk_data = pw.Site('wikidata', 'wikidata')
    repo = wk_data.data_repository()

    def __init__(self, pg_name, wk_db):
        
        self.page = pw.Page(self.site, pg_name)
        self.wk_db = wk_db
        self.wk_item = pw.ItemPage(self.repo, self.wk_db)
        self.clm_obj = self.wk_item.get().get('claims')


    def add_qid(self, prop, qid):
        if prop not in self.clm_obj:
            new_claim = pw.Claim(self.repo, prop)
            target = pw.ItemPage(self.repo, qid)

            new_claim.setTarget(target)
            self.wk_item.addClaim(new_claim, summary=f'adding claim {prop} to item')
            print('Done')
        else:
            print(f"{prop} already exist")

    def add_image(self, img_prop):
        prop = self.page.properties().get('page_image_free')

        # check if the property is in the claim item
        if img_prop not in self.clm_obj:
            if not prop:
                raise FileNotFoundError('Image File does not exist')

             # create a link for the image property
            commonssite = pw.Site('commons', 'commons')
            imagelink = pw.Link(prop, source=commonssite, default_namespace=6)
            image = pw.FilePage(imagelink)

            # to get the image link as a redirected webpage
            if image.isRedirectPage():
                image = pw.FilePage(image.getRedirectTarget())

            # save the image item to the wikidata item
            new_claim = pw.Claim(self.repo, img_prop)
            new_claim.setTarget(image)

            self.wk_item.addClaim(new_claim, summary='add new image')
            print('Done')
        else:
            print(f"{img_prop} already exist")

    def  add_num(self):
        pass

    def add_date(self, birthday, prop):

        if birthday is not None:
            my_bd = date.fromisoformat(birthday)
            if prop not in self.clm_obj:
                dateclaim = pw.Claim(self.repo, prop)
                birthd = pw.WbTime(year=my_bd.year, month=my_bd.month, day=my_bd.day)
                dateclaim.setTarget(birthd)
                self.wk_item.addClaim(dateclaim, summary='Adding dateOfBirth')



def main():

    duh = wd_update('Igbo-Ukwu', 'Q4115189')


    dateOfBirth = '1993-05-03'

    duh.add_date(dateOfBirth, 'P569')

    duh.add_image('P18')

    duh.add_qid('P17', 'Q1033')

if __name__=="__main__":
    main()