User:Edoderoobot/dp-omschrijving

From Wikidata
Jump to navigation Jump to search
# -*- coding: utf-8 -*-

import datetime
from datetime import datetime, date, time
import time
import logging

import pywikibot
from pywikibot import pagegenerators
#from pywikibot import api
import pywikibot.data.wikidataquery as wdquery

source_language = 'nl'
CheckTheseLabels = ['nl']            #these labels will be filled
ChangeTheseDescriptions=['','dp','DP','doorverwijzing','doorverwijspagina-','doorverwijspagina!','doorverwijspagina']
AAitem = 'Q410356'
standaard_omschrijving = 'Wikimedia-doorverwijspagina'

def waitsometime(howmanyseconds):
 endtime = time.time() + howmanyseconds
 while time.time()< endtime :
   i = 0

def logme(verbose, formatstring, *parameters):
  with open("DP-omschrijving.log.csv", "a") as logfile:
    formattedstring = formatstring + '\n'
    logfile.write(formattedstring % (parameters))
    #print(formatstring %  (parameters))
  logfile.close()
  if verbose:
    print(formatstring, *parameters) 

class DisambiguationBot:
    """
    A bot to add streets on Wikidata
    """
    def __init__(self, generator):
        """
        Arguments:
            * generator    - A generator that yields itempage objects.
        """
        self.generator = generator
        self.repo = pywikibot.Site().data_repository()

    def run(self):
        """
        Starts the robot.
        """
        itemcount = 0
        changed = 0
        site = pywikibot.getSite('nl')
        repo = site.data_repository()
        for wikidataitem in self.generator:
          wikidataitem.get()
          if (changed<250):
            itemcount += 1
            if wikidataitem.exists() :
                wikidataitem.get()
                old_description = ''
                new_description = ''
                if source_language in wikidataitem.descriptions :    # if original language is in the labels
                  old_description = wikidataitem.descriptions[source_language]
                  if old_description in ChangeTheseDescriptions :
                    new_description = standaard_omschrijving
                else :
                  new_description = standaard_omschrijving
                  if (not old_description==standaard_omschrijving):
                    if (not new_description=='') :                 
                      try :
                        data = {}
                        data.update( {'labels': { source_language: wikidataitem.labels[source_language]}, 'descriptions': {source_language:new_description} } )
                        wikidataitem.editEntity(data,summary=u'disambiguation, python code on https://goo . gl/wrcy6b')
                      except ValueError:
                        logme(True2, "ValueError occured on %s",wikidataitem.title())
                      except :
                        logme(True, "Undefined error occured on %s",wikidataitem.title())
                      else :
                        logme(False, '%s|%s|%s|%s|%s',datetime.now().strftime("%Y-%b-%d/%H:%m:%S"),wikidataitem.title(),source_language,old_description,new_description)
                      #waitsometime(1)
                      #print ("%s %s: [%s]: %s --> %s" % (datetime.now().strftime("%Y-%b-%d/%H:%m:%S\n"),source_language,wikidataitem.title(),old_description, new_description))
                      changed += 1
                    else :
                      logme(True, 'Item not changed: [%s] = %s', wikidataitem.title(),old_description)
            else :
              logme(True,"Item %s does not exist", wikidataitem.title())

          else :
            break


def WikidataQueryItemPageGenerator(query, site=None):
    """Generate pages that result from the given WikidataQuery.
    @param query: the WikidataQuery query string.
    """
    if site is None:
        site = pywikibot.Site()
    repo = site.data_repository()

    wd_queryset = wdquery.QuerySet(query)

    wd_query = wdquery.WikidataQuery(cacheMaxAge=0)
    data = wd_query.query(wd_queryset)

    pywikibot.output(u'retrieved %d items' % data[u'status'][u'items'])

    for item in data[u'items']:
      yield pywikibot.ItemPage(repo, u'Q' + str(item))


def main():
#    logging.basicConfig(filename="DP-logfile.csv",level=logging.DEBUG)
    disamb_query = "claim[31:4167410] and link[nlwiki]"
    pigenerator = pagegenerators.PreloadingItemGenerator(pagegenerators.WikidataItemGenerator(WikidataQueryItemPageGenerator(disamb_query)))
    disambBot = DisambiguationBot(pigenerator)
    disambBot.run()
    print("Klaar")
 
 
main()