• Bannato User Attivo

    leggere pagina per estrapolarne i dati

    E' una cosa che non ho mai fatto e non so se sia possibile.

    In pratica ogni giorno a me serve un codice php in cui una volta che ci accedo riesce a fare questo:

    Leggere una pagina web esterna come questa:
    http://www.borsaitaliana.it/bitApp/quotes.bit?target=SearchQuotes&grp=iniziale&param=A&lang=it

    e analizzando il codice html

    lui mi riesca a fare una specie di funzione explode o simile in modo da dividere i risultati o perlomeno provarci, poi al resto magari ci lavoro io.

    Per esempio io so che ogni valore percentuale della borsa è stato diviso cosi

    <td class="green">+16,15</td>
    <td class="dato">16.33.00</td>
    <td class="dato">0,936</td>

    ma chiaramente per ottenere ciò devo filtrare tutto quello che c'è nel resto della pagina e che non c'entra niente e poi lavorare su questo.

    Mi potete dare una mano? (accetto anche in altri modi)

    ciao 😉


  • User Attivo

    Ciao in effetti potrebbe essere interessante...

    questo progetto somiglia molto ad un motore di ricerca all'internoo di una pagina...

    premettendo che non sono molto esperto, io direi di provare così:

    ---gestiamo il tutto con un database che si aggiorna every day!---

    config.php

    [php]

    $db_host = 'HOST!';
    $db_name = 'NOME DEL DB (nome specifico)';
    $db_user = 'user-name del database (spesso localhost, a nn sempre';
    $db_pass = 'password';

    //e se vogliamo aggiungiamo anche...

    $password = 'una TUA password';

    [/php]

    install.php

    [php]

    include ('config.php');

    $db = mysql_connect ($db_host, $db_user, $db_pass) or die ('Errore connessione');
    $select = mysql_select_db ($db_name, $db) or die ('errore selezione database...');

    $query = 'CREATE TABLE borsa (id INT(3) NOT NULL AUTO_INCREMENT,
    nome VARCHAR (255) NOT NULL, prezzo_ultimo_contratto INT (6) NOT NULL, ----E LI METTI TUTTI, I CAMPI DELLA TABELLA----

    mysql_query($query, $db) or die ('Errore creazione tabella');

    inserisci.php

    [php]

    include('config.php');

    $visualizza = show_source($borsaitaliana.it/bitApp/quotes.bit?target=SearchQuotes&grp=iniziale&param=A&lang=it);

    $ricerca = stristr($visualizza, '<td class=');

    //cerca all'interno della pag il valore <td class=... , quello dove sn memorizzati i numeri!

    ---POI BISOGNA ALL'INTERNO DI $RICERCA ISOLARE I VALORI, e poi

    INSERT INTO borsa 777---VALORI---777...e per visualizzarli

    $QUERY = 'SELECT * FROM borsa';

    $estrapolo = MYSQL_QUERY = ($query, $db);

    ed infine

    $row = mysql_fetch_array($estrapolo, [$db]---> nn sono sicuro sia questo il 2o valore);

    li prendiamo tutti con

    whyle ($row = mysql_fetch_array ($estrapolo)){
    echo '---E QUI TROVI IL MODO CHE TI PIACE DI + PER VISUALIZZARE I DATI---

    [/php]

    misa che è un po' ingarbugliato... forse ti ho dato l'inizio, altrimenti se avete altre soluzioni postate!


  • Bannato User Attivo

    non sapevo che esisteva questa funzione

    $visualizza = show_source($borsaitaliana.it/bitApp/quotes.bit?target=SearchQuotes&grp=iniziale&param=A&lang=it);

    quando ho un pò di tempo la provo

    ti faccio sapere ciao 🙂


  • User Attivo

    Illuminazione!

    Con le espressioni regolari possiamo fare qualcosa?

    qualcosa tipo...

    [php]

    <?php

    $file_remoto = "borsaitaliana.it/bitApp/quotes.bit?target=SearchQuotes&grp=iniziale&param= A&lang=it";

    $sorgente_file_remoto = implode("", file($file_remoto));

    // UTILIZZIAMO eregi() perchè il tag potrebbe essere <title> o <TITLE>
    if(eregi("<td class=(.+)</td>", $sorgente_file_remoto, $regs)) {

    echo "il valore è " . $regs[];
    } else {

    echo "Nessun valore trovato";

    }

    ?>

    [/php]

    qualcosa di questo tipo...


  • Bannato User Attivo

    @Oliviero said:

    Illuminazione!

    Con le espressioni regolari possiamo fare qualcosa?

    mi sto leggendo la guida, sinceramente finora non le avevo mai usate

    <?
    $str = "Sequenza di caratteri";

    if (eregi("sequenza", $str))
    {
    echo "Trovato!";
    }else{
    echo "Non trovato!";
    }
    ?>

    trova

    <?
    $str = "Sequenza di caratteri";
    $sostituisci = "sequenza";
    $sostituto = "Insieme";
    echo eregi_replace($sostituisci, $sostituto, $str);
    ?>

    sostituisce

    poi fa split....

    faccio qualche prova e ti faccio sapere


  • Bannato User Attivo

    @Oliviero said:

    Illuminazione!

    Con le espressioni regolari possiamo fare qualcosa?

    qualcosa tipo...

    [php]

    <?php

    $file_remoto = "borsaitaliana.it/bitApp/quotes.bit?target=SearchQuotes&grp=iniziale&param= A&lang=it";

    $sorgente_file_remoto = implode("", file($file_remoto));

    // UTILIZZIAMO eregi() perchè il tag potrebbe essere <title> o <TITLE>
    if(eregi("<td class=(.+)</td>", $sorgente_file_remoto, $regs)) {

    echo "il valore è " . $regs[];
    } else {

    echo "Nessun valore trovato";

    }

    ?>

    [/php]

    qualcosa di questo tipo...

    e $regs[] è come un array di dati che lui ha trovato vero?


  • Bannato User Attivo

    ho provato mi va a finire in else e dice

    Nessun valore trovato

    non sono sicuro che riesca a leggere il codice html con

    $file_remoto = "http://www.borsaitaliana.it/bitApp/quotes.bit?target=SearchQuotes&grp=iniziale&param=A&lang=it";

    $sorgente_file_remoto = implode("", file($file_remoto));


  • ModSenior

    puoi usare la funzione

    file_get_contents()

    per leggere la pagina


  • Bannato User Attivo

    ma chi ha creato il safe_mode? 😄

    era quello che mi impediva di vedere il sito esterno

    però non ho problema tanto lo posso fare pure sul mio server

    allora ho caricato il file sul server senza safe_mode

    $regs contiene questo valore

    [PHP]la funzione trova tutto Array
    (
    [0] => <td class="campi" height="25" align="center"><b>Tutti i titoli in ordine alfabetico</b></td>
    </tr>
    <tr>
    <td height="32" class="letter">
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=A&lang=it" title="A">A</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=B&lang=it" title="B">B</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=C&lang=it" title="C">C</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=D&lang=it" title="D">D</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=E&lang=it" title="E">E</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=F&lang=it" title="F">F</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=G&lang=it" title="G">G</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=H&lang=it" title="H">H</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=I&lang=it" title="I">I</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=J&lang=it" title="J">J</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=K&lang=it" title="K">K</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=L&lang=it" title="L">L</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=M&lang=it" title="M">M</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=N&lang=it" title="N">N</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=O&lang=it" title="O">O</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=P&lang=it" title="P">P</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=Q&lang=it" title="Q">Q</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=R&lang=it" title="R">R</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=S&lang=it" title="S">S</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=T&lang=it" title="T">T</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=U&lang=it" title="U">U</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=V&lang=it" title="V">V</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=W&lang=it" title="W">W</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=Y&lang=it" title="Y">Y</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=X&lang=it" title="X">X</a>
    <a href="quotes.bit?target=SearchQuotes&grp=iniziale&param=Z&lang=it" title="Z">Z</a>
    </td>
    </tr>
    </table>

    		<br><br>
    		<span class=titleTab>
    			Titoli che iniziano per lettera A
    		</span>
    		<div class="lineh1"><img src="/media/img/void.gif"></div>
    		
    	<br>
    		<!-- Scheda Display 1? livello -->
    		<table class="tabWhite" cellspacing="1" cellpadding="2">
    		<tr class="campi">
    			<td>&nbsp;</td>
    			<td>Nome</td>
    			<td>Prezzo Ultimo Contratto</td>
    			<td>Var %</td>
    			<td>Ora</td>
    			<td>Min</td>
    			<td>Max</td>
    			<td>Apertura</td>
    			<td>Fase di Mercato</td>
    		</tr>
    		<tr>
    			<td>&nbsp;</td>
    			<td valign="center" class="gray"><a href="?target=SearchQuotes&grp=iniziale&param=A&ord1=anag&mod1=down&ord2=var&mod2=up
    

    ">Ordina <img src="/media/img/fr_ordina.gif" align="center"></a></td>
    <td> </td>
    <td valign="center" class="gray"><a href="?target=SearchQuotes&grp=iniziale&param=A&ord1=var&mod1=up&ord2=anag&mod2=up
    ">Ordina <img src="/media/img/fr_ordina.gif" align="center"></a></td>
    <td colspan=5> </td>
    </tr>
    <!-- IF class=tdazz/tdbia -->
    <tr class="tdazz">
    <td align="center"><a href="/bitApp/portafoglio.bit?target=add&isin=IT0001008876&market=2&name=A.S. Roma&lang=it"><img src="/media/img/ico/ico_miosito.gif" alt="Aggiungi al Personal Portfolio" ></a></td>
    <td><a class="stock" href="/bitApp/scheda.bit?target=StrumentoMTA&isin=IT0001008876&lang=it">A.S. Roma</a></td>
    <td class="dato">1,08</td>
    <!-- IF class=red/green/blu -->
    <td class="green">+16,15</td>
    <td class="dato">16.33.00</td>
    <td class="dato">0,936</td>
    <td class="dato">1,08</td>
    <td class="dato">0,94</td>
    <td class="datosx">
    Mercato chiuso </td>
    </tr>
    <tr class="tdbia">
    <td align="center"><a href="/bitApp/portafoglio.bit?[/PHP]

    quindi ora immagino che una volta ottenuto questo codice devo fare ulteriori filtraggi

    l'esecuzione comunque è andata a buon fine ha iniziato da "<td class="campi""

    e adesso devo ottenere <td class="dato">valore</td> tutti quelli che sono composti cosi e solo quelli, e dopo una volta ottenuti posso usare la funzione explode e splitto 🙂


  • User Attivo

    OK