Differenze tra le versioni di "Acquisire il codice HTML di una pagina web"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
L'acquisizione del codice HTML di una pagina web può essere effettuata mediante almeno le due modalità appresso descritte.
+
L'acquisizione del codice HTML di una pagina web può essere effettuata mediante le modalità appresso descritte.
  
 +
 +
=Uso delle sole risorse di Gambas=
 +
Vi sono due modalità che prevedono l'uso delle sole risorse di Gambas.
  
 
==Uso dei Componenti ''gb.net'' e ''gb.net.curl''==
 
==Uso dei Componenti ''gb.net'' e ''gb.net.curl''==
Riga 78: Riga 81:
 
    
 
    
 
  '''End'''
 
  '''End'''
 +
 +
 +
=Uso delle funzioni esterne della libreria ''Libcurl''=
 +
'''Libcurl''' è una libreria gratuita lato-client di trasferimento dati con la sintassi URL, capace di supportare diversi protocolli.
 +
 +
Per poter fruire in Gambas delle risorse della libreria ''Libcurl'', è necessario avere installata nel sistema e richiamare la libreria dinamica condivisa: "''libcurl.so''"
 +
 +
 +
Mostriamo un esempio pratico:
 +
Library "libcurl"
 +
 +
Private Const CURLOPT_WRITEDATA As Integer = 10001
 +
Private Const CURLOPT_URL As Integer = 10002
 +
   
 +
<FONT Color=gray>' ''CURL *curl_easy_init(void)''
 +
' ''Start a libcurl easy session.''</font>
 +
Private Extern curl_easy_init() As Pointer
 +
 +
<FONT Color=gray>' ''CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...)''
 +
' ''Set options for a curl easy handle''</font>
 +
Private Extern curl_easy_setopt(curl As Pointer, optionI As Integer, optionP As Pointer) As Integer
 +
 
 +
<FONT Color=gray>' ''CURLcode curl_easy_perform(CURL *curl)''
 +
' ''Perform a blocking file transfer.''</font>
 +
Private Extern curl_easy_perform(curl As Pointer) As Pointer
 +
 +
<FONT Color=gray>' ''const char *curl_easy_strerror(CURLcode)''
 +
' ''Turn a CURLcode value into the equivalent human readable error string.''</font>
 +
Private Extern curl_easy_strerror(CURLcode As Integer) As String
 +
 +
<FONT Color=gray>' ''void curl_easy_cleanup(CURL *curl)''
 +
' ''End a libcurl easy handle.''</font>
 +
Private Extern curl_easy_cleanup(curl As Pointer)
 +
 +
 +
Library "libc:6"
 +
 +
<FONT Color=gray>' ''FILE *fopen (const char *__restrict __filename, const char *__restrict __modes)''
 +
' ''Open a file and create a new stream for it.''</font>
 +
Private Extern fopen(__filename As String, __modes As String) As Pointer
 +
 +
<FONT Color=gray>' ''int fclose (FILE *__stream)''
 +
' ''Close STREAM.''</font>
 +
Private Extern fclose(__stream As Pointer) As Integer
 +
 +
 +
'''Public''' Sub Main()
 +
 +
  Dim cu, url, pagina As Pointer
 +
  Dim file_finale As String
 +
  Dim ris As Integer
 +
 
 +
<FONT Color=gray>' ''Imposta l'indirizzo web del file da scaricare:''</font>
 +
  url = Alloc("<FONT Color=gray>''http:&#047;/indirizzo/della/pagina/web''</font>")
 +
 
 +
<FONT Color=gray>' ''Imposta il percorso del nuovo file generato con i dati html scaricati della pagina web:''</font>
 +
  file_finale = "<FONT Color=gray>''/percorso/del/nuovo/file.html''</font>"
 +
   
 +
<FONT Color=gray>' ''Inizilizza la libreria ''Libcurl':''</font>
 +
  cu = curl_easy_init()
 +
  If cu = 0 Then Error.Raise("Impossibile inizializzare la libreria 'curl' !")
 +
 
 +
  curl_easy_setopt(cu, CURLOPT_URL, url)
 +
   
 +
<FONT Color=gray>' ''Apre in scrittura il percorso del nuovo file da salvare:''</font>
 +
  pagina = fopen(file_finale, "wb")
 +
   
 +
<FONT Color=gray>' ''Scrive i dati html scaricati della pagina web nella variabile handle per la gestione del nuovo file da salvare:''</font>
 +
  curl_easy_setopt(cu, CURLOPT_WRITEDATA, pagina)
 +
 
 +
<FONT Color=gray>' ''Scrive il nuovo file:''</font>
 +
  ris = curl_easy_perform(cu)
 +
  If ris <> 0 Then Error.Raise("Errore nella scrittura del file: " & curl_easy_strerror(i))
 +
   
 +
   
 +
<FONT Color=gray>' ''Va in chiusura e libera tutta la memoria precedentemente allocata:''</font>
 +
  fclose(pagina)
 +
  Free(url)
 +
  curl_easy_cleanup(cu)
 +
 
 +
'''End'''
 +
 +
 +
===Riferimenti===
 +
* https://curl.haxx.se/libcurl/
 +
* http://libcurl.org/
  
  

Versione delle 14:01, 2 set 2016

