Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Download fil Zip da internet e opzionale un unzip e salvataggio file zippato
Forum - C# / VB.NET - Download fil Zip da internet e opzionale un unzip e salvataggio file zippato

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
Giacos71 (Normal User)
Rookie


Messaggi: 34
Iscritto: 06/05/2009

Segnala al moderatore
Postato alle 9:57
Mercoledì, 01/02/2023
Come da titolo dovrei scaricare un file zip (archivio estrazioni lotto) e opzionale salvare il file zippato in una cartella dedicata. Lo so molti storceranno il naso ma il lotto a me piace. Ho provato diversi codici, per cercare la soluzione migliore, ma quando il codice non dava errori riscontravo questi 2 problemi non in contemporanea:

1) Il file veniva apparentemente scaricato (oppure creato), ma era a zero kb (almomento è di circa 601 kb).
2) Nel secondo caso dava questo errore: richiesta annullata impossibile creare un canale sicuro SSL.

E da giorni che ci sto sbattendo la testa e pensavo fosse più semplice scaricare un file da internet.

Questo è il link da cui scaricare il file: https://www.igt.it/STORICO_ESTRAZIONI_LOTTO/storico.zip

E questo è l'ultimo codice utilizzato:

Codice sorgente - presumibilmente VB.NET

  1. ' Assicurarsi che l'uso di System.Net; sia incluso
  2. Imports System.Net
  3.  
  4. Public Class DownloadArchivio
  5.  
  6.     'Dim wc As WebClient
  7.     'Private WithEvents wc As WebClient
  8.        
  9.         'Private webClient As New WebClient()
  10.        
  11.         Private Sub Close_Click(sender As Object, e As EventArgs) Handles btnClose.Click
  12.         Me.Close()
  13.  
  14.     End Sub
  15.        
  16.         Private Sub DownloadArchivio_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  17.        
  18.         ''Impostare la cartella di destinazione predefinita
  19.         ''txtDestination.Text = "C:\Downloads\"
  20.         ''txtDestination.Text = "C:\Downloads\"
  21.         'wc = New WebClient()
  22.                
  23.                 wc = New WebClient()
  24.         AddHandler wc.DownloadFileCompleted, AddressOf DownloadCompleted
  25.                
  26.                 Private Sub btnDownload_Click(sender As Object, e As EventArgs) Handles btnDownload.Click
  27.                
  28.                 Private webClient As New WebClient()
  29.  
  30.         Dim fileUrl As String = txtSource.Text
  31.         Dim destinationPath As String = txtDestination.Text
  32.  
  33.         If Not Directory.Exists(destinationPath) Then
  34.             Directory.CreateDirectory(destinationPath)
  35.         End If
  36.  
  37.         'Creare una nuova richiesta Web
  38.         Dim request As WebRequest = WebRequest.Create(fileUrl)
  39.  
  40.         Dim response As WebResponse
  41.         Try
  42.             response = request.GetResponse()
  43.         Catch ex As WebException
  44.             'Gestire l'eccezione qui, ad esempio mostrando un messaggio di errore all'utente
  45.             MessageBox.Show("Errore di connessione: " & ex.Message)
  46.         End Try
  47.  
  48.  
  49.         'Calcolare la lunghezza del file
  50.         Dim fileSize As Long = response.ContentLength
  51.         Dim fileName As String = Path.GetFileName(fileUrl)
  52.         Dim saveFilePath As String = Path.Combine(destinationPath, fileName)
  53.  
  54.         'Controllare se il file esiste già nella cartella di destinazione
  55.         If File.Exists(saveFilePath) Then
  56.             Dim existingFileSize As Long = New FileInfo(saveFilePath).Length
  57.             If existingFileSize >= fileSize Then
  58.                 'Il file esiste già e non è un aggiornamento
  59.                 MessageBox.Show("Il file esiste già e non è un aggiornamento.")
  60.                 Return
  61.             Else
  62.                 'Il file esiste già e potrebbe essere un aggiornamento
  63.                 Dim result As DialogResult = MessageBox.Show("Il file esiste già. Vuoi sovrascriverlo?", "File esiste già", MessageBoxButtons.YesNo)
  64.                 If result = DialogResult.No Then
  65.                     Return
  66.                 End If
  67.             End If
  68.         End If
  69.  
  70.         'Inizializzare la ProgressBar
  71.         DownloadProgress.Value = 0
  72.         DownloadProgress.Maximum = 100
  73.  
  74.         'Scaricare il file
  75.         Using responseStream As Stream = response.GetResponseStream()
  76.             Dim totalBytes As Long = response.ContentLength
  77.             Dim totalBytesDownloaded As Long = 0
  78.             Dim buffer(1023) As Byte
  79.             Dim bytesRead As Integer
  80.             Dim cancelDownload As Boolean = False
  81.             Using saveFileStream As FileStream = File.Create(saveFilePath)
  82.                 Do
  83.                     bytesRead = responseStream.Read(buffer, 0, buffer.Length)
  84.                     totalBytesDownloaded += bytesRead
  85.                     saveFileStream.Write(buffer, 0, bytesRead)
  86.                     Dim progress = CInt((totalBytesDownloaded * 100) / totalBytes)
  87.  
  88.                     Invoke(New Action(Function()
  89.                                           DownloadProgress.Value = progress
  90.                                           Return Nothing
  91.                                       End Function))
  92.                 Loop While bytesRead > 0 AndAlso Not cancelDownload
  93.             End Using
  94.         End Using
  95.  
  96.         Impostare la barra di avanzamento
  97.         DownloadProgress.Minimum = 0
  98.         DownloadProgress.Value = 0
  99.         DownloadProgress.Style = ProgressBarStyle.Blocks
  100.  
  101.         'Gestisce l'evento di completamento del download
  102.     Private Sub DownloadCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
  103.         If e.Error IsNot Nothing Then
  104.             'Errore durante il download
  105.             MessageBox.Show("Errore di connessione: " & e.Error.Message)
  106.         Else
  107.             'Download completato
  108.             MessageBox.Show("Download completato!")
  109.         End If
  110.     End Sub
  111.        
  112.         Private Sub DownloadCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc.DownloadFileCompleted
  113.         If e.Error IsNot Nothing Then
  114.             'Errore durante il download
  115.             MessageBox.Show("Errore durante il download: " & e.Error.Message)
  116.         ElseIf e.Cancelled Then
  117.             'Download annullato
  118.             MessageBox.Show("Download annullato.")
  119.         Else
  120.             'Download completato con successo
  121.             MessageBox.Show("Download completato con successo.")
  122.         End If
  123.     End Sub



