Difference between revisions of "Draft Workflow/script"
Jump to navigation
Jump to search
(Created page with "== Note == Le directory indicate più sotto, ossia: * path = r"C:\pywikipediacore\lavoro\fare" #Directory da cui leggere i file * pathCopy = 'C:\pywikipediacore\lavoro\fatto'...") |
(No difference)
|
Revision as of 16:35, 9 September 2013
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