Api Xml

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Salve a tutti, rieccomi qui :)

Volevo inserire all'interno del mio sito un palinsesto tv, in particolare cosa trasmettono in questo momento i canali rai e mediaset.

Mi spiego: vorrie fare una tabella così

canale ora programma
rai1 17:00 20:00 L'eredità

Come posso fare?

Ho cercato delle api xml tipo quelle di yahoo wether (google le ha messe a pagamento :O ) ma non ho trovato nulla.

Ho trovato solo i palinsesti ufficiali.

Se qualcuno sa come fare ad estrapolarli da li può farmi un esempio?
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
È questo che mi piace leggere :)
Ti piacerà un pò meno quello che scriverò adesso =)

allora visto che quei palinsesti erano troppo complessi (troppe dipendenze da gestire) ho trovato per mia fortuna questo
tv.zam.it/gadget/gadget_tv.php

da qui credo sia un pò più facile utilizzare la tecnica che mi hai consigliato. Ho alcune domande però

Allora cos'ho fatto:
Ho preparato il file in php in questo modo
PHP:
<?php
$uri = 'http://tv.zam.it/gadget/gadget_tv.php';

$get = file_get_contents($uri);

$rai1 = strpos($get, '<td class="gen" valign="top">');   
//identifico la prima occorrenza di apertura del tag form

$pos0 = strpos($get, '</td>', $rai1); 
//identifico la prima occorrenza di chiusura del tag form a partire da rai1

$text = substr($get,$rai1,$pos0-$rai1+5); 
//estraggo il codice html ivi contenuto
//+7 per acquisire anche il tag </form>

echo $text; // visualizzo il codice html
?>
Ed effettivamente riesco a visualizzare l'ora della prima riga (rai 1 per intenderci) ma non visualizzo cosa trasmette il canale, per farlo devo duplicare il codice. Da qui nasce spontaneo chiedere come fare per "richiamare" più tag dalla pagina delle risorse.

Altro problema, poichè i tag si ripetono sempre con lo stesso nome non ho idea di come fare a scrivere in php di recuperare il 2 tag , la struttura della pagina è così:

HTML:
<table cellspacing="3" cellpadding="3">
<tbody>
<tr>
<td class="gen" valign="top">
<b>17:15</b>
</td>
<td valign="top" align="center">
<a title="LCN: 1" href="http://tv.zam.it/gadget/gadget_tv.php?canale=10&data=2013-02-06&prefsez=&bg=&catc=&gen=&agen=">
<img border="0" alt="Rai 1" src="/canali/raiuno.png">
</a>
</td>
<td valign="top">
<span ;="" style="color:006600">Attualità</span>
<br>
<span class="gen">LA VITA IN DIRETTA</span>
</td>
</tr>
<tr>
<td class="gen" valign="top">
<b>17:00</b>
</td>