Il codice è pressapoco questo, dico pressapoco perchè nelle mi prove ho fatto un po di casino e immagino che sia migliorabile.

Ringrazio in anticipo chi mi aiuterà e se ci sono errori ho ce bisogno di altro codice (tipo la parte dell'unzip e salvataggio fatemelo sapere.

Allego lo screen del form (la linklabel non è da calcolare era solo per test). Anche label3 e label4 non servono le devo poi togliere.


Giacos71 ha allegato un file: Form_Download_Archivio.png (6214 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da Giacos71 il 01/02/2023 alle 9:59
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:16
Mercoledì, 01/02/2023
Testo quotato

Lo so molti storceranno il naso ma il lotto a me piace.



Allora fai ogni tanto le tue giocate senza però spacciare un programma informatico per qualcosa che possa "prevedere" le uscite.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 15:08
Mercoledì, 01/02/2023
Hai postato un codice privo degli End Class, End Sub doppie o remmate dichiarazioni....
Per scaricare il file dal sito indicato hai bisogno del certificato oppure gestire il protocollo SSL/TLS

Perché non ti scarichi il file semplicemente mettendo la stringa https://www.igt.it/STORICO_ESTRAZIONI_LOTTO/storico.zip sul browser?

Qui puoi trovare l'archivio che non necessita del certificato, per ora: https://www.lottologia.com/lotto/archivio-estrazioni/?as=TX ... che funzionerebbe con il codice che hai postato se ritrovi l'originale o se sei in grado di rimetterlo a posto.

Nel codice che ti propongo se cambi l'anno alla fine del link nella "textbox source" e metti il nome giusto nella "textbox destination" scarichi l'archivio corrispondente.

Codice:
Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net
  2.  
  3. Public Class Form1
  4.     Private Sub DownloadArchivio_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  5.         ' senza percorso il file finisce nella cartella dell'exe
  6.         txtDestination.Text = "C:\Downloads\Archivio2022.txt"
  7.         txtSource.Text = "https://www.lottologia.com/lotto/archivio-estrazioni/?as=TXT&year=2022"
  8.     End Sub
  9.  
  10.     Private Sub btnDownload_Click(sender As Object, e As EventArgs) Handles btnDownload.Click
  11.         Me.Cursor = Cursors.WaitCursor
  12.         Using client As New WebClient()
  13.             Try
  14.                 client.DownloadFile(txtSource.Text, txtDestination.Text)
  15.             Catch er As Exception
  16.                 MessageBox.Show(er.Message)
  17.             End Try
  18.         End Using
  19.         Me.Cursor = Cursors.Default
  20.     End Sub
  21. End Class



nel form devi aggiungere due textbox:
txtDestination
txtSource

e un button:
btnDownload

Ultima modifica effettuata da Carlo il 02/02/2023 alle 0:07


in programmazione tutto è permesso
PM Quote
Avatar
Giacos71 (Normal User)
Rookie


Messaggi: 34
Iscritto: 06/05/2009

Segnala al moderatore
Postato alle 22:35
Mercoledì, 01/02/2023
Testo quotato

Postato originariamente da nessuno:

Testo quotato

Lo so molti storceranno il naso ma il lotto a me piace.



Allora fai ogni tanto le tue giocate senza però spacciare un programma informatico per qualcosa che possa "prevedere" le uscite.



Non capisco perchè sempre tutta questa polemica. Io non voglio spacciare niente ho solo chiesto non riesco a scaricare un file che potrebbe chiamarsi archivio.zip o pippo.zip il problemasarebbe lo sesso.
Io ero qui per chiedere aiuto e non per ricevere polemica, se lacosa a te non interessa basta non rispondere punto e basta. e con questa è già laseconda volta.

PM Quote
Avatar
Giacos71 (Normal User)
Rookie


Messaggi: 34
Iscritto: 06/05/2009

Segnala al moderatore
Postato alle 22:52
Mercoledì, 01/02/2023
Testo quotato

Postato originariamente da Carlo:

Hai postato un codice privo degli End Class, End Sub doppie o remmate dichiarazioni....
Per scaricare il file dal sito indicato hai bisogno del certificato oppure gestire il protocollo SSL/TLS

Perché non ti scarichi il file semplicemente mettendo la stringa https://www.igt.it/STORICO_ESTRAZIONI_LOTTO/storico.zip sul browser?

Qui puoi trovare l'archivio che non necessta del certificato, per ora: https://www.lottologia.com/lotto/archivio-estrazioni/?as=TX ... che funzionerebbe con il codice che hai postato se ritrovi l'originale o se sei in grado di rimetterlo a posto.

Nel codice che ti propongo se cambi l'anno alla fine del link nella "textbox source" e metti il nome giusto nella "textbox destination" scarichi l'archivio corrispondente.

Codice:
Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net
  2.  
  3. Public Class Form1
  4.     Private Sub DownloadArchivio_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  5.         ' senza percorso il file finisce nella cartella dell'exe
  6.         txtDestination.Text = "C:\Downloads\Archivio2022.txt"
  7.         txtSource.Text = "https://www.lottologia.com/lotto/archivio-estrazioni/?as=TXT&year=2022"
  8.     End Sub
  9.  
  10.     Private Sub btnDownload_Click(sender As Object, e As EventArgs) Handles btnDownload.Click
  11.         Me.Cursor = Cursors.WaitCursor
  12.         Using client As New WebClient()
  13.             Try
  14.                 client.DownloadFile(txtSource.Text, txtDestination.Text)
  15.             Catch er As Exception
  16.                 MessageBox.Show(er.Message)
  17.             End Try
  18.         End Using
  19.         Me.Cursor = Cursors.Default
  20.     End Sub
  21. End Class



nel form devi aggiungere due textbox:
txtDestination
txtSource

e un button:
btnDownload



Si ho fatto un copia incolla per postare il codice completoe mi scuso se qualcosa ho lasciato per strada.

Bè non loscarico così perchè e molto semplice, invece avevo visto un software che scaricava il file in formato zip e poi copiava il file al suo interno che è un txt nella rispettiva cartella e volevo ricreare tale situazione.

Si sicuramente quel file si scaricherebbe senza problemi, però primo non ha la stessa formattazione e quindi incasinato nella lettura e visto che avevo una parte di codice che gentilmente già molto tempo fa tu mi avevi aiutato per gestire tale archivio preferivo questo, e secondo dovrei scaricarmi più anni mentre quello da me proposto ha l'archivio completo.

Il codice che tu hai proposto e di cui ti ringrazio però scarica da quello che io non voglio e non so se modificando solo il link può funzionare.

Come dici tu "Per scaricare il file dal sito indicato hai bisogno del certificato oppure gestire il protocollo SSL/TLS" vorrei capire come come avere questo certificato, cioè se devo averlo io nell'applicazione o deve sempre e comunque risiedere sul server.

Ho cercato di risolvere questa cosa del protocollo SSL ma non cisono riuscito e non capisco perchè non basti mettere il link e stop, d'altronde se è un link che mettono loro a disposizione non vedo che danno io potrei fare.

No messo come suggerito in alcuni siti queste righe:

Codice sorgente - presumibilmente C# / VB.NET

  1. ServicePointManager.Expect100Continue = True
  2.         ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12



ma non ho risolto, ho provato anche una procedura che a detta dell'autore dovrebbe bpassare laverifica del protocollo SSL7TLS ma non funziona.

A questo punto non so che fare perchè si trova poco a riguardo oppure io non ho cercato in modo approfondito.

Ho cercato di capire anche il perchè mettendo il link nelbrowser lui lo scarica tranquillamente dalla mia applicazione invece no! Si vede che nel browser ci sono verifiche e/o controlli che non sono implementate nella mia applicazione.

Ultima modifica effettuata da Giacos71 il 01/02/2023 alle 22:55
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:01
Giovedì, 02/02/2023
Testo quotato

Postato originariamente da Giacos71:

Testo quotato

Postato originariamente da nessuno:

Testo quotato

Lo so molti storceranno il naso ma il lotto a me piace.



Allora fai ogni tanto le tue giocate senza però spacciare un programma informatico per qualcosa che possa "prevedere" le uscite.



Non capisco perchè sempre tutta questa polemica. Io non voglio spacciare niente ho solo chiesto non riesco a scaricare un file che potrebbe chiamarsi archivio.zip o pippo.zip il problemasarebbe lo sesso.
Io ero qui per chiedere aiuto e non per ricevere polemica, se lacosa a te non interessa basta non rispondere punto e basta. e con questa è già laseconda volta.



Veramente sei stato tu a dire "molti storceranno il naso" e io te l'ho confermato e ti ho anche spiegato il perché la penso così.

E lo farò la terza, quarta e quinta volta se serve ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 16:13
Giovedì, 02/02/2023
Anticipo SOLUZIONE senza arrivare alla fine della discussione
Il problema si ha su alcuni siti se si usa Win7, con Win10 il file si scarica correttamente anche da codice .Net.

---  Post originale ----> Purtroppo non so perché da .Net anche con il protocollo Tls12 il certificato per scaricare https://www.igt.it/STORICO_ESTRAZIONI_LOTTO/storico.zip non sia valido, speriamo che qualcuno ce lo spieghi.
Personalmente non ho problemi da .Net a scaricare files da altri siti o dai miei con il protocollo Tls12

Ho scritto due righe che ti potrebbero tornare utili.

Metti nella caretella C:\Downloads\ il file Storico.txt scaricato da igt e dezippato a mano.
Lancia il programma DownloadArchivio.exe dopo averlo estratto dallo zip allegato qui sotto.

Il programma cerca nel file Storico.txt l'ultima data presente e ne usa l'anno per scaricare da lottologia il file ArchivioAAAA.txt corrispondente.
Scaricato il file ArchivioAAAA.txt, le date non presenti in Storico.txt verranno aggiunte con la giusta formattazione.

Il programma è anche capace di scaricare più anni, puoi provare cancellando alcune estrazioni da Storico.txt

ATTENZIONE Non controlla se nella data ci sono tutte le estrazioni, se cancelli delle estrazioni da "Storico.txt" lo devi fare sempre dall'estrazione di BA in poi, Il file Storico.txt deve sempre terminare con l'estrazione di VE e suoi estratti, non deve contenere righe vuote alla fine.

Il programma in una listbox annota tutte le fasi, utile per capire il progresso e il contenuto delle variabili, il punto esclamativo indica che si può procedere, il punto interrogativo indica un errore e il programma termina.

Aggiungo il codice completo, la listbox viene aggiunta in runtime
Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net
  2. Imports System.IO
  3.  
  4. Public Class Form1
  5.  
  6.     Dim lB As New ListBox
  7.     Dim storico As List(Of String)
  8.     Dim percorsoStorico As String = "C:\Downloads\Storico.txt"
  9.     Dim diffAnno As Integer
  10.     Dim ultimaData As Date
  11.  
  12.     Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
  13.         lB.Dock = DockStyle.Fill
  14.         Me.Controls.Add(lB)
  15.         If File.Exists(percorsoStorico) Then
  16.             lB.Items.Add("! trovato " & percorsoStorico)
  17.             storico = File.ReadAllLines(percorsoStorico).ToList
  18.             lB.Items.Add("! caricato in lista storico: " & percorsoStorico)
  19.             Dim indiceUltimaData As Integer
  20.  
  21.             Do ' accoda un anno o più
  22.                 indiceUltimaData = storico.Count - 1
  23.                 If storico.Last.Length > 10 AndAlso Date.TryParse(storico.Last.Substring(0, 10), ultimaData) Then
  24.                     lB.Items.Add("! ultima data in Storico.txt = " & ultimaData.ToShortDateString & " Riga: " & indiceUltimaData) : lB.Refresh()
  25.                 Else
  26.                     lB.Items.Add("? L'ULTIMA RIGA E' VUOTA E/O NON CONTIENE UNA DATA")
  27.                     Exit Sub
  28.                 End If
  29.                 aggiungi()
  30.                 diffAnno = 1 ' passa al prossimo anno
  31.                 ' visualizzo le estrazioni accodate, utile per controlli
  32.                 For i = indiceUltimaData + 1 To storico.Count - 1
  33.                     lB.Items.Add("! Add " & storico(i))
  34.                 Next
  35.             Loop While Today.Year > ultimaData.Year ' esce per eccesso di anno senza incremento
  36.         Else
  37.             lB.Items.Add("? " & percorsoStorico & " NON ESISTE")
  38.             Exit Sub
  39.         End If
  40.  
  41.         File.WriteAllLines(percorsoStorico, storico)
  42.         lB.Items.Add("! Storico aggiornato " & percorsoStorico & " con " & storico.Count & " righe")
  43.         lB.TopIndex = lB.Items.Count - 1 ' rende visibile l'ultima riga
  44.     End Sub
  45.  
  46.     Sub aggiungi()
  47.         If Today.Year < ultimaData.Year + diffAnno Then Exit Sub ' esce per eccesso di anno con incremento
  48.         Dim archivio As List(Of String)
  49.         Dim source As String = "https://www.lottologia.com/lotto/archivio-estrazioni/?as=TXT&year=" & (ultimaData.Year + diffAnno).ToString
  50.         Dim destinazione As String = Path.Combine(Path.GetDirectoryName(percorsoStorico), "Archivio" & (ultimaData.Year + diffAnno).ToString & ".txt")
  51.         lB.Items.Add("! carico archivio: " & source) : lB.Refresh()
  52.         Me.Cursor = Cursors.WaitCursor
  53.         Using client As New WebClient()
  54.             Try
  55.                 ServicePointManager.Expect100Continue = True
  56.                 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Ssl3
  57.                 client.DownloadFile(source, destinazione)
  58.                 lB.Items.Add("! " & destinazione & " ***SALVATO***") : lB.Refresh()
  59.             Catch er As Exception
  60.                 lB.Items.Add("? " & er.Message)
  61.                 Exit Sub
  62.             End Try
  63.         End Using
  64.         Me.Cursor = Cursors.Default
  65.         archivio = File.ReadAllLines(destinazione).ToList
  66.         Dim indice As Integer ' conterrà la posizione della prima estrazione su archivio da accodare su storico
  67.         If diffAnno = 0 Then ' primo anno accodato anche parziale
  68.             lB.Items.Add("! caricato in lista archivio: " & destinazione)
  69.             lB.Items.Add("! cerco la data " & ultimaData & " in  " & destinazione) : lB.Refresh()
  70.             Dim dataArchivio As Date
  71.             ' cerca la data
  72.             For indice = 2 To archivio.Count - 1
  73.                 If archivio(indice).Length > 10 AndAlso Date.TryParse(archivio(indice).Substring(0, 10), dataArchivio) Then
  74.                     If dataArchivio = ultimaData Then
  75.                         lB.Items.Add("= SI  : " & dataArchivio.ToShortDateString)
  76.                         Exit For ' data trovata
  77.                     Else
  78.                         lB.Items.Add("= NO: " & dataArchivio.ToShortDateString) : lB.Refresh()
  79.                     End If
  80.                 End If
  81.             Next indice
  82.             If dataArchivio <> ultimaData Then
  83.                 lB.Items.Add("? la data: " & ultimaData.ToShortDateString & " in " & destinazione & " NON ESISTE")
  84.                 Exit Sub
  85.             End If
  86.         Else ' anni successivi accodati su storico sempre dall'inizio
  87.             indice = archivio.Count - 1
  88.             lB.Items.Add("! aggiungo anno: " & (ultimaData.Year + diffAnno).ToString)
  89.             lB.TopIndex = lB.Items.Count - 1 ' rende visibile l'ultima riga
  90.             lB.Refresh()
  91.         End If
  92.         ' aggiungo le estrazioni con la formattazione di www.igt.it
  93.         For i = indice - 1 To 0 Step -1
  94.             Dim diviso() As String = archivio(i).Split(vbTab)
  95.             Dim dataDivisa As Date
  96.             If Date.TryParse(diviso(0), dataDivisa) Then
  97.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "BA" & vbTab & diviso(1) & vbTab & diviso(2) & vbTab & diviso(3) & vbTab & diviso(4) & vbTab & diviso(5))
  98.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "CA" & vbTab & diviso(6) & vbTab & diviso(7) & vbTab & diviso(8) & vbTab & diviso(9) & vbTab & diviso(10))
  99.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "FI" & vbTab & diviso(11) & vbTab & diviso(12) & vbTab & diviso(13) & vbTab & diviso(14) & vbTab & diviso(15))
  100.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "GE" & vbTab & diviso(16) & vbTab & diviso(17) & vbTab & diviso(18) & vbTab & diviso(19) & vbTab & diviso(20))
  101.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "MI" & vbTab & diviso(21) & vbTab & diviso(22) & vbTab & diviso(23) & vbTab & diviso(24) & vbTab & diviso(25))
  102.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "NA" & vbTab & diviso(26) & vbTab & diviso(27) & vbTab & diviso(28) & vbTab & diviso(29) & vbTab & diviso(30))
  103.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "PA" & vbTab & diviso(31) & vbTab & diviso(32) & vbTab & diviso(33) & vbTab & diviso(34) & vbTab & diviso(35))
  104.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "RM" & vbTab & diviso(36) & vbTab & diviso(37) & vbTab & diviso(38) & vbTab & diviso(39) & vbTab & diviso(40))
  105.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "RN" & vbTab & diviso(51) & vbTab & diviso(52) & vbTab & diviso(53) & vbTab & diviso(54) & vbTab & diviso(55))
  106.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "TO" & vbTab & diviso(41) & vbTab & diviso(42) & vbTab & diviso(43) & vbTab & diviso(44) & vbTab & diviso(45))
  107.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "VE" & vbTab & diviso(46) & vbTab & diviso(47) & vbTab & diviso(48) & vbTab & diviso(49) & vbTab & diviso(50))
  108.             End If
  109.         Next i
  110.     End Sub
  111. End Class


