Api Xml


Ho trovato semplicemente un nuovo palinsesto qui.

Il codice che ho utilizzato è questo:

PHP:
<?php    
$uri = 'http://www.laguidatv.it/';    

$get = file_get_contents($uri);

//costruisco una posizione iniziale
$inizio = strpos($get, '<');

// comincio il ciclo
for($i=0; $i<250; $i++){

//grab del programma televisivo
$prog_inizio = strpos($get, '<span class="search_text">', $inizio);  
$prog_fine = strpos($get, '</span>', $prog_inizio);   

$trasmissione = substr($get,$prog_inizio,$prog_fine-$prog_inizio+7);   

//grab del canale che trasmette il programma
$canale_inizio = strpos($get, '<i>', $prog_inizio); 
$canale_fine = strpos($get, '</i>', $canale_inizio);     

//chiudo la prima posizione
$inizio = $canale_fine; 
$canale = substr($get,$canale_inizio,$canale_fine-$canale_inizio+4);   


$riga = "<br />" . $canale . "&nbsp" . $trasmissione;

//stampo
echo $riga;

}

?>

Ora, come puoi vedere qui sono riuscito a catturare tutti i canali presenti nella pagina.
Tuttavia volevo fare ancora alcune cose:
1. Volevo prendere anche l'ora d'inizio e la durata di ogni programma. Il fatto è che non riesco a catturarli poichè non sono racchiusi in nessun tag, hai idea di come fare?
2. Come puoi vedere ho aggiunto
PHP:
$riga = "<br />" . $canale . "&nbsp" . $trasmissione;
questo perchè vorrei inserire $riga in un array e ordinarlo in ordine alfabetico poichè se vedi aggiornando più volte la pagina originaria (http://www.laguidatv.it/) i canali si ordinano in base all'ora e a me così ballonzolanti non servono. E' la strada giusta questa? (lo stavo facendo ora)

Eccoti aggiornato :)
 
Non c'è bisogno che siano racchiusi in dei tag.
Per esempio se prima di ogni ora c'è scritto:
Ora inizio : 20.00
Allora cerca Ora inizio così come ora cerchi i tag.
 
Non c'è bisogno che siano racchiusi in dei tag.
Per esempio se prima di ogni ora c'è scritto:
Ora inizio : 20.00
Allora cerca Ora inizio così come ora cerchi i tag.

Si lo so ma se dai un occhio alla pagina comprendi perchè non riesco a prenderli: prima non c'è scritto nulla. Se mi fai la cortesia di dare un occhio magari puoi aiutarmi =)
 
Si lo so ma se dai un occhio alla pagina comprendi perchè non riesco a prenderli: prima non c'è scritto nulla. Se mi fai la cortesia di dare un occhio magari puoi aiutarmi =)

Niente ho provato ad utilizzare dei tag che venivano prima ma nulla. Non riesco neppure ad ordinare le righe :V
 
Intato hai un tag </br> prima di ogni orario di inizio tranne il primo.
In più non vedo un orario di fine del programma nella pagina che hai postato.
Per l'ordinamento: come vuoi ordinare?
 
Intato hai un tag </br> prima di ogni orario di inizio tranne il primo.
In più non vedo un orario di fine del programma nella pagina che hai postato.
Per l'ordinamento: come vuoi ordinare?

Vado per gradi a rispondere altrimenti faccio un pasticcio
=)

1. Non c'è un ora di fine ma la durata del programma ed è quella (compresa l'ora di inizio che vorrei inserire)
2. Ho provato ad implementare il codice con il grab della durata del programma alla fine. Purtroppo va in parte:

PHP:
<?php     
$uri = 'http://www.laguidatv.it/';     

$get = file_get_contents($uri); 

//costruisco una posizione iniziale 
$inizio = strpos($get, '<'); 