<td valign="top" align="center">
<a title="LCN: 2" href="http://tv.zam.it/gadget/gadget_tv.php?canale=21&data=2013-02-06&prefsez=&bg=&catc=&gen=&agen=">
<img border="0" alt="Rai 2" src="/canali/raidue.png">
</a>
</td>
<td valign="top">
<span ;="" style="color:006600">Telefilm</span>
<span ;="" style="color:006600"> - Thriller,</span>
<br>
</td>
</tr>
Come puoi ben vedere i tag per ogni canale sono uguali, quindi non so come fare per estrapolare ogni singolo canale :\
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
La prima soluzione che mi è venuta in mente è quella di togliere ciò che hai selezionato da tutto il resto.
Allora tu prendi ciò che ti serve (come già hai fatto) e poi fai in modo di rimuoverlo dal testo totale (magari selezionando dall'inizio a <td...> e poi da </td> in poi e li unisci). Sicuramente ci sarà un metodo migliore per farlo ma intanto prova questo. Se mi viene in mente ti faccio sapere.
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
La prima soluzione che mi è venuta in mente è quella di togliere ciò che hai selezionato da tutto il resto.
Allora tu prendi ciò che ti serve (come già hai fatto) e poi fai in modo di rimuoverlo dal testo totale (magari selezionando dall'inizio a <td...> e poi da </td> in poi e li unisci). Sicuramente ci sarà un metodo migliore per farlo ma intanto prova questo. Se mi viene in mente ti faccio sapere.
No mi spiace non ne ho capito la logica. Ho riletto varie volte quello che hai scritto ma non ho compreso ciò che intendi.

Quello che ho fatto fino ad ora va bene giusto? Ora non so come inserire di fianco all'orario la trasmissione corrispondente.
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Prova così:
PHP:
<?php 
$uri = 'http://tv.zam.it/gadget/gadget_tv.php'; 

$get = file_get_contents($uri); 

$rai1 = strpos($get, '<td class="gen" valign="top">');     

$pos1 = strpos($get, '</td>', $rai1);  

$rai2 = strpos($get, '<span class="gen">');
$pos2 = strpos($get, '</span>', $rai2);

$ora = substr($get,$rai1,$pos1-$rai1+5); 
$trasmissione = substr($get,$rai1,$pos2-$rai2+5);

echo $ora;
echo $trasmissione; 
?>
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Prova così:
PHP:
<?php 
$uri = 'http://tv.zam.it/gadget/gadget_tv.php'; 

$get = file_get_contents($uri); 

$rai1 = strpos($get, '<td class="gen" valign="top">');     

$pos1 = strpos($get, '</td>', $rai1);  

$rai2 = strpos($get, '<span class="gen">');
$pos2 = strpos($get, '</span>', $rai2);

$ora = substr($get,$rai1,$pos1-$rai1+5); 
$trasmissione = substr($get,$rai1,$pos2-$rai2+5);

echo $ora;
echo $trasmissione; 
?>
Nulla mi duplica 2 volte l'ora. Ho provato a modificarlo così e fa la stessa cosa:

Codice:
<?php  
$uri = 'http://tv.zam.it/gadget/gadget_tv.php';  

$get = file_get_contents($uri);  

$rai1 = strpos($get, '<td class="gen" valign="top">');      

$pos1 = strpos($get, '</td>', $rai1);   

$rai2 = strpos($get, '<td valign="top">'); 
$pos2 = strpos($get, '</td>', $rai2); 

$ora = substr($get,$rai1,$pos1-$rai1+5);  

$trasmissione = substr($get,$rai1,$pos2-$rai2+5); 

echo $ora; 
echo $trasmissione;  
?>
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Si scusa modifica questa riga:
PHP:
$trasmissione = substr($get,$rai1,$pos2-$rai2+5);
Con questa:
PHP:
$trasmissione = substr($get,$rai2,$pos2-$rai2+5);
Così funziona, ora non mi rimane che capire come estrapolare tutti gli altri canali e manipolare i dati. A tal riguardo è possibile definire l'output dei dati? Mi spiego: ad es vorrei che tali dati fossero inseriti in una tabella o in un file xml. Mi viene da pensare che potrei costruire la tabella html e inserire gli echo nelle celle, corretto? (tanto posso aprire e chiudere il php quanto mi pare)
Invece se volessi generare un xml?
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Per prenderli tutti basta fare un ciclo sfruttando i puntatori che già hai.
Si puoi fare in entrambi i modi. Ci sono molti articolo su come creare file XML da php. Il problema è prima estraporarli tutti :)
Ok, non avevo pensato ai cicli adesso provo :p menomale che mi hai dato l'idea xD non ci avrei mai pensato :eek:

PS. che telefonino hai?
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
IPhone 4S 32Gb, perché?
Ah, sei uno di quelli con l'Iphogne >,> XD

No è che stavo creando un app per android per vedere radio e tv compresi canali mediaset rai dmax cielo focus etc.... mi serviva qualche "alpha tester" :(

Tornando al problema del ciclo ho fatto una cosa del genere ma credo di aver pasticciato (credo che la logica non vada per nulla bene e il ciclo va in loop)

PHP:
<?php  
$uri = 'http://tv.zam.it/gadget/gadget_tv.php';  

$get = file_get_contents($uri);  

$rai1ora = strpos($get, '<td class="gen" valign="top">');      
$pos1 = strpos($get, '</td>', $rai1ora);   

$rai1prog = strpos($get, '<span class="gen">'); 
$pos2 = strpos($get, '</span>', $rai1prog); 

$ora = substr($get,$rai1ora,$pos1-$rai1ora+5);  
$trasmissione = substr($get,$rai1prog,$pos2-$rai1prog+5);  

for($k=$get; $k <= count($rai1ora, $pos1); $k++){

$tutteleore = array($k);

}

foreach($tutteleore as $orario)
{
  echo $orario . "<br/>";
}

 
?>
La logica era di creare un conteggio di ogni stringa (in questo caso per le ore)
PHP:
$rai1ora = strpos($get, '<td class="gen" valign="top">');      
$pos1 = strpos($get, '</td>', $rai1ora);
trovata nella pagina importata. Assegnare ad ogni stringa trovata un valore numerico racchiudendole in un array, stampare gli array.

Fare lo stesso procedimento anche per le trasmissioni.

Poi una volta stampato tutto "assemblarli" con la manipolazione dei dati in tabella (o file xml poi vedo).