Jump to content

Regular Expression


Zeus[x]
 Share

Recommended Posts

Boas,

estou a tentar criar um script em php para "sacar" a programação de um canal de TV.

Mas estou com algumas problemas  com as regular expressions.

Imagine-se a seguinte situação:

O código de onde quero tirar a informação

>10:00</td>
                        
                        
                        
                        <td class="">
                            <a title='<span>Praça Da Alegria</span>

Regular expression que já tenho:

 >([0-9]{1,2})[0-9]{2})</td>[\s\S]*?<span>(.*?)</span>

Mas não funciona 🙂

Queria tirar a informação da hora e o nome do programa.

Há alguma forma de automáticamente criar as regular expressions para php, tipo, sublinhando apenas o texto qur quero tirar? Uma aplicação onde colocaria o código todo em bruto, seleccionava apenas o que me interessa e automaticamente era gerada a regular expression.

Alguma ideia?

Obrigado.

Link to comment
Share on other sites

Quais são os modifiers que estás a usar?

Parece-me que falta o 'm'

Não podes usar DOM?

Pode-se ver que nesta situação não dá.

Por causa disto:

<a title='<span>Praça Da Alegria</span>

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Quais são os modifiers que estás a usar?

Parece-me que falta o 'm'Pode-se ver que nesta situação não dá.

Nem tinha reparado, btw, na minha opinião nunca se devem meter HTML em tags title. :/

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Bem,

já agora aproveito para falar do projecto.

Eu não tenho grande experiência em PHP mas estou a tentar criar um pequeno projecto que consiste no seguinte.

Retirar da página da tv cabo a informação do que está a dar na TV e o programa que se segue, tipo para os meus 5/6 canais preferidos e criar uma pequena página, apenas com essa informação textual para poder ver no telemovel.

Assim, em casa, a qualquer altura pego no telemovel e dou uma olhadela rápida pelo que está a dar na tv.

Quando á tua pergunta, sinceramente não faço a mimima, por mim sim. Isto é para correr num servidor gratuito, é possivel? Se sim, por mim optimo.

Apenas quero automatizar um copy past e juntar tudo na mesma página, apenas texto.

=)

Link to comment
Share on other sites

Com curl + HTMLDOM/Regex + preg_match_all()x(nº de canais) deves ficar com o que queres.

Vê no manual do PHP como lidar com os 3 e deves ficar servido com o que precisas.

Para o servidor bem... x10hosting é dos melhores que há mas só aceita inglês ou espanhol... procura aqui:http://www.free-webhosts.com/ pode ser que encontres um que te sirva.

n em lembro se o 000webhost tb serve...

Experimenta o xampplite. Tem o que precisas para um servidor no teu pc!

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Obrigado pela resposta, mas deve haver uma forma mais simples, uma regular expression que me devolva o que preciso. Com a anterior consigo tirar a hora, falta tirar também o nome do programa. Tem de haver uma forma =) Falta saber qual... lol

Depois de retirar a informação necessária o resto deve ser mais simples.

Link to comment
Share on other sites

Até agora tenho isto:

<?php
$fp = fopen("http://www.tvcabo.pt/Televisao/ListaProgramas.aspx?dia=0&package=9&cat=&channelSigla=5","r");
while (!feof($fp) ){
    $page .= fgets($fp, 4096);
}

//$titre = eregi("/<span>(.*)<\/span>/isU",$page,$regs);
$titre = eregi("<a title='<span>(.*)span><br/>",$page,$regs);
echo $regs[1];
fclose($fp);
?>

Mas ainda está cheio de erros :S

Alguma ideia?

Obrigado

Link to comment
Share on other sites

Bem, finalmente um progresso!

<?php

# Use fopen to scrape Google's homepage and
# store it's HTML code in the $contents variable
$handle = fopen("http://www.tvcabo.pt/Televisao/ListaProgramas.aspx?dia=0&package=9&cat=&channelSigla=5", "rb");
$contents = '';
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);

# Get all URLs in links from the HTML code
# and store it in an array, $matches.
//preg_match_all("/src=[\"']?([^\"']?.*(png|jpg|gif))[\"']?/i",$contents, $matches);
// preg_match_all("/<span>(.*?)<\/span>/i",$contents, $matches);
preg_match_all("/<span>(.*?)<\/span>/i",$contents, $matches);

