- Home
- Categorie
- Coding e Sistemistica
- PHP
- leggere pagina per estrapolarne i dati
-
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¶m=A&lang=ite 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
-
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¶m=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!
-
non sapevo che esisteva questa funzione
$visualizza = show_source($borsaitaliana.it/bitApp/quotes.bit?target=SearchQuotes&grp=iniziale¶m=A&lang=it);
quando ho un pò di tempo la provo
ti faccio sapere ciao
-
Illuminazione!
Con le espressioni regolari possiamo fare qualcosa?
qualcosa tipo...
[php]
<?php
$file_remoto = "borsaitaliana.it/bitApp/quotes.bit?target=SearchQuotes&grp=iniziale¶m= 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...
-
@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
-
@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¶m= 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?
-
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¶m=A&lang=it";
$sorgente_file_remoto = implode("", file($file_remoto));
-
puoi usare la funzione
file_get_contents()
per leggere la pagina
-
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¶m=A&lang=it" title="A">A</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=B&lang=it" title="B">B</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=C&lang=it" title="C">C</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=D&lang=it" title="D">D</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=E&lang=it" title="E">E</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=F&lang=it" title="F">F</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=G&lang=it" title="G">G</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=H&lang=it" title="H">H</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=I&lang=it" title="I">I</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=J&lang=it" title="J">J</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=K&lang=it" title="K">K</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=L&lang=it" title="L">L</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=M&lang=it" title="M">M</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=N&lang=it" title="N">N</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=O&lang=it" title="O">O</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=P&lang=it" title="P">P</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=Q&lang=it" title="Q">Q</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=R&lang=it" title="R">R</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=S&lang=it" title="S">S</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=T&lang=it" title="T">T</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=U&lang=it" title="U">U</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=V&lang=it" title="V">V</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=W&lang=it" title="W">W</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=Y&lang=it" title="Y">Y</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=X&lang=it" title="X">X</a>
<a href="quotes.bit?target=SearchQuotes&grp=iniziale¶m=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> </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> </td> <td valign="center" class="gray"><a href="?target=SearchQuotes&grp=iniziale¶m=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¶m=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
-
OK