// comincio il ciclo 
for($i=0; $i<1; $i++){ 

	//grab del programma televisivo 
	$prog_inizio = strpos($get, '<span class="search_text">', $inizio);   
	$prog_fine = strpos($get, '</span>', $prog_inizio);    

	$trasmissione = substr($get,$prog_inizio,$prog_fine-$prog_inizio+7);    

	//grab del canale che trasmette il programma 
	$canale_inizio = strpos($get, '<i>', $prog_inizio);  
	$canale_fine = strpos($get, '</i>', $canale_inizio);      

	$canale = substr($get,$canale_inizio,$canale_fine-$canale_inizio+4);  
	
	//grab della durata del programma
	$durata_inizio = strpos($get, '</a>', $canale_fine);  
	$durata_fine = strpos($get, '<br>', $durata_inizio);     
	
	//chiudo la prima posizione 
	$inizio = $durata_fine;  
  	$durata = substr($get,$durata_inizio-4,$durata_fine-$durata_inizio-4);

	$riga = "<br />" . $canale . "&nbsp" . $trasmissione . "&nbsp" . $durata; 

	//stampo 
	echo $riga; 

} 
?>
Inutile spiegarlo, meglio se dai un'occhiata direttamente http://giornale.site40.net/new.php
Nota bene che non ho fatto partire il ciclo per tutti i canali ma solo per il 1 e in parte funziona se vedi. Infatti la prima riga è corretta è il resto che non dovrebbe esserci.

3. Vorrei ordinare il tutto in ordine alfabetico per canale. Cioè le righe cominciano tutte con il nome del canale e vorrei che queste fossero così ordinate alfabeticamente. Ho provato ad includere la la riga in un array e successivamente ad usare un count() dopodichè con sort() ho tentato di ordinarli, ma mi restituiva o tutti valori 0 o tutti valori 1 :\

Direi di andare per gradi però che si fa per prima?
 
Per fare il riordinamento devi salvarti tutti i canali con gli orari e trasmissioni in un array di array per poi riordinarli.
 
Per fare il riordinamento devi salvarti tutti i canali con gli orari e trasmissioni in un array di array per poi riordinarli.

Sicuramente sbaglio. Ho fatto così

PHP:
<?php     
$uri = 'http://www.laguidatv.it/';     

$get = file_get_contents($uri); 

//costruisco una posizione iniziale 
$inizio = strpos($get, '<'); 

// comincio il ciclo 
for($i=0; $i<250; $i++){ 

	//grab del programma televisivo 
	$prog_inizio = strpos($get, '<span class="search_text">', $inizio);   
	$prog_fine = strpos($get, '</span>', $prog_inizio);    

	$trasmissione = substr($get,$prog_inizio,$prog_fine-$prog_inizio+7);    

	//grab del canale che trasmette il programma 
	$canale_inizio = strpos($get, '<i>', $prog_inizio);  
	$canale_fine = strpos($get, '</i>', $canale_inizio);      

	//chiudo la prima posizione 
	$inizio = $canale_fine;  
	$canale = substr($get,$canale_inizio,$canale_fine-$canale_inizio+4);    

	$a_canale = array($canale);
	$a_trasmissione = array($trasmissione);

	$riga = "<br />" . $a_canale . "&nbsp" . $a_trasmissione; 

	//stampo 
	echo $riga; 

} 
?>

La stampa è

HTML:
Array Array
Array Array
Array Array
Array Array
Array Array
Array Array
Array Array
Array Array
x250 volte
 
Dovresti fare la stampa così:
PHP:
    $riga = "<br />" . $a_canale[0] . "&nbsp" . $a_trasmissione[0];
 
Dovresti fare la stampa così:
PHP:
    $riga = "<br />" . $a_canale[0] . "&nbsp" . $a_trasmissione[0];

Sono un fesso non ho parole non me ne ero proprio accorto...

Comunque ti pareva che non avevo problemi anche con l'ordinamento degli array?

PHP:
<?php     
$uri = 'http://www.laguidatv.it/';     