Sulle estrazioni aggiunte i numeri minori di 10 contengono lo zero davanti (non ti dovrebbe cambiare nulla)
Il file Storico.txt quando risalvato contiene CrLf a fine riga (non ti dovrebbe cambiare nulla)
Ho cercato di prevedere i possibili scenari, ma sicuramente mi è sfuggito qualcosa, sta a te verificare.

Spero che ti sia utile.

EDIT: Ho corretto un errore

PS. meno parole che non riguardano il codice ci sono e meglio è...


Carlo ha allegato un file: DownloadArchivio.zip (7953 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 03/02/2023 alle 22:21


in programmazione tutto è permesso
PM Quote
Avatar
Giacos71 (Normal User)
Rookie


Messaggi: 34
Iscritto: 06/05/2009

Segnala al moderatore
Postato alle 23:12
Giovedì, 02/02/2023
Testo quotato

Postato originariamente da nessuno:

Testo quotato

Postato originariamente da Giacos71:

Testo quotato

Postato originariamente da nessuno:

Testo quotato

Lo so molti storceranno il naso ma il lotto a me piace.



Allora fai ogni tanto le tue giocate senza però spacciare un programma informatico per qualcosa che possa "prevedere" le uscite.



Non capisco perchè sempre tutta questa polemica. Io non voglio spacciare niente ho solo chiesto non riesco a scaricare un file che potrebbe chiamarsi archivio.zip o pippo.zip il problemasarebbe lo sesso.
Io ero qui per chiedere aiuto e non per ricevere polemica, se lacosa a te non interessa basta non rispondere punto e basta. e con questa è già laseconda volta.



Veramente sei stato tu a dire "molti storceranno il naso" e io te l'ho confermato e ti ho anche spiegato il perché la penso così.

E lo farò la terza, quarta e quinta volta se serve ...



E invece penso che se tu non convidi ciò che faccio o non ti interessa minimamente aiutarmi, basta sempplicemente non intervenire. L'unica cosa che accetto è la parte dove andarci cauto con le giocate. Basta!

PM Quote
Avatar
Giacos71 (Normal User)
Rookie


Messaggi: 34
Iscritto: 06/05/2009

Segnala al moderatore
Postato alle 0:01
Venerdì, 03/02/2023
Postato originariamente da Carlo:

Purtroppo non so perché da .Net anche con il protocollo Tls12 il certificato per scaricare https://www.igt.it/STORICO_ESTRAZIONI_LOTTO/storico.zip non è valido, speriamo che qualcuno ce lo spieghi.
Personalmente non ho problemi da .Net a scaricare files da altri siti o dai miei con il protocollo Tls12

Non capisco nemmeno io ed internet sembra ci siano poche informazioni  a riguardo, non capisco se l certificato dipenda da me o dal server. Comunque ho scoperto che una volta immesso il link in questo caso https://www.igt.it/ e facendo clck sul lucchetto nella barra degli indirizzi compare un men dal quale si può esportare il certificato (igt.cert). Però non so se si può passare questo certificato al programma per poter dialogare in modo corretto e sicuro col server. Se fosse che si può si potrebbe creare una procedura che verifica se chiede  un certificato x e lo usa nell'applicazione, anche perchè penso che il certificato non sia uguale per tutti. Almeno questa è l'idea.

Ho scritto due righe che ti potrebbero tornare utili.

Alla faccia delle due righe! E ben molto di più, di questo te ne sono grato anche se io volevo fare funzionare il mio e il fatto che non ci sia riuscito mi fa rabbia. Da quanto ho capito il codice che mi hai messo scarica le estrazioni dal link che mi hai messo tu e le accoda nel file scaricato (a mano e unzippato) dal sito che voglio io giusto? Certo che hai fatto un lavoraccio (nel senso) grande,  e tutto questo per scaricare  un file. Non voglio sembrare un chiede codice come almercato (giàavuto esperienza in un post precedente), difatti il mio obbiettivo era quello di riuscire a scaricare il file zip. Comunque grazie.

Metti nella caretella C:\Downloads\ il file Storico.txt scaricato da igt e dezippato a mano.
Lancia il programma DownloadArchivio.exe dopo averlo estratto dallo zip allegato qui sotto.

Il programma cerca nel file Storico.txt l'ultima data presente e ne usa l'anno per scaricare da lottologia il file ArchivioAAAA.txt corrispondente.
Scaricato il file ArchivioAAAA.txt, le date non presenti in Storico.txt verranno aggiunte con la giusta formattazione.

Il programma è anche capace di scaricare più anni, puoi provare cancellando alcune estrazioni da Storico.txt

ATTENZIONE Non controlla se nella data ci sono tutte le estrazioni, se cancelli delle estrazioni da "Storico.txt" lo devi fare sempre dall'estrazione di BA in poi, Il file Storico.txt deve sempre terminare con l'estrazione di VE e suoi estratti, non deve contenere righe vuote alla fine.

Il programma in una listbox annota tutte le fasi, utile per capire il progresso e il contenuto delle variabili, il punto esclamativo indica che si può procedere, il punto interrogativo indica un errore e il programma termina.

Aggiungo il codice completo, la listbox viene aggiunta in runtime
Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net
  2. Imports System.IO
  3.  
  4. Public Class Form1
  5.  
  6.     Dim lB As New ListBox
  7.     Dim storico As List(Of String)
  8.     Dim percorsoStorico As String = "C:\Downloads\Storico.txt"
  9.     Dim diffAnno As Integer
  10.     Dim ultimaData As Date
  11.  
  12.     Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
  13.         lB.Dock = DockStyle.Fill
  14.         Me.Controls.Add(lB)
  15.         If File.Exists(percorsoStorico) Then
  16.             lB.Items.Add("! trovato " & percorsoStorico)
  17.             storico = File.ReadAllLines(percorsoStorico).ToList
  18.             lB.Items.Add("! caricato in lista storico: " & percorsoStorico)
  19.             Dim indiceUltimaData As Integer
  20.  
  21.             Do ' accoda un anno o più
  22.                 indiceUltimaData = storico.Count - 1
  23.                 If storico.Last.Length > 10 AndAlso Date.TryParse(storico.Last.Substring(0, 10), ultimaData) Then
  24.                     lB.Items.Add("! ultima data in Storico.txt = " & ultimaData.ToShortDateString & " Riga: " & indiceUltimaData) : lB.Refresh()
  25.                 Else
  26.                     lB.Items.Add("? L'ULTIMA RIGA E' VUOTA E/O NON CONTIENE UNA DATA")
  27.                     Exit Sub
  28.                 End If
  29.                 aggiungi()
  30.                 diffAnno = 1 ' passa al prossimo anno
  31.                 ' visualizzo le estrazioni accodate, utile per controlli
  32.                 For i = indiceUltimaData + 1 To storico.Count - 1
  33.                     lB.Items.Add("! Add " & storico(i))
  34.                 Next
  35.             Loop While Today.Year > ultimaData.Year ' esce per eccesso di anno senza incremento
  36.         Else
  37.             lB.Items.Add("? " & percorsoStorico & " NON ESISTE")
  38.             Exit Sub
  39.         End If
  40.  
  41.         File.WriteAllLines(percorsoStorico, storico)
  42.         lB.Items.Add("! Storico aggiornato " & percorsoStorico & " con " & storico.Count & " righe")
  43.         lB.TopIndex = lB.Items.Count - 1 ' rende visibile l'ultima riga
  44.     End Sub
  45.  
  46.     Sub aggiungi()
  47.         If Today.Year < ultimaData.Year + diffAnno Then Exit Sub ' esce per eccesso di anno con incremento
  48.         Dim archivio As List(Of String)
  49.         Dim source As String = "https://www.lottologia.com/lotto/archivio-estrazioni/?as=TXT&year=" & (ultimaData.Year + diffAnno).ToString
  50.         Dim destinazione As String = Path.Combine(Path.GetDirectoryName(percorsoStorico), "Archivio" & (ultimaData.Year + diffAnno).ToString & ".txt")
  51.         lB.Items.Add("! carico archivio: " & source) : lB.Refresh()
  52.         Me.Cursor = Cursors.WaitCursor
  53.         Using client As New WebClient()
  54.             Try
  55.                 ServicePointManager.Expect100Continue = True
  56.                 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 Or SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Ssl3
  57.                 client.DownloadFile(source, destinazione)
  58.                 lB.Items.Add("! " & destinazione & " ***SALVATO***") : lB.Refresh()
  59.             Catch er As Exception
  60.                 lB.Items.Add("? " & er.Message)
  61.                 Exit Sub
  62.             End Try
  63.         End Using
  64.         Me.Cursor = Cursors.Default
  65.         archivio = File.ReadAllLines(destinazione).ToList
  66.         Dim indice As Integer ' conterrà la posizione della prima estrazione su archivio da accodare su storico
  67.         If diffAnno = 0 Then ' primo anno accodato anche parziale
  68.             lB.Items.Add("! caricato in lista archivio: " & destinazione)
  69.             lB.Items.Add("! cerco la data " & ultimaData & " in  " & destinazione) : lB.Refresh()
  70.             Dim dataArchivio As Date
  71.             ' cerca la data
  72.             For indice = 2 To archivio.Count - 1
  73.                 If archivio(indice).Length > 10 AndAlso Date.TryParse(archivio(indice).Substring(0, 10), dataArchivio) Then
  74.                     If dataArchivio = ultimaData Then
  75.                         lB.Items.Add("= SI  : " & dataArchivio.ToShortDateString)
  76.                         Exit For ' data trovata
  77.                     Else
  78.                         lB.Items.Add("= NO: " & dataArchivio.ToShortDateString) : lB.Refresh()
  79.                     End If
  80.                 End If
  81.             Next indice
  82.             If dataArchivio <> ultimaData Then
  83.                 lB.Items.Add("? la data: " & ultimaData.ToShortDateString & " in " & destinazione & " NON ESISTE")
  84.                 Exit Sub
  85.             End If
  86.         Else ' anni successivi accodati su storico sempre dall'inizio
  87.             indice = archivio.Count - 1
  88.             lB.Items.Add("! aggiungo anno: " & (ultimaData.Year + diffAnno).ToString)
  89.             lB.TopIndex = lB.Items.Count - 1 ' rende visibile l'ultima riga
  90.             lB.Refresh()
  91.         End If
  92.         ' aggiungo le estrazioni con la formattazione di www.igt.it
  93.         For i = indice - 1 To 0 Step -1
  94.             Dim diviso() As String = archivio(i).Split(vbTab)
  95.             Dim dataDivisa As Date
  96.             If Date.TryParse(diviso(0), dataDivisa) Then
  97.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "BA" & vbTab & diviso(1) & vbTab & diviso(2) & vbTab & diviso(3) & vbTab & diviso(4) & vbTab & diviso(5))
  98.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "CA" & vbTab & diviso(6) & vbTab & diviso(7) & vbTab & diviso(8) & vbTab & diviso(9) & vbTab & diviso(10))
  99.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "FI" & vbTab & diviso(11) & vbTab & diviso(12) & vbTab & diviso(13) & vbTab & diviso(14) & vbTab & diviso(15))
  100.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "GE" & vbTab & diviso(16) & vbTab & diviso(17) & vbTab & diviso(18) & vbTab & diviso(19) & vbTab & diviso(20))
  101.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "MI" & vbTab & diviso(21) & vbTab & diviso(22) & vbTab & diviso(23) & vbTab & diviso(24) & vbTab & diviso(25))
  102.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "NA" & vbTab & diviso(26) & vbTab & diviso(27) & vbTab & diviso(28) & vbTab & diviso(29) & vbTab & diviso(30))
  103.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "PA" & vbTab & diviso(31) & vbTab & diviso(32) & vbTab & diviso(33) & vbTab & diviso(34) & vbTab & diviso(35))
  104.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "RM" & vbTab & diviso(36) & vbTab & diviso(37) & vbTab & diviso(38) & vbTab & diviso(39) & vbTab & diviso(40))
  105.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "RN" & vbTab & diviso(51) & vbTab & diviso(52) & vbTab & diviso(53) & vbTab & diviso(54) & vbTab & diviso(55))
  106.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "TO" & vbTab & diviso(41) & vbTab & diviso(42) & vbTab & diviso(43) & vbTab & diviso(44) & vbTab & diviso(45))
  107.                 storico.Add(dataDivisa.Year & "/" & dataDivisa.Month.ToString("00") & "/" & dataDivisa.Day.ToString("00") & vbTab & "VE" & vbTab & diviso(46) & vbTab & diviso(47) & vbTab & diviso(48) & vbTab & diviso(49) & vbTab & diviso(50))
  108.             End If
  109.         Next i
  110.     End Sub
  111. End Class