L'acquisizione del codice HTML di una pagina web può essere effettuata mediante le modalità appresso descritte.


Uso delle sole risorse di Gambas

Vi sono due modalità che prevedono l'uso delle sole risorse di Gambas.

Uso dei Componenti gb.net e gb.net.curl

Si potrà innanzitutto acquisire l'intero codice HTML di una pagina web, utilizzando i Componenti gb.net e gb.net.curl nel modo che segue: [ Nota 1 ]

Public mioHttp As NEW HttpClient As "mioHttp"  
Public stringa As String  
 

Public Sub Button1_Click()  
    
  inviaRichiesta  
 
End  
 

Public Sub inviaRichiesta()  
                         
  With mioHttp
    .URL = "http://www.pagina_web_da_caricare"           
    .Timeout = 15  
    .Get()
  End With
  
End  
 

Public Sub mioHttp_Read()  
  
 Dim sBuf As String  
   
  Wait
 
  IF Lof(mioHttp) THEN   
    Read #mioHttp, sBuf, Lof(mioHttp)  
    stringa = stringa & sBuf  
  Endif

End  
 

Public Sub mioHttp_Finished()
 
 Dim p, s As String  
 Dim i As Integer  
        
  Label1.Text = ("Pagina scaricata !")  
   
  Wait        
       
' la variabile stringa contiene la pagina html e viene visualizzata in una textarea:
   TextArea1.Text=stringa
       
   mioHttp.Close

End


Uso dell'oggetto WebView

Per poter utilizzare l'oggetto WebView, bisognerà attivare anche il Componente gb.qt4.webkit.
Verrà innanzitutto caricata la pagina web con la proprietà .Url dell'oggetto WebView. Successvamente si acquisirà il codice html di detta pagina mediante la proprietà .HTM:

Public Sub Form_Open()  
    
  WebView1.Url = "http://www.pagina_web_da_caricare"  
   
End  
 
' Quando la pagina web è stata completamente caricata dalla "WebView",
' viene sollevato questo evento:
Public Sub WebView1_Load()  
 
Dim s As String  
  
' Carichiamo nella variabile di tipo stringa il codice HTML della pagina web:
  s = WebView1.HTML
    
  Print s  
 
End


Uso delle funzioni esterne della libreria Libcurl

Libcurl è una libreria gratuita lato-client di trasferimento dati con la sintassi URL, capace di supportare diversi protocolli.

Per poter fruire in Gambas delle risorse della libreria Libcurl, è necessario avere installata nel sistema e richiamare la libreria dinamica condivisa: "libcurl.so"


Mostriamo un esempio pratico:

Library "libcurl"

Private Const CURLOPT_WRITEDATA As Integer = 10001
Private Const CURLOPT_URL As Integer = 10002
   
' CURL *curl_easy_init(void)
' Start a libcurl easy session.
Private Extern curl_easy_init() As Pointer

' CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...)
' Set options for a curl easy handle
Private Extern curl_easy_setopt(curl As Pointer, optionI As Integer, optionP As Pointer) As Integer
 
' CURLcode curl_easy_perform(CURL *curl)
' Perform a blocking file transfer.
Private Extern curl_easy_perform(curl As Pointer) As Pointer

' const char *curl_easy_strerror(CURLcode)
' Turn a CURLcode value into the equivalent human readable error string.
Private Extern curl_easy_strerror(CURLcode As Integer) As String

' void curl_easy_cleanup(CURL *curl)
' End a libcurl easy handle.
Private Extern curl_easy_cleanup(curl As Pointer)


Library "libc:6"

' FILE *fopen (const char *__restrict __filename, const char *__restrict __modes)
' Open a file and create a new stream for it.
Private Extern fopen(__filename As String, __modes As String) As Pointer

' int fclose (FILE *__stream)
' Close STREAM.
Private Extern fclose(__stream As Pointer) As Integer


Public Sub Main()

 Dim cu, url, pagina As Pointer
 Dim file_finale As String
 Dim ris As Integer
 
' Imposta l'indirizzo web del file da scaricare:
  url = Alloc("http://indirizzo/della/pagina/web")
  
' Imposta il percorso del nuovo file generato con i dati html scaricati della pagina web:
  file_finale = "/percorso/del/nuovo/file.html"
    
' Inizilizza la libreria Libcurl':
  cu = curl_easy_init()
  If cu = 0 Then Error.Raise("Impossibile inizializzare la libreria 'curl' !")
  
  curl_easy_setopt(cu, CURLOPT_URL, url)
   
' Apre in scrittura il percorso del nuovo file da salvare:
  pagina = fopen(file_finale, "wb")
   
' Scrive i dati html scaricati della pagina web nella variabile handle per la gestione del nuovo file da salvare:
  curl_easy_setopt(cu, CURLOPT_WRITEDATA, pagina)
  
' Scrive il nuovo file:
  ris = curl_easy_perform(cu)
  If ris <> 0 Then Error.Raise("Errore nella scrittura del file: " & curl_easy_strerror(i))
   
   
' Va in chiusura e libera tutta la memoria precedentemente allocata:
  fclose(pagina)
  Free(url)
  curl_easy_cleanup(cu)
  
End


Riferimenti



Note

[1] Il codice è stato proposto dall'utente fsurfing del forum del sito www.gambas-it.org.