Draft Workflow/script

From EAGLE MediaWiki
Revision as of 17:35, 9 September 2013 by Sannita (talk | contribs) (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'...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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