Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
Option Explicit
Sub Main
Dim sFileZip,sDirEsp,sFileTxt
Dim sLink
Dim k
sLink = "http://www.lottomaticaitalia.it/lotto/doc/archivio/storico.zip"
sFileZip = GetDirectoryAppData & "Storico.zip"
sDirEsp = GetDirectoryAppData & "temp\Unzipped\"
If EliminaFile(sFileZip) Then
If CreaDirectory(sDirEsp) Then
If DownloadFromWeb(sLink,sFileZip) Then
Call EliminaFile(sDirEsp & "*")
If UnzipFile(sFileZip,sDirEsp) Then
sFileTxt = sDirEsp & "storico.txt"
If FileEsistente(sFileTxt) Then
Scrivi "Il file è stato scaricato e scompattato in " & sDirEsp
Scrivi
If MsgBox ("Aprire il file scaricato intermamente ?" , vbQuestion+vbYesNo)= vbYes Then
ReDim aRighe(0)
If LeggiRigheFileDiTesto (sFileTxt,aRighe) Then
For k = 0 To UBound(aRighe)
Call Scrivi(aRighe(k))
Next
End If
Else
Call LanciaFile(sFileTxt)
End If
Else
MsgBox "Il file storico.txt no è stato trovato"
Scrivi "verificare il contenuto della cartella " & sDirEsp
End If
Else
MsgBox "Errore unzip"
End If
Else
MsgBox "Impossibile scaricare il file"
End If
Else
MsgBox "Impossibile creare la directory" & vbCrLf & sDirEsp
End If
Else
MsgBox "Impossibile eliminare il vecchio file scaricato"
End If
End Sub
Function UnzipFile(sZipFile,sDestFolder)
On Error Resume Next
Dim objApp 'As Object
Dim objArchive 'As Object
Dim objDest 'As Object
Dim vDestFolder' As Variant
Dim vZipFile 'As Variant
Set objApp = CreateObject("Shell.Application")
vZipFile = sZipFile
vDestFolder = sDestFolder
'If Dir$(sDestFolder,vbDirectory) = "" Then MkDir sDestFolder
objApp.Namespace(vDestFolder).CopyHere objApp.Namespace(vZipFile).Items
If Err = 0 Then
UnzipFile = objApp.Namespace(vZipFile).Items.Count
Else
MsgBox Err.Description
End If
End Function
Sub Unzip(sFileZip As String, sDirOutput As String, sRetFileUnzipped As String)
Dim fso As Object
Dim oApp As Object
Dim fName As Variant
Dim FileNameFolder As Variant
Dim DefPath As String
Dim strDate As String
Dim clsZip As New clsZip
clsZip.ZipFileName = sFileZip ' "c:\temp\ppp.zip"
clsZip.UnzipToFolder (sDirOutput)
Set clsZip = Nothing
sRetFileUnzipped = sDirOutput & Dir(sDirOutput, vbNormal)
Exit Sub
'================================================
fName = sFileZip
FileNameFolder = sDirOutput
' Fname = Application.GetOpenFilename(filefilter:="Zip Files (*.zip), *.zip", _
MultiSelect:=False)
' If Fname = False Then
'Do nothing
' Else
'Root folder for the new folder.
'You can also use DefPath = "C:\Users\Ron\test\"
'DefPath = AddSlashIfNot(Application.DefaultFilePath)
'Create the folder name
' strDate = Format(Now, " dd-mm-yy h-mm-ss")
' FileNameFolder = DefPath & "MyUnzipFolder " & strDate & "\"
'Make the normal folder in DefPath
' MkDir FileNameFolder
'Extract the files into the newly created folder
Set oApp = CreateObject("Shell.Application")
oApp.Namespace("" & FileNameFolder).CopyHere oApp.Namespace("" & fName).items
sRetFileUnzipped = sDirOutput & Dir(sDirOutput, vbNormal)
'If you want to extract only one file you can use this:
'oApp.Namespace(FileNameFolder).CopyHere _
'oApp.Namespace(Fname).items.Item("test.txt")
' MsgBox "You find the files here: " & FileNameFolder
' On Error Resume Next
' Set FSO = CreateObject("scripting.filesystemobject")
' FSO.deletefolder Environ("Temp") & "\Temporary Directory*", True
'End If
End Sub
Moro_80;n1987987 ha scritto:Ciao Luigi,
stavo già "trafficando" su una cosa simile per pura conoscenza personale...ero incappato e partito da un tuo vecchissimo lavoro per la parte dell'unzip dei file, vedi sotto:
Codice:Sub Unzip(sFileZip As String, sDirOutput As String, sRetFileUnzipped As String) Dim fso As Object Dim oApp As Object Dim fName As Variant Dim FileNameFolder As Variant Dim DefPath As String Dim strDate As String Dim clsZip As New clsZip clsZip.ZipFileName = sFileZip ' "c:\temp\ppp.zip" clsZip.UnzipToFolder (sDirOutput) Set clsZip = Nothing sRetFileUnzipped = sDirOutput & Dir(sDirOutput, vbNormal) Exit Sub '================================================ fName = sFileZip FileNameFolder = sDirOutput ' Fname = Application.GetOpenFilename(filefilter:="Zip Files (*.zip), *.zip", _ MultiSelect:=False) ' If Fname = False Then 'Do nothing ' Else 'Root folder for the new folder. 'You can also use DefPath = "C:\Users\Ron\test\" 'DefPath = AddSlashIfNot(Application.DefaultFilePath) 'Create the folder name ' strDate = Format(Now, " dd-mm-yy h-mm-ss") ' FileNameFolder = DefPath & "MyUnzipFolder " & strDate & "\" 'Make the normal folder in DefPath ' MkDir FileNameFolder 'Extract the files into the newly created folder Set oApp = CreateObject("Shell.Application") oApp.Namespace("" & FileNameFolder).CopyHere oApp.Namespace("" & fName).items sRetFileUnzipped = sDirOutput & Dir(sDirOutput, vbNormal) 'If you want to extract only one file you can use this: 'oApp.Namespace(FileNameFolder).CopyHere _ 'oApp.Namespace(Fname).items.Item("test.txt") ' MsgBox "You find the files here: " & FileNameFolder ' On Error Resume Next ' Set FSO = CreateObject("scripting.filesystemobject") ' FSO.deletefolder Environ("Temp") & "\Temporary Directory*", True 'End If End Sub
poi mi son arenato perchè alla gestione dello zip, quando facevo il download non me lo scaricava...o meglio lo scaricavo ma in formato risultante poi illeggibile..la fonte da dove facevo le prove è questa:
http://www.pianetalotto.it/lotto/estrazioni/estrazioniAnno
poi su icona "scarica in zip"
Moro_80;n1988005 ha scritto:Ciao Ouroboros,
avevo già visto il post in pagina 1...ma le mie intenzioni son ben diverse, l'obiettivo è quello di automatizzare il tutto in un'unico .exe evitando appunto tutta la procedura di donwload, poi lancio script etc etc..oltre che a capire bene come funziona la libreria MSHTML come da piccoli spunti dati da Luigi.
Ciao
LuigiB;n1987984 ha scritto:ciao , sempre per chi è interessato e mi sembra lo siano particolarmente Joe e Moro metto la versione in script dell'aggiornamento da lotttomatica. si tratta di un esempio e non aggiorna l'archivio pero affronta
altri problemi e mostra come risolverli.
Il sito di lottomatica ci mette a disposizione un file al seguente indirizzo
http://www.lottomaticaitalia.it/lotto/doc/archivio/storico.zip
quel file contiene le estrazioni dal 1950 ad oggi però è un file zip e va prima decompresso.
Da una parte è piu facile scaricarlo perche basta usare la funzione preposta DownloadFromWeb
dall'altra prima di leggerlo bisogna unzipparlo , lo si puo fare ricorrendo alle librerie di windows
che trattano nativamente i file zip e lo zip mostra come fare.
Dopo aver unzippato il file si puo aprire il file di testo delle estrazioni e gestirlo per aggiornare l'archivio.
Codice:Option Explicit Sub Main Dim sFileZip,sDirEsp,sFileTxt Dim sLink Dim k sLink = "http://www.lottomaticaitalia.it/lotto/doc/archivio/storico.zip" sFileZip = GetDirectoryAppData & "Storico.zip" sDirEsp = GetDirectoryAppData & "temp\Unzipped\" If EliminaFile(sFileZip) Then If CreaDirectory(sDirEsp) Then If DownloadFromWeb(sLink,sFileZip) Then Call EliminaFile(sDirEsp & "*") If UnzipFile(sFileZip,sDirEsp) Then sFileTxt = sDirEsp & "storico.txt" If FileEsistente(sFileTxt) Then Scrivi "Il file è stato scaricato e scompattato in " & sDirEsp Scrivi If MsgBox ("Aprire il file scaricato intermamente ?" , vbQuestion+vbYesNo)= vbYes Then ReDim aRighe(0) If LeggiRigheFileDiTesto (sFileTxt,aRighe) Then For k = 0 To UBound(aRighe) Call Scrivi(aRighe(k)) Next End If Else Call LanciaFile(sFileTxt) End If Else MsgBox "Il file storico.txt no è stato trovato" Scrivi "verificare il contenuto della cartella " & sDirEsp End If Else MsgBox "Errore unzip" End If Else MsgBox "Impossibile scaricare il file" End If Else MsgBox "Impossibile creare la directory" & vbCrLf & sDirEsp End If Else MsgBox "Impossibile eliminare il vecchio file scaricato" End If End Sub Function UnzipFile(sZipFile,sDestFolder) On Error Resume Next Dim objApp 'As Object Dim objArchive 'As Object Dim objDest 'As Object Dim vDestFolder' As Variant Dim vZipFile 'As Variant Set objApp = CreateObject("Shell.Application") vZipFile = sZipFile vDestFolder = sDestFolder 'If Dir$(sDestFolder,vbDirectory) = "" Then MkDir sDestFolder objApp.Namespace(vDestFolder).CopyHere objApp.Namespace(vZipFile).Items If Err = 0 Then UnzipFile = objApp.Namespace(vZipFile).Items.Count Else MsgBox Err.Description End If End Function
DataEstrazione
SiglaRuota
N1
N2
N3
N4
N5
Joe91;n1988085 ha scritto:Buona Sera a tutte/i.
Carmine, se posso ...
lo script che era per Pianetalotto, ha un flag "b" (se ricordo bene)...
che s'attiva quando la "data di aggiornamento" supera quella delle "estrazioni presenti in archivio".
Nel caso dei dati da televideo per esempio il mio script
è organizzato in maniera completamente (e molto) diversa.
Quindi penso ci si debba organizzare sia in funzione dei dati che si hanno a disposizione ...
sia in funzione di come si vuole ( e/o può ) procedere.
Se si intende modificare quello script di Luigi ... i binari... li ha messi giù lui.
"La locomotiva", deve avere (ed è utile che abbia) quello scartamento.
Oppure, è piuttosto probabile che essa deragli.
Buona sera a tutte/i.
....
Ho visto con interesse la soluzione proposta da Ouroboros.
Sto sviluppando anch'io qualcosa e ... ( a dire il vero anche prima avevo già anche scritto "qualcosa")
So, che si è vicini a poter soddisfare quanto Luigi ci aveva proposto.
Cioè, "vicini" a poter selezionare, in database esterni, la parte di essi, utile, ad aggiornare l'Archivio.
A parer mio, l'ideale sarebbe ANCHE se qualcuno ... "poi" ... (che si legge, ANCHE , "prima" )
ospitasse tutta questa raccolta di dati in un piccolo spazio.
Ovvero ci fosse "uno spazio" per un "Archivio Aggiornato" dedicato a "Spaziometria".
Non guasterebbe, controllato e verificato. (diremo poi, meglio)
Archivio a cui riferirci in maniera stabile ... uniforme ... e non troppo discontinua.
Mi riferisco per esempio (e testo la disponibilità) di appassionati come Silop / Enplein / Gam ...
e/o di chiunque vorrà accogliere questa richiesta fornendo gli spazi necessari in un sito/forum.
Naturalmente penso e suggerisco anche la presenza di "Amministratori Virtuali".
Cioè ad alcuni programmini che lo possano mantenere aggiornato.
Oltre naturalmente alla dedizione delle persone preposte e capaci della gestione.
Sono certo che un "RIFERIMENTO" di questo tipo, interessi a molti.
Dunque vedremo se, per questo scopo, si potranno superare diversità di vedute
e sviluppare qualcosa di utile.
Buona serata.
Option Explicit
Sub Main
Dim sFileZip,sDirEsp,sFileTxt
Dim sLink
Dim k
sLink = "http://www.lottomaticaitalia.it/lotto/doc/archivio/storico.zip"
sFileZip = GetDirectoryAppData & "Storico.zip"
sDirEsp = GetDirectoryAppData & "temp\Unzipped\"
If EliminaFile(sFileZip) Then
If CreaDirectory(sDirEsp) Then
If DownloadFromWeb(sLink,sFileZip) Then
Call EliminaFile(sDirEsp & "*")
If UnzipFile(sFileZip,sDirEsp) Then
sFileTxt = sDirEsp & "storico.txt"
If FileEsistente(sFileTxt) Then
Scrivi "Il file è stato scaricato e scompattato in " & sDirEsp
Scrivi
ReDim aRighe(0)
If LeggiRigheFileDiTesto(sFileTxt,aRighe) Then
Call AggiornaEstrazioni(aRighe)
End If
Else
MsgBox "Il file storico.txt no è stato trovato"
Scrivi "verificare il contenuto della cartella " & sDirEsp
End If
Else
MsgBox "Errore unzip"
End If
Else
MsgBox "Impossibile scaricare il file"
End If
Else
MsgBox "Impossibile creare la directory" & vbCrLf & sDirEsp
End If
Else
MsgBox "Impossibile eliminare il vecchio file scaricato"
End If
End Sub
Function UnzipFile(sZipFile,sDestFolder)
On Error Resume Next
Dim objApp 'As Object
Dim objArchive 'As Object
Dim objDest 'As Object
Dim vDestFolder' As Variant
Dim vZipFile 'As Variant
Set objApp = CreateObject("Shell.Application")
vZipFile = sZipFile
vDestFolder = sDestFolder
'If Dir$(sDestFolder,vbDirectory) = "" Then MkDir sDestFolder
objApp.Namespace(vDestFolder).CopyHere objApp.Namespace(vZipFile).Items
If Err = 0 Then
UnzipFile = objApp.Namespace(vZipFile).Items.Count
Else
MsgBox Err.Description
End If
End Function
Sub AggiornaEstrazioni(aRighe)
Dim sDataUltimaEstr,sOldData,sOldAnno,nEstrAnno,idRuota,k,e
Dim sFileEstr
Dim aV,aVDD
ReDim aNumEstrazione(11,5)
Dim nEstrSalvate
sFileEstr = GetDirectoryAppData & "basedati.dat"
sDataUltimaEstr = FormattaStringa(DataEstrazione(EstrazioniArchivio,,,"/"),"yyyy/mm/dd")
sOldData = ""
sOldAnno = ""
nEstrSalvate = 0
nEstrAnno = 0
For k = 0 To UBound(aRighe) ' leggo tutte le righe del file estrazioni
ReDim aV(0)
aV = Split(aRighe(k),vbTab) ' splitto i valori della riga
If UBound(aV) = 6 Then ' testo che la riga abbia la quantita di valoriche mi aspetto
If aV(0) <> sOldData And sOldData <> "" Then ' testo se la data della riga corrente è diversa dall'ultima gestita
' siamo nel caso di una riga che si riferisce ad una nuova estrazione , dato che in memoria ne avevamo gia
' una dobbiamo eseguire alcune operazioni e vedere se l'estrazione che avevamo in memoria
' deve essere aggiunta all'archivio
nEstrAnno = nEstrAnno + 1 ' essendo cambiata estrazioen incrementiamo l'indice annuale
If sOldData > sDataUltimaEstr Then ' se la data dell'estrazione in memoria è maggiore dell'ultima in archivio
If SalvaEstrazione(aNumEstrazione,sOldData,nEstrAnno,sFileEstr) Then ' salvaimo l'estrazione che avevamo in memoria
nEstrSalvate = nEstrSalvate + 1
Messaggio "Estrazioni aggiunte " & nEstrSalvate
End If
End If
' fobbiamo gestire l'incremento dell'indice annuale che si deve riazzerare quando cambia l'anno
ReDim aVDD(0)
aVDD = Split(aV(0),"/") ' slpittimao la data nei suoi 3 valor anno /mese /giorno
If aVDD(0) <> sOldAnno Then ' se l'anno corrente è diverso da quello precedentemente gestito
nEstrAnno = 0 ' azzeriamo l'anno in modo che riparta da 1
End If
sOldAnno = aVDD(0) ' memorizziamo il nuovo anno
ReDim aNumEstrazione(11,5) ' azzeriamo la matrice de i numeri temporanei
End If
sOldData = aV(0) ' memorizziamo la data corrente
' vediamo a quale ruota si riferiscono i numeri della riga che stiamo trattando
Select Case aV(1)
Case "BA"
idRuota = 1
Case "CA"
idRuota = 2
Case "FI"
idRuota = 3
Case "GE"
idRuota = 4
Case "MI"
idRuota = 5
Case "NA"
idRuota = 6
Case "PA"
idRuota = 7
Case "RM"
idRuota = 8
Case "TO"
idRuota = 9
Case "VE"
idRuota = 10
Case "RN"
idRuota = 11
End Select
' alimento la matrice temporanea dei nmeri
For e = 1 To 5
aNumEstrazione(idRuota,e) = aV(e + 1)
Next
End If
Next
' al termine del ciclo avremo la marice emporanea carica quindi dobbiamo vedere
' se va aggiunta all'archivio
nEstrAnno = nEstrAnno + 1
If sOldData > sDataUltimaEstr Then
If SalvaEstrazione(aNumEstrazione,sOldData,nEstrAnno,sFileEstr) Then
nEstrSalvate = nEstrSalvate + 1
Messaggio "Estrazioni aggiunte " & nEstrSalvate
End If
End If
Scrivi "Salvate " & nEstrSalvate & " estrazioni"
End Sub
LuigiB;n1988155 ha scritto:come vedete lo script che ho postato sopra prende i dati da lottomatica , ma per riallacciarmi al discorso di Joe , se avessimo un sito dove salvare un file zip contenente un file di testo con le estrazioni dello stesso formato in cui sono nel file di lottomatica basterebeb cambiare la link di questo script per scaricare dal "nostro sito"