modifica
- corretto l'uso delle variabili
- corretta la ricerca dei tag, adesso è un attimino più precisa
note
- ovviamente tutto funziona perchè lavoro con pagine XHTML valide
- la ricerca dei tag potrebbe essere ottimizzata con le regexp, ma non avevo voglia di stressarmi con qui geroglifici
Codice PHP:
s<?php
$h =''; // handler della sessione tramite CURL
$u ='http://www.poste.it'; // url da aprire
$p =''; // codice della pagina
$i ='colonnaDestraHome'; // id da cercare
$t ='div'; // tag da cercare
$c =1; // conteggio dei tag ancora da cercare per arrivare alla chiusura del nostro tag di apertura
$n =0; // posizione del tag attualmente trovato durante la ricerca nel codice
$s =0; // posizione del primo carattere successivo ancora da controllare
//prendo la pagina
$h = curl_init($u);
curl_setopt($h, CURLOPT_HEADER, 0); // disattiva l'invio di intestazioni
curl_setopt($h, CURLOPT_RETURNTRANSFER, 1); // disattiva l'output della pagina
$p=curl_exec($h);
curl_close($h);
//tolgo quanto c'è prima: trovato l'id tolgo il codice fino al suo successivo ">"
$n=strpos($p,'id="'.$i.'"'); if($n===false) die('Id non trovato');
$s=strpos($p,'>',$n)+1;
$p=substr($p,$s); $s=0;
//cerco il punto del codice fino a dove mi serve: finchè ci sono tag da trovare, avanzo i puntatori n e s
while ($c>0){
$n=strpos($p,$t,$s); if($n===false) die('Tag di chiusura non trovato');
if(substr($p,$n-2,6)=='</'.$t.'>') $c--; elseif(substr($p,$n-1,4)=='<'.$t) $c++; // aumento il contatore dei tag di chiusura da cercare se il tag trovato è di apertura
$s=strpos($p,'>',$n)+1; // aggiorno il puntatore comprendendo il codice fino al tag trovato
};
//pubblico
header("Content-type: text/xml; charset=UTF-8");
echo substr($p,0,$n-2);
?>