# -*- 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()