• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

karva

[PHP]Script para gerar feeds rss da programação da TVCabo

17 mensagens neste tópico

Depois de ver o programa que o zeroonnet desenvolveu sobre a programação dos canais da TVCabo, perguntei-lhe onde é que ele ia buscar os dados, e ele deu-me um link para um site que basicamente tinha um script parecido com este, ou seja, criava feeds rss da programação, e por isso decidi por mãos à obra e criar o meu próprio.

PS: possívelmente há muitas maneiras mais fáceis de fazer isto.

Cá vai, pode ser que seja útil para alguém.

<?
$path = "http://" . $_SERVER['HTTP_HOST'] . $HTTP_SERVER_VARS["SCRIPT_NAME"];
if($_GET['rss'] == true && strlen($_GET['canal']) != 0) {
$canal = $_GET['canal'];
$dia = $_GET['amanha'];
if (isset($dia)) {
$url = "http://tv.sapo.pt/programacao.html?chan=$canal&dia=1";
}
else
{
$url = "http://tv.sapo.pt/programacao.html?chan=$canal";
}

$content = file_get_contents($url);
$cont = $content;
$cont = explode('<div class="tabela_programacao_titulo">', $cont);

$cont = explode('</div>', $cont[1]);

$nomecanal = $cont[0];

if(isset($dia)) {
$dia = time()+86400;
$dia = date("j/M/Y", $dia);
}
else
{
$dia = date("j/M/Y");
}
Header("Content-type: application/rss+xml");
Header("Charset: utf-8");
echo utf8_encode("<?xml version=\"1.0\" encoding=\"utf-8\" ?><rss version=\"0.91\"><channel><title>$nomecanal</title><description>Programação do canal $nomecanal para o dia $dia. Script by karva Copyright 2007</description><link>$path</link>
");

$content = explode('<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tabela_programacao">', $content);

$content = explode("					</table>", $content[1]);

$content = $content[0];

$programas = explode("<tr>", $content);
unset($programas[0]);

$programas = str_replace("	","", $programas);
$programas = str_replace("</tr>", "", $programas);

foreach ($programas as $programa) {
preg_match_all("/<td width=\"45\" class=\"tabela_programacao_tr1_td1\" height=\"20\"[^>]*>(.*?)<\/td>/",$programa,$output3);
$hora = $output3[1][0];
preg_match_all("/<td class=\"tabela_programacao_tr1_td2\"[^>]*>(.*?)<\/td>/",$programa,$output3);
$nomeprog = utf8_encode(html_entity_decode($output3[1][0]));
$nomeprog = str_replace("&", "&", $nomeprog);
echo "<item>
<title>$hora: $nomeprog</title>
<description>$hora: $nomeprog</description>
</item>
";
}


echo "</channel></rss>";
exit;
}
$content = file_get_contents("http://tv.sapo.pt/");

$content = explode('<option value="/">escolha >></option>', $content);

$content = explode("</select>", $content[1]);

$content = $content[0];

$content = str_replace("/programacao.html?chan=", "", $content);
echo "<form method=\"get\">
<select name=\"canal\"><option>canal</option>";
echo $content;
echo "<input type=\"submit\"></select></form>";

if($_GET['canal']) {
$canal = $_GET['canal'];
$url = "http://tv.sapo.pt/programacao.html?chan=$canal";
$cont = file_get_contents($url);

$cont = explode('<div class="tabela_programacao_titulo">', $cont);

$cont = explode('</div>', $cont[1]);

$nomecanal = $cont[0];
echo "RSS feed com a programação do canal $nomecanal para o presente dia: ";
echo "<a href=\"$path?canal=$canal&rss=true\">$path?canal=$canal&rss=true</a><p>RSS feed com a programação do canal $nomecanal para o próximo dia: <a href=\"$path?canal=$canal&rss=true&amanha\">$path?canal=$canal&rss=true&amanha</a>";
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que começar a organizar melhor o código para ser mais fácil de de se perceber.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sinseramente não olhei muito para o código, apenas modifiquei uma coisa, para mostrar Programacao <nome do canal>, para melhor organização pessoal.

Mas do que vi, está um pouco desorganizado sim.

Mas o principal está ai, funciona e bem :D

Abraços,

Pedro Diogo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao acho que esteja assim tão desorganizado. Falta um pouco de indentação, nada mais.

Vamos cá experimentantar isto :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax, pelo que percebi isso é para tirar dados de um xml, e o que este script faz é converter dados duma página HTMl para um feed rss.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax, pelo que percebi isso é para tirar dados de um xml, e o que este script faz é converter dados duma página HTMl para um feed rss.

Errado. SimpleXML permite-te fazer operações básicas com DOM. Ora vê lá a referencia da func addChild. :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito bom. Mas cá vão umas sugestões que já tas tinha dito no irc:

- Fazeres tipo uma tabela com as colunas: Canal Hoje Amanha e depois os canais estarem ordenados por ordem alfabetica com o icon do canal e isso... e depois ter os links à frente ou algo a dizer Hoje Amanha e ao clicar ir logo para o rss.

- No rss as cenas aparecem repetidas, tenta tirar a descrição de cada coisa para não se repetir (acho que é assim que se chama.

De resto bom trabalho xD

p.s. também já tou a fazer o programaçao da tv em c++ a ir buscar a esse site que te dei mas para mais dias nao só hoje e amanha xD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah, ja percebi a tua ideia, vou tentar fazer isso.

A segunda sugestão é bastante fácil.

Mas como ei de chamar aos dias?

Não pode ser hoje, amanha, depois, depois de depois...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

estive a ver isto... sim... funciona e até é pratico de cetta forma... mas para manter um feed com um único item... é capaz de ser mais pratico uma simples pagina em html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ideia não é exactamente isto ser um feed para uma pessoa ter no rss reader, mas sim para outras pessoas poderem criar as suas próprias aplicações, recorrendo a feeds rss em vez de terem que analisar o HTML todo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ideia não é exactamente isto ser um feed para uma pessoa ter no rss reader, mas sim para outras pessoas poderem criar as suas próprias aplicações, recorrendo a feeds rss em vez de terem que analisar o HTML todo.

mmm... wise :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah, ja percebi a tua ideia, vou tentar fazer isso.

A segunda sugestão é bastante fácil.

Mas como ei de chamar aos dias?

Não pode ser hoje, amanha, depois, depois de depois...

Epa metes Hoje(1-1-2007) amanha(2-1-2007) ....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax, pelo que percebi isso é para tirar dados de um xml, e o que este script faz é converter dados duma página HTMl para um feed rss.

Errado. SimpleXML permite-te fazer operações básicas com DOM. Ora vê lá a referencia da func addChild. ;)

Requirements

The SimpleXML extension requires PHP 5.

Nem todos os servidores têm PHP5 e eu já que queimei durante umas horas por causa disso :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok... vai dizer isso a 70% dos hosts que andam por ai... :D

Além disso:

The PHP development team hereby announces that support for PHP 4 will continue until the end of this year only. After 2007-12-31 there will be no more releases of PHP 4.4.

Ainda vai receber updates até ao fim deste ano, só foi anunciado o fim de vida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora