import tkinter as tk
from tkinter import messagebox
import os
import requests
import zipfile
import io
# Percorso di estrazione (e dove verranno creati i file .txt)
PERCORSO_ESTRAZIONE = r'C:\Users\PRODESC\AppData\Local\Programs\Python\Python312\Testcartelle' # <---- MODIFICA QUI SE NECESSARIO
def scarica_e_estrai_zip(url, destinazione):
try:
response = requests.get(url)
response.raise_for_status() # Genera un'eccezione per codici di stato HTTP errati
with zipfile.ZipFile(io.BytesIO(response.content)) as z:
z.extractall(destinazione)
return True
except requests.exceptions.RequestException as e:
messagebox.showerror("Errore", f"Errore durante il download: {e}")
return False
except zipfile.BadZipFile as e:
messagebox.showerror("Errore", f"Errore nel file ZIP: {e}")
return False
except Exception as e:
messagebox.showerror("Errore", f"Errore sconosciuto: {e}")
return False
def carica_dati_da_file(nome_file):
try:
with open(nome_file, 'r') as file:
return [line.strip() for line in file.readlines()]
except FileNotFoundError:
return [] # Restituisce una lista vuota se il file non esiste
except Exception as e:
messagebox.showerror("Errore", f"Errore durante la lettura del file {nome_file}: {e}")
return []
def salva_dati_su_file(dati_ruote):
for ruota, dati in dati_ruote.items():
if dati:
nome_file = os.path.join(PERCORSO_ESTRAZIONE, mappa_ruote[ruota]) # Percorso completo
try:
with open(nome_file, 'a') as file:
for line in dati:
# Formatta la linea per la ruota Nazionale (aggiunge tabulazioni)
if ruota == "NZ":
parts = line.split()
if len(parts) >= 7: # Assicurati di avere abbastanza elementi
line = f"{parts[0]}\t{parts[1]}\t{parts[2]}\t{parts[3]}\t{parts[4]}\t{parts[5]}\t{parts[6]}"
file.write(line + '\n')
except Exception as e:
messagebox.showerror("Errore", f"Errore durante la scrittura nel file {nome_file}: {e}")
def aggiorna_file(data_inizio, data_fine, percorso_estrazione): # aggiunto percorso_estrazione
global mappa_ruote
mappa_ruote = {
"BA": "Bari.txt",
"CA": "Cagliari.txt",
"FI": "Firenze.txt",
"GE": "Genova.txt",
"MI": "Milano.txt",
"NA": "Napoli.txt",
"PA": "Palermo.txt",
"RM": "Roma.txt",
"NZ": "Nazionale.txt",
"TO": "Torino.txt",
"VE": "Venezia.txt"
}
tutti_dati_filtrati = {ruota: [] for ruota in mappa_ruote.keys()}
# Usa il percorso completo per caricare il file storico.txt
storico_file_path = os.path.join(percorso_estrazione, 'storico.txt')
dati = carica_dati_da_file(storico_file_path) # Usa il percorso completo
for line in dati:
parts = line.split()
if len(parts) < 2:
continue
date = parts[0]
ruota = parts[1]
if data_inizio <= date <= data_fine:
# Gestione della ruota Nazionale (RN -> NZ)
if ruota == "RN":
ruota = "NZ"
parts[1] = "NZ" # Modifica la ruota nella linea
line = ' '.join(parts) # Ricostruisci la linea con "NZ"
if ruota in tutti_dati_filtrati:
tutti_dati_filtrati[ruota].append(line)
tutti_dati_filtrati = {ruota: lines for ruota, lines in tutti_dati_filtrati.items() if lines}
if not tutti_dati_filtrati:
messagebox.showinfo("Info", "Nessun dato trovato per le ruote specificate e le date.")
return
salva_dati_su_file(tutti_dati_filtrati)
messagebox.showinfo("Successo", "Dati aggiornati per tutte le ruote.")
def aggiorna_tutti_file():
# Specifica il percorso di estrazione
# percorso_estrazione = r'C:\TUO PERCORSO \Python\Python312' # NON SERVE PIU', USA LA COSTANTE GLOBALE
if scarica_e_estrai_zip("https://www.igt.it/STORICO_ESTRAZIONI_LOTTO/storico.zip", PERCORSO_ESTRAZIONE):
# Correggi RN in NZ nel file storico.txt appena scaricato
storico_file_path = os.path.join(PERCORSO_ESTRAZIONE, 'storico.txt') # Percorso completo
try:
with open(storico_file_path, 'r') as file:
lines = file.readlines()
with open(storico_file_path, 'w') as file:
for line in lines:
file.write(line.replace(' RN ', ' NZ '))
except Exception as e:
messagebox.showerror("Errore", f"Errore durante la correzione RN -> NZ: {e}")
return # Importante uscire in caso di errore
if os.path.exists(storico_file_path):
data_inizio = data_inizio_entry.get()
data_fine = data_fine_entry.get()
if not data_inizio:
messagebox.showerror("Errore", "Inserisci una data di inizio.")
return
aggiorna_file(data_inizio, data_fine, PERCORSO_ESTRAZIONE) # Passa il percorso alla funzione
else:
messagebox.showerror("Errore", "Il file storico.txt non è stato trovato dopo l'estrazione.")
else:
messagebox.showerror("Errore", "Il download del file storico.zip è fallito.")
def crea_file():
global mappa_ruote
mappa_ruote = {
"BA": "Bari.txt",
"CA": "Cagliari.txt",
"FI": "Firenze.txt",
"GE": "Genova.txt",
"MI": "Milano.txt",
"NA": "Napoli.txt",
"PA": "Palermo.txt",
"RM": "Roma.txt",
"NZ": "Nazionale.txt",
"TO": "Torino.txt",
"VE": "Venezia.txt"
}
for ruota in mappa_ruote:
nome_file = os.path.join(PERCORSO_ESTRAZIONE, mappa_ruote[ruota]) # Percorso completo
try:
if not os.path.exists(nome_file):
open(nome_file, 'w').close() # Crea un file vuoto
print(f"File {nome_file} creato in {PERCORSO_ESTRAZIONE}.")
except Exception as e:
messagebox.showerror("Errore", f"Errore durante la creazione del file {nome_file}: {e}")
return # Esci dalla funzione in caso di errore
messagebox.showinfo("Successo", "Tutti i file mancanti sono stati creati.")
# Creazione della finestra principale
root = tk.Tk()
root.title("Aggiornamento Dati Lotto")
data_inizio_var = tk.StringVar()
data_fine_var = tk.StringVar()
tk.Label(root, text="Data di Inizio (AAAA/MM/GG):").grid(row=0, column=0, padx=10, pady=10)
data_inizio_entry = tk.Entry(root, textvariable=data_inizio_var)
data_inizio_entry.grid(row=0, column=1, padx=10, pady=10)
tk.Label(root, text="Data di Fine (AAAA/MM/GG):").grid(row=1, column=0, padx=10, pady=10)
data_fine_entry = tk.Entry(root, textvariable=data_fine_var)
data_fine_entry.grid(row=1, column=1, padx=10, pady=10)
tk.Button(root, text="Aggiorna Tutti i File", command=aggiorna_tutti_file).grid(row=2, column=0, columnspan=2, padx=10, pady=10)
tk.Button(root, text="Crea File Mancanti", command=crea_file).grid(row=3, column=0, columnspan=2, padx=10, pady=10)
root.mainloop()