Draft Workflow/script
Jump to navigation
Jump to search
Note
Le directory indicate più sotto, ossia:
- path = r"C:\pywikipediacore\lavoro\fare" #Directory da cui leggere i file
- pathCopy = 'C:\pywikipediacore\lavoro\fatto' #Directory su cui archiviare i file
si possono cambiare.
Script
# -*- coding: utf-8 -*- import pywikibot import os import time import shutil import sys #Restituisce vero se la proprietà con quel valore esiste def ExistPropertyValue(value,claim): for p in claim: tmp = str(p.getTarget()).replace("[[","").replace("]]","") if 'wikidata' in tmp: # Il valore è un item dati=tmp.split(':') dato=dati[1] if dato == value.title(): return True else: # Il valore è una stringa (da verificare su funziona con il tipo Commons) dato=tmp if dato == value: return True return False loop = True path = r"C:\pywikipediacore\lavoro\fare" #Directory da cui leggere i file pathCopy = 'C:\pywikipediacore\lavoro\fatto' #Directory su cui archiviare i file wd = pywikibot.Site('wikidata','wikidata').data_repository() while loop: #Ciclo infinito di lettura della directory try: listing = os.listdir(path) count = len([f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]) if count == 0: print "Nessun file, pausa 2 secondi" time.sleep(2) else: for infile in listing: #Loop sui file nella directory f = open(path + "\\" + infile) f.readline() for line in iter(f): line = line.rstrip('\r\n') data=line.split('|') id = data[0] print id proprieta = data[1] valore = data[2] prop_fonte = data[3] val_fonte = data[4] singolo = data[5] # se 0 valore singolo, se 1 valore multiplo tipo = data[6] data = pywikibot.ItemPage(wd,id) #Carico l'item da Wikidata data.get() #Carico i dati if proprieta in data.claims: #controlla se esiste già la proprietà if singolo == '0': pass #Da fare: verificare se è uguale else: if ExistPropertyValue(valore,data.claims[proprieta]): #Controlla se la proprietà con quel valore esiste già pass else: # proprietà multipla if tipo == "'s'": #Stringa claim = pywikibot.Claim(wd,proprieta) # Proprietà claim.setTarget(valore) # Valore proprietà data.addClaim(claim) # add claim else: #Item claim = pywikibot.Claim(wd,proprieta) # Proprietà claim.setTarget(pywikibot.ItemPage(wd,valore)) # Valore proprietà data.addClaim(claim) # add claim if val_fonte: reference=pywikibot.Claim(wd,prop_fonte) # Fonte reference.setTarget(pywikibot.ItemPage(wd,val_fonte)) # Valore fonte claim.addSource(reference) # add source else: if tipo == "'s'": claim = pywikibot.Claim(wd,proprieta) # Proprietà claim.setTarget(valore) # Valore proprietà data.addClaim(claim) # add claim else: claim = pywikibot.Claim(wd,proprieta) # Proprietà claim.setTarget(pywikibot.ItemPage(wd,valore)) # Valore proprietà data.addClaim(claim) # add claim if val_fonte: reference=pywikibot.Claim(wd,prop_fonte) # Fonte reference.setTarget(pywikibot.ItemPage(wd,val_fonte)) # Valore fonte claim.addSource(reference) # add source f.close print "Fine del file. Item: " + id f = None shutil.copy2(path + "\\" + infile, pathCopy + "\\" + infile) os.remove(path + "\\" + infile) except Exception: print "Errore: su " + id, proprieta, valore print "Unexpected error:", sys.exc_info()[0] time.sleep(5) #Pausa 5 secondi pass