$get = file_get_contents($uri); 

//costruisco una posizione iniziale 
$inizio = strpos($get, '<'); 

// comincio il ciclo 
for($i=0; $i<250; $i++){ 

    //grab del programma televisivo 
    $prog_inizio = strpos($get, '<span class="search_text">', $inizio);   
    $prog_fine = strpos($get, '</span>', $prog_inizio);    

    $trasmissione = substr($get,$prog_inizio,$prog_fine-$prog_inizio+7);    

    //grab del canale che trasmette il programma 
    $canale_inizio = strpos($get, '<i>', $prog_inizio);  
    $canale_fine = strpos($get, '</i>', $canale_inizio);      

    //chiudo la prima posizione 
    $inizio = $canale_fine;  
    $canale = substr($get,$canale_inizio,$canale_fine-$canale_inizio+4);    

    $a_canale = array($canale);
    $a_trasmissione = array($trasmissione);

    $riga = array( "<br />" . $a_canale[0] . "&nbsp" . $a_trasmissione[0]); 
		
	sort($riga);

	foreach($riga as $posizione => $nome){ 
		
		echo "Posizione Canale[$posizione] : $nome <br/>";   
	}   
} 
?>

L'output è:

HTML:
Posizione Canale[0] : 
Rai News COLORI 
1Posizione Canale[0] : 
Milan Channel Milanello Live 
1Posizione Canale[0] : 
Sky Cinema Cult Cyrus 
1Posizione Canale[0] :

Se faccio
PHP:
echo count($riga);
mi conta 1 cioè non considera il ciclo :\
 