# Display all these URLs.
foreach ($matches[1] as $url) {
echo $url . "         ";
echo "<br>";
}

?>

Não é nada de especial mas para mim já é mt bom!

Falta agora conseguir adiccionar também as horas!

No browser os caracteres especiais não aparecem, mas no telemovel funciona, por isso... siga!

Link to comment
Share on other sites

fopen só é má ideia para servidores grátis. Normalmente n deixam q o uses para aceder a coisas fora do teu home.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Está quase, já aparece as horas e os programas, mas em listas separadas.

tipo:

0:31
1:23
1:33
3:59
6:00
6:30
10:00
13:00
14:23
15:24
18:00
19:00
19:23
20:00
21:00
21:40
22:40
23:51
Tchiloli - Identidade De Um Povo
Operação Triunfo 2010 - Diários
Meia-noite No Jardim Do Bem E Do Mal
Televendas
Nós
Bom Dia Portugal
Praça Da Alegria
Jornal Da Tarde
Ribeirão Do Tempo
Portugal No Coração
Portugal Em Directo
Campanha Eleitoral - Presidenciais 2011
O Preço Certo 
Telejornal
Grande Entrevista
Quem Quer Ser Milionário - Alta Pressão
Tim - Companheiros De Aventura
Corredor Do Poder

Estou a usar este código:

<?php

# Use fopen to scrape Google's homepage and
# store it's HTML code in the $contents variable
$handle = fopen("http://www.tvcabo.pt/Televisao/ListaProgramas.aspx?dia=0&package=9&cat=&channelSigla=5", "rb");
$contents = '';
$tv = '';

while (!feof($handle)) {
$contents .= fread($handle, 5192*5192);
//$tv .= fread($handle, 9192);
}
fclose($handle);

# Get all URLs in links from the HTML code
# and store it in an array, $matches.
//preg_match_all("/src=[\"']?([^\"']?.*(png|jpg|gif))[\"']?/i",$contents, $matches);
preg_match_all('#<span>(.*?)</span>#i',$contents, $matches);
preg_match_all('#epgTime\" >(.*?)</td>
#i',$contents, $tvtime);




# Display all these URLs.
//FOR ($i = 0; $i <= 20; $i++){ 

foreach ($tvtime[1] as $time) {
echo $time . "";
echo "<br>";
}
foreach ($matches[1] as $programa) {
echo $programa . "";
echo "<br>";
}

//}

?>

A dúvida, alguém sabe como entrelaçar os valores? Colocar hora - programa, hora - programa...

=)=)

Link to comment
Share on other sites

Pergunta básica: tem mesmo de ser da Zon? É que existe um webservice muito jeitozinho para os canais do Meo...

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Custou mas lá foi. Ainda falta optimizar o código e dar uns ajustes, mas o principal está feito.

Para que serve? Além de poder ver a programação no telemovel sem ter que ligar a tv? lol... pelo desafio de fazer =)

Para quem precisar.

<?php

# Use fopen to scrape Google's homepage and
# store it's HTML code in the $contents variable
$handle = fopen("http://www.tvcabo.pt/Televisao/ListaProgramas.aspx?dia=0&package=9&cat=&channelSigla=5", "rb");
$contents = '';
$tv = '';

while (!feof($handle)) {
$contents .= fread($handle, 5192*5192);
//$tv .= fread($handle, 9192);
}
fclose($handle);

# Get all URLs in links from the HTML code
# and store it in an array, $matches.
//preg_match_all("/src=[\"']?([^\"']?.*(png|jpg|gif))[\"']?/i",$contents, $matches);
preg_match_all('#<span>(.*?)</span>#i',$contents, $matches);
preg_match_all('#epgTime\" >(.*?)</td>#i',$contents, $tvtime);

FOR ($i = 0; $i <= 35; $i++) 
{ 
  echo $tvtime[1][$i];
  echo " - ";
  echo $matches[1][$i];
  echo "</br>";
}


# Display all these URLs.
//FOR ($i = 0; $i <= 20; $i++){ 

//foreach ($tvtime[1] as $time) {
//echo $time . "";
//echo "<br>";
//}

//foreach ($matches[1] as $programa) {
//echo $programa . "";
//echo "<br>";
//}

Obrigado pelas ajudas

Link to comment
Share on other sites

Vê:PREG_SET_ORDER

aqui:http://php.net/manual/en/function.preg-match-all.php

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.