Newsgroup: it.comp.lang.c++
Titolo: Aiuto a un principiante intraprendente

C'è qualcuno che può darmi una dritta su come realizzare velocemente un
'qualcosa' che prelevi da una pagina html dei valori ( che cambiano ogni 20
min) e a visualzzarmeli a vide con una aggiornamento diciamo ogni 10 min
in un' applet, in una text box,...?)
Conosco il Visual Basic e un po di C++ Visual ma niente html e java.
Ovviamente chido solo una dritta.
Grazie

...

Le possibili soluzioni dipendono dal tipo di dati e dalla visualizzazione
degli stessi.
Se hai dei dati che debbono essere visualizzati in modo particolare
(grafici...) e l'update degli stessi deve essere (per quanto consentito dal
mezzo di trasmissione) istantaneo, la soluzione migliore dovrebbe essere
un'applet java che parla con un server (magari anch'esso Java) che segnala
la necessità di aggiornare i dati (i dati stessi potrebbero eventualmente
essere letti da un database o un file sequenziale, per semplificare le
cose...).
Se i dati devono essere semplicemente visualizzati con gli strumenti che
fornisce l'HTML (testo, tabelle, e immagini) e l'update non deve essere
necessariamente istantaneo, puoi utilizzare javascript e impostare un timer
che rilegga la tua pagina ogni X minuti e far creare la pagina suddetta da
programma CGI (se utilizzi Internet Information Server e leggi i dati da un
database, puoi utilizzare delle ActiveServerPages); Il secondo approccio è
decisamente più semplice; per chi conosce uno o più linguaggi di
programmazione non dovrebbe essere difficile imparare qualche nozione di
HTML e javascript (anche le ASP sono realizzate in un linguaggio script
abbastanza vicino al VB).
---
Valter Minute
min...@fortech.it
 (the reply address of this message is invalid)
---
Are you looking for a good freeware ScreenSaver? Try FOYD!
http://hotfiles.zdnet.com/cgi-bin/texis/swlib/hotfiles/getit.bin?fcode=000PZ
0
if you want, I can send you the (free) C++ source code.

Ovviamente chido solo una dritta.
Per fare un qualcosa "ogni tot minuti", puoi usare un controllo
Timer in Visual Basic, o, equivalentemente, l'API SetTimer per
C o C++, eccetera.  Questo non dovrebbe comunque essere
un problema.  Veniamo dunque, piuttosto, allo specifico
"qualcosa" che vuoi fare: "prelevare da una pagina HTML
dei valori".
Se hai Visual Basic, almeno Professional Edition, e i dati sono
nella pagina HTML in un formato "giusto" per esso, la soluzione
puo' essere semplicissima: un Data Access Object (DAO) puo'
fare al caso tuo; infatti la OpenDatabase accetta come primo
parametro l'URL del file HTML, come ultimo, "HTML Import;",
e ora puoi accedere ai dati nelle tabelle HTML della pagina
come ad un "database readonly".  Il DAO e' usabile anche da
Visual C++, in modo analogo.  Questa soluzione pero' funziona
solo per dati che sono in una <TABLE> HTML, e anche in
questo caso esistono alcuni casi potenzialmente problematici
(generalmente, pero', penso che si risolvano bene).
Sempre in VB-Pro o meglio, un'alternativa piu` generale e'
lo Internet Transfer Control; con esso, dopo avere, se
occorre, settato un proxy valido, puoi chiamare OpenUrl
e scaricare cosi' tutta la pagina HTML (protocolli HTTP
o FTP).  Dopodiche`, pero`, si tratta di identificare, entro
la pagina, gli specifici dati che ti interessano... e questo
puo' essere banale, o difficile -- tutto dipende da come
esattamente e' fatta quella pagina e come/dove in essa
si trovano quei "valori" che desideri.
L'approccio piu' potente puo` essere quello di appoggiarsi
sull'architettura a componenti dell'Internet Explorer della
Microsoft.  Puoi trovare la documentazione sul sito della
Microsoft, specificamente il "SBN Workshop" (devi
"iscriverti" alla Site Builder's Network, ma e' gratis) sotto
l'argomento "reusing browser technology".  In sostanza,
puoi usare IE4/MSHTML per ottenere e fare il parsing
dell'HTML che ti interessa, e accedere, tramite il
"Document Object Model", ai contenuti della pagina,
dal tuo programma, come potresti farlo da uno script
(VBscript, JScript, ecc) contenuto nella pagina stessa.
In pratica, accedi al documento HTML, tramite IE4,
via "Automation" -- l'approccio e' del tutto analogo a
quello di accedere a un documento Word, tramite
il programma Word, via Automation.  Puoi anche
scegliere, analogamente, di Automatizzare il controllo
WebBrowser -- un controllo piu' "di alto livello", meglio
documentato e forse di piu` agevole uso.
Tutto questo puo' apparire un po' complicato, per cui
ecco un esempietto per mostrare che non lo e' -- un
programmino VB piccolo piccolo che mostra il titolo di
una qualsiasi pagina HTML.  Nel Project References,
setta il checkbox di "Microsoft Internet Controls".  Il
codice e', ad esempio (la form avra' un Text per la URL,
un bottone da cliccare per agire, due Label per
mostrare status e risultato)...:
Option Explicit
Dim WithEvents IE As SHDocVw.InternetExplorer
Private Sub Command1_Click()
    On Error Resume Next
    Label1 = "Scaricamento in corso..."
    Label2 = "(nessun titolo)"
    If IE Is Nothing Then  'creo solo la 1a volta
        Set IE = CreateObject("InternetExplorer.Application")
    End If
    IE.Navigate2 Text1.Text
    If Err.Number <> 0 Then
        MsgBox "Errore :" & Err.Description
    Else
        Command1.Enabled = False
    End If
End Sub
Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    On Error Resume Next
    Label1 = "pagina scaricata: " & URL
    Label2 = "Prelevo il titolo..."
    Command1.Enabled = True
    Dim doc As Object
    Set doc = pDisp.Document
    If Err.Number <> 0 Then
        MsgBox "Errore :" & Err.Description
    Else
        Label2 = "Titolo: " & doc.Title
    End If
End Sub
Naturalmente non e' difficile fare lo stesso in VC++, o
qualsiasi altro linguaggio che supporti bene COM (il solito
Component Object Model della Microsoft).  Se questo
approccio e' accettabile per il tuo problema, allora ti resta
solo il compito di studiare il "document object model" (DOM)
della pagina di tuo interesse, quello che in questo schema
ti viene ritornato nell'oggetto "doc", per capire attraverso
quali sue proprieta' puoi risalire a quei famosi "valori" che
vai cercando (ad esempio, "navigare" entro il documento,
sino a trovare l'oggetto-paragrafo che ti interessa, ad
esempio identificato da un nome o ID, e ti questo oggetto
P ottenere la proprieta' innerText, cioe' tutto il testo del
paragrafo, senza piu' tag HTML, e "frugare" questa stringa
alla ricerca dei "valori" -- ecc, ecc).  Il DOM e' uno standard
promulgato dal W3C, e Microsoft ne ha una decente
implementazione (e una decente documentazione in
linea sulla SBN, la "Site Builders' Network", entro l'area
"Workshop" di questo sito -- dove troverai anche la
dettagliata documentazione di come usare, in VB o C++,
gli oggetti InternetExplorer, ecc ecc).
Alex