Ultima modifica:
Si ovvio..in quel modo prendi un canale in tutte le sue informazioni e lo metti in un array e in quell'array c'è solo quel canale e tu tenti di ordinare..(quando in realtà ce n'è solo uno).
Allora devi metterli prima tutti in un array di array e poi quando finisci di metterli (cioè fuori dal ciclo) ordini per poi stampare.
 
Si ovvio..in quel modo prendi un canale in tutte le sue informazioni e lo metti in un array e in quell'array c'è solo quel canale e tu tenti di ordinare..(quando in realtà ce n'è solo uno).
Allora devi metterli prima tutti in un array di array e poi quando finisci di metterli (cioè fuori dal ciclo) ordini per poi stampare.

Non ho capito bene al soggetto di quel "tutti".

così
PHP:
    $riga = array( "<br />" . $a_canale[0] . "&nbsp" . $a_trasmissione[0]);

La riga non è un array di a_canale e a_trasmissione?

Dovrei operare fuori dal ciclo for? Se stampo echo $riga[0]; stampa solo la prima T.T
 
Infatti c'è solo quella visto che scrivi sempre su quella. In realtà se stampi fuori c'è l'ultima perché si sovrascrive sempre sul primo elemento dell'array.
Dovresti fare qualcosa tipo:

PHP:
$contatore = 0;
for(...){
//...
    $riga=array($contatore => array("canale" => $canale, "trasmissione" => $trasmissione));
    $contatore++;
//...
}
//ordinamento
//...
//stampa finale
for($i = 0; $i < $contatore; $i++)
   echo $riga[$i]['canale']." ".$riga[$i]['trasmissione'];
Ordini come vuoi in base a quello che desideri. Ci sono molte guide e diversi procedimento da poter adottare per ordinare un array.
 
Infatti c'è solo quella visto che scrivi sempre su quella. In realtà se stampi fuori c'è l'ultima perché si sovrascrive sempre sul primo elemento dell'array.
Dovresti fare qualcosa tipo:

PHP:
$contatore = 0;
for(...){
//...
    $riga=array($contatore => array("canale" => $canale, "trasmissione" => $trasmissione));
    $contatore++;
//...
}
//ordinamento
//...
//stampa finale
for($i = 0; $i < $contatore; $i++)
   echo $riga[$i]['canale']." ".$riga[$i]['trasmissione'];
Ordini come vuoi in base a quello che desideri. Ci sono molte guide e diversi procedimento da poter adottare per ordinare un array.

Ti ringrazio nel pomeriggio provo ora vado da decatlon che ho rotto le scarpe per la corsa O.o :P grazie!
 
Va bene attendo aggiornamenti :)

Ancora una volta nulla T.T stampa sempre 1 sola riga. Ecco il codice


PHP:
<?php      
$uri = 'http://www.laguidatv.it/';      

$get = file_get_contents($uri);

$contatore = 0; 

//costruisco una posizione iniziale  
$inizio = strpos($get, '<');  

// comincio il ciclo  
for($i=0; $i<250; $i++){  

    //grab del programma televisivo  
    $prog_inizio = strpos($get, '<span class="search_text">', $inizio);    
    $prog_fine = strpos($get, '</span>', $prog_inizio);     

    $trasmissione = substr($get,$prog_inizio,$prog_fine-$prog_inizio+7);     

    //grab del canale che trasmette il programma  
    $canale_inizio = strpos($get, '<i>', $prog_inizio);   
    $canale_fine = strpos($get, '</i>', $canale_inizio);       

    //chiudo la prima posizione  
    $inizio = $canale_fine;   
    $canale = substr($get,$canale_inizio,$canale_fine-$canale_inizio+4);     

    $a_canale = array($canale); 
    $a_trasmissione = array($trasmissione); 

    $riga = array( "<br />" . $canale . "&nbsp" . $trasmissione);
	
	//$riga = array( "<br />" . $a_canale[0] . "&nbsp" . $a_trasmissione[0]);
	
    $riga=array($contatore => array("canale" => $canale, "trasmissione" => $trasmissione)); 
    
	$contatore++;
	
}

	//ordinamento
	natsort($riga);

	//stampa finale 
	for($k = 0; $k < $contatore; $k++){
	   echo $riga[$k]['canale']." ".$riga[$k]['trasmissione'];  
	}
?>
 
Dovresti rimuovere questa:
PHP:
    $riga = array( "<br />" . $canale . "&nbsp" . $trasmissione);
 
Maledizione ancora nulla uffa. Ho commentato anche $a_trasmissione e $a_canale ma stampa sempre e solo l'ultimo risultato :V

PHP:
<?php      
$uri = 'http://www.laguidatv.it/';      

$get = file_get_contents($uri);

$contatore = 0; 

//costruisco una posizione iniziale  
$inizio = strpos($get, '<');  

// comincio il ciclo  
for($i=0; $i<250; $i++){  

    //grab del programma televisivo  
    $prog_inizio = strpos($get, '<span class="search_text">', $inizio);    
    $prog_fine = strpos($get, '</span>', $prog_inizio);     

    $trasmissione = substr($get,$prog_inizio,$prog_fine-$prog_inizio+7);     

    //grab del canale che trasmette il programma  
    $canale_inizio = strpos($get, '<i>', $prog_inizio);   
    $canale_fine = strpos($get, '</i>', $canale_inizio);       

    //chiudo la prima posizione  
    $inizio = $canale_fine;   
    $canale = substr($get,$canale_inizio,$canale_fine-$canale_inizio+4);     

    //$a_canale = array($canale); 
    //$a_trasmissione = array($trasmissione); 

    //$riga = array( "<br />" . $canale . "&nbsp" . $trasmissione);
	
	//$riga = array( "<br />" . $a_canale[0] . "&nbsp" . $a_trasmissione[0]);
	
    $riga=array($contatore => array("canale" => $canale, "trasmissione" => $trasmissione)); 
    
	$contatore++;
	
}

//ordinamento
natsort($riga);

//stampa finale 
for($i = 0; $i < $contatore; $i++){
   echo $riga[$i]['canale']." ".$riga[$i]['trasmissione'];  
}

?>
 

Discussioni simili