Sulle estrazioni aggiunte i numeri minori di 10 contengono lo zero davanti (non ti dovrebbe cambiare nulla)
Il file Storico.txt quando risalvato contiene CrLf a fine riga (non ti dovrebbe cambiare nulla)
Ho cercato di prevedere i possibili scenari, ma sicuramente mi è sfuggito qualcosa, sta a te verificare.

Spero che ti sia utile.

EDIT: Ho corretto un errore

PS. meno parole che non riguardano il codice ci sono e meglio è...

Se ti riferisci che ho scritto troppe parole e poco codice chiedo scusa ma mi dovevo pure spiegare, se invece ti riferisci a nessuno che si permette di giudicarmi mi spiace ma non mi sta bene. Io dico solo se non condividi le mie idee o non ti va di aiutarmi semplicemente ignorami, se invece semplicimente entri per farmi le tue osservazioni personali mi spiace ma proprio no. Anche perchè se io voglio creare un piccola applicazione per il gioco del lotto non voglio proprio obbligare nessuno a seguirmi o credere alle mie ideologie. Io voglio semplicemte risolve un mio problema di programmazione e ho chiesto aiuto. Poi se vuole uno mi aiuta oppure no, di certo non mi offendo. Anche perchè questa sarebbe la seconda volta, non sarebbe più semplice ignorarmi? Dicerto non sono arrivato alla tenera eta di 52 anni per farmi mancare di rispetto da nessuno, e io non ha dato fastidio a nessuno!

Bene ora chiudo qua il discorso e se ho frainteso ho offeso qualcuno chiedo scusa.

PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo