Gambas-it

Gambas3 => Programmazione => Topic aperto da: Devil78 - 08 Luglio 2014, 19:08:38

Titolo: [Risolto] Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 08 Luglio 2014, 19:08:38
Ciao a tutti, come da titolo, avrei necessità di capire se esiste un modo alternativo per il download di un file... leggendo le discussioni sull'uso di wget mediante il comando shell, pare vi siano problemi ! Grazie !
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 08 Luglio 2014, 19:18:37
Ti segnalo questa pagina della nostra WIKI:

http://www.gambas-it.org/wiki/index.php?title=Scaricare_un_file_da_internet
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 10 Luglio 2014, 23:14:20
Grazie Vuott, ho usato la procedura descritta nel viki ma nada !!!
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 11 Luglio 2014, 00:17:41
.... ma nada !!!
Cioè non sei riuscito a scaricare il file ?

Puoi qui indicare l'indirizzo web del file che intendi scaricare ?
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 11 Luglio 2014, 23:27:44
Certo che si!

http://www.pc-freak.net/files/doom-wad-files/Plutonia.wad (http://www.pc-freak.net/files/doom-wad-files/Plutonia.wad)
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 11 Luglio 2014, 23:33:25
Eh.... sono ben 16 Mb da scaricare ! :-X  ...magari ci vuole un po' di tempo, e può dunque sembrare che non funziona.   :-\
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 11 Luglio 2014, 23:38:20
sostituisci Plutonia.wad con Doom1.WAD, è un file da 4 Mega.

ma che comando hai usato ?!? Wget o quello proposto nel viki, magari uso una progress bar testare l'andamento del download!!
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 11 Luglio 2014, 23:44:24
ma che comando hai usato ?!? Wget o quello proposto nel viki,

Pensavo a questa:
http://www.gambas-it.org/wiki/index.php?title=Scaricare_una_immagine_da_un_sito_internet#Procedura_diretta
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 11 Luglio 2014, 23:47:59
sostituisci Plutonia.wad con Doom1.WAD, è un file da 4 Mega.
Ti comunico di aver scaricato agevolmente e coerentemente con il codice suggerito:
http://www.gambas-it.org/wiki/index.php?title=Scaricare_una_immagine_da_un_sito_internet#Procedura_diretta
il file di 4,2 Mb: Doom1.WAD
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 11 Luglio 2014, 23:55:37
Ma questa procedura ti apre il browser per scaricare il file ?!?
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 12 Luglio 2014, 00:05:08
Ma questa procedura ti apre il browser per scaricare il file ?!?
La prima procedura descritta nella pagina della WIKI non apre il  " browser ".

Il browser viene aperto dalla seconda procedura descritta nella medesima pagina (Procedura indiretta):
http://www.gambas-it.org/wiki/index.php?title=Scaricare_una_immagine_da_un_sito_internet#Procedura_indiretta
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 12 Luglio 2014, 23:59:53
Ciao e grazie vuott, potresti farmi un esempio con il file che ti ho indicato?
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 13 Luglio 2014, 02:41:51
Ciao e grazie vuott, potresti farmi un esempio con il file che ti ho indicato?

Certamente.
Poniamo sul Form una Label ed un Button. Attiviamo preliminarmente anche i componenti gb.net e gb.net.curl .
Per avviare lo scarico del file dovremo cliccare sul Button.
Codice: gambas [Seleziona]
Private myhttp As New HttpClient As "myhttp"  
Private stringa As String


Public Sub Button1_Click()

' invia_richiesta al server per scaricare il file:
 myhttp.URL = "http://www.pc-freak.net/files/doom-wad-files/Doom1.WAD"
  
 myhttp.Timeout = 15  
 myhttp.Get()
    
End  
  

Public Sub myhttp_Read()  
    
 Dim sBuf As String  
    
' Andiamo a leggere il flusso di dati del file:
   If Lof(MyHTTP) Then  
     Read #MyHTTP, sBuf, Lof(MyHTTP)
     stringa = stringa & sBuf
   End If

End


Public Sub MyHTTP_Finished()  
    
  Label1.Text = ("File scaricato !")  
      
  Wait  

  MyHTTP.Close  
          

' Ricreiamo il file:
  File.Save("/tmp/Doom1.WAD", stringa)

End



Accendiamo comunque un cero a San fsurfing.
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 13 Luglio 2014, 14:52:44
Questa è la procedura spiegata nel viki, quella che ho usato io e che non mi ha dato il risultato sperato. Credo che il motivo sia dovuto al fatto che L'url del file veniva generato da un radio button che cambiava il contenuto di myhttp.URL
La cosa non funzionava e dava errori insoliti, tipo a volte mi diceva che il file era inesistente, cosa non vera perché:
1) Controllavo che l'url fosse corretto
2) Copiavo ed incollavo l'url dopo aver provato a scaricare il file tramite wget da un terminale.

Comunque l'esempio pratico al quale facevo riferimento era quello relativo al metodo diretto. Credo di non aver capito come funzioni... anche perché, leggendo la console di gambas, noto che l'output recita il seguente messaggio:

Citazione
xdg-open - opens a file or URL in the user's preferred application

Synopsis

xdg-open { file | URL }

xdg-open { --help | --manual | --version }

Use 'man xdg-open' or 'xdg-open --manual' for additional info.

Preciso che il componente desktop.gb è stato attivato !!!
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 13 Luglio 2014, 16:19:16
Io ti ho riportato la modalità che nella pagina della wiki di Gambas-it viene denominata "procedura diretta". In tale procedura non v'è necessità di attivare il componente gb.desktop.

Ad ogni modo non ho capito bene  :-\ se hai provato il codice che t'ho sopra passato, e se ha funzionato.
Titolo: u
Inserito da: Devil78 - 13 Luglio 2014, 19:14:48
Allora, ho fatto un po di confusione. Questa procedura non ha funzionato, o, ad ogni modo non ho trovato il file scaricato nella cartella di destinazione. analizzando l'esempio da te proposto ho visto che ricreavi il file nella cartella /temp ed io li non sono andato a cercare! Quindi proverò con questo metodo andando a cercare il file scaricato in quella cartella.

Forse risolvo così :)

Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 23 Luglio 2014, 20:41:57
il mio problema è questo: Devo scegliere il file da scaricare mediante un radio button, così catturo in una stringa quello che sarà l'url del file da scaricare...

Esempio:
Codice: [Seleziona]
Public Sub RadioButton3_Click()

  Sdnldwad = "www.pc-freak.net/files/doom-wad-files/Tnt.wad"

Quindi per scaricare questo file, seguendo la guida nel wiki nonché il tuo esempio srivo:

Codice: [Seleziona]
myhttp.URL = Sdnldwad

ma, purtroppo, ricevo l'errore
Citazione
Unknown Protocol
come si evince dall'immagine allegata.

Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 23 Luglio 2014, 20:56:24
il mio problema è questo: Devo scegliere il file da scaricare mediante un radio button, così catturo in una stringa quello che sarà l'url del file da scaricare...

ma, purtroppo, ricevo l'errore
Citazione
Unknown Protocol


Strano... a me funziona perfettamente  :-\ : ho scaricato quel file di 18,2 Mbyte.

1) clicco nel RadioButton, facendo apparire la pallina nera nel cerchietto bianco;
2) clicco quindi sul Button.
Il problema da te esposto mi sorge se non clicco preveliminarmente nel RadioButton.

Il codice da me adottato:
Codice: gambas [Seleziona]
Private myhttp As New HttpClient As "myhttp"    
Private stringa As String  
Private Sdnldwad As String
        
    
Public Sub RadioButton1_Click()

  Sdnldwad = "www.pc-freak.net/files/doom-wad-files/Tnt.wad"

End
      

Public Sub Button1_Click()  

    Print "Scarico file da: "; Sdnldwad
    
    ' invia_richiesta al server per scaricare il file:  
    myhttp.URL = Sdnldwad
      
    myhttp.Timeout = 15    
    myhttp.Get()  
          
End    
      
      
Public Sub myhttp_Read()    
          
    Dim sBuf As String    
        
    ' Andiamo a leggere il flusso di dati del file:  
      If Lof(MyHTTP) Then    
        Read #MyHTTP, sBuf, Lof(MyHTTP)  
        stringa = stringa & sBuf  
      End If  
      
End  


Public Sub MyHTTP_Finished()    
        
     Label1.Text = ("File scaricato !")    
            
     Wait    
      
     MyHTTP.Close    

    ' Ricreiamo il file:  
     File.Save("/tmp/Doom1.WAD", stringa)  
      
End  
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 23 Luglio 2014, 21:04:31
Grazie Vuott

Ho provato così:

La scelta del radio button imposta il parametro myhttp.URL direttamente senza usare stringhe
Codice: [Seleziona]
Public Sub RadioButton1_Click()

  myhttp.URL = "www.pc-freak.net/files/doom-wad-files/Doom1.WAD"

End

Premendo il pulsante Start Download non ricevo più l'errore, mi chiedo se realmente il comando viene eseguito... c'è modo di verificarlo ?!?
Provando nella cartella di destinazione non trovo il file, nemmeno in quella /temp.

Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 23 Luglio 2014, 21:16:19
La scelta del radio button imposta il parametro myhttp.URL direttamente senza usare stringhe
Mi sembra una limitazione, però ! A me funziona regolarmente.  :-\




Premendo il pulsante Start Download non ricevo più l'errore, mi chiedo se realmente il comando viene eseguito... c'è modo di verificarlo ?!?
Provando nella cartella di destinazione non trovo il file, nemmeno in quella /temp.

Io ho dovuto attendere un po' per ottenere loscarico dei 18 megabyte.
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 23 Luglio 2014, 21:57:32
Ho risolto, col metodo usato sopra. I files sono regolarmente scaricati, ho dovuto modificare il tutto così da poter cambiare il nome in modo appropriato automaticamente.

Codice: [Seleziona]
Public Sub RadioButton1_Click()

  myhttp.URL = "www.pc-freak.net/files/doom-wad-files/Doom1.WAD"
 sdwad = "Doom.wad"
End


Codice: [Seleziona]
Public Sub MyHTTP_Finished()
 
  Wait
  MyHTTP.Close
  File.Save(sdnldpath & sdwad, stringa)
 
End

Unico neo, a questo punto, il tempo d'attesa...
Ho notato che esiste una funzione myhttp_Progress che gambas suggerisce durante la digitazione... potrebbe essere utile per ricavare informazioni riguardante il download in modo da verificare lo stato del download con una progress bar? Grazie
Titolo: Re: [Risolto] Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 23 Luglio 2014, 22:01:17
Intanto ho modificato il titolo e aggiunto Risolto, casomai, per la progress bar, apro un altro tread !!! Grazie Cmq a tutti !!!
Titolo: Re: Scaricare Files senza l'uso di wget
Inserito da: vuott - 23 Luglio 2014, 22:31:34
Ho notato che esiste una funzione myhttp_Progress che gambas suggerisce durante la digitazione... potrebbe essere utile per ricavare informazioni riguardante il download in modo da verificare lo stato del download con una progress bar?
Fai la prova.  :-\


Titolo: Re: [Risolto] Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 24 Luglio 2014, 11:11:56
Ma la procedura qui descritta scarica il file in un qualche posto, se riuscissi a capire dove, potrei attingere alla porzione scaricata e rilevando i dati neessari per impostare la progress bar. Altrimenti non so proprio come procedere.
Titolo: Re: [Risolto] Scaricare Files senza l'uso di wget
Inserito da: vuott - 24 Luglio 2014, 14:38:24
...scarica il file in un qualche posto, se riuscissi a capire dove
Cioè tu dici che avere, ad esempio, questo indirizzo
 
Codice: [Seleziona]
www.pc-freak.net/files/doom-wad-files/Doom1.WAD
non è sufficiente ?
Titolo: Re: [Risolto] Scaricare Files senza l'uso di wget
Inserito da: Devil78 - 24 Luglio 2014, 16:23:01
Credo di no, perché la progress bar dovrebbe visualizzare la porzione di file scaricata non quella presente sul server che, comunque, serve per confrontare la differenza il file remoto con quello scaricato. Mi spiego meglio. Quando eseguo il programma controllo costantemente il path dove voglio che il file venga scritto ma, non so per quale motivo, appare solo nell'istante in cui assume la dimensione finale. Quindi, o la procedura scarica il file da qualche altra parte e poi, a download ultimato, lo sposta nel path che ho impostato, oppure crea un file nascosto, con qualche estensione tipo xxx.part come fanno i browser tipo firefox e poi lo rende visibile. Analizzando però il codice, non essendo programmatore, mi sforzo a capire cosa fa per creare il suddetto file.

Esaminando questa porzione di codice direi che:

Codice: [Seleziona]
Public Sub myhttp_Read()      
           
   Dim sBuf As String     
         
   ' Andiamo a leggere il flusso di dati del file:   
     If Lof(MyHTTP) Then       
       Read #MyHTTP, sBuf, Lof(MyHTTP)   
       stringa = stringa & sBuf   
     End If   
       
End   
 

Si dichiara una matrice sBuf che conterrà dei caratteri alfanumerici. Probabilmente  il contenuto di questa matrice sarà il flusso del file che sto scaricando. Secondo me, è qui che potrei attingere ai dati necessari perché una progress bar avanzi tenendo conto dei dati che sBuf ha accumulato. Un esempio potrebbe essere quello di misurare i byte che la stessa occupa, confrontarli con quelli del file che sto scaricando, per verificare la percentuale rimanente.... solo non so come procedere in questo senso. Ma ci proverò giusto per acquisire maggior dimestichezza !!!