Pediram-me para gravar uma entrevista que uma pessoa conhecida ia dar na Rádio Nova Antena. Obviamente que a primeira coisa que fiz foi ver se esta rádio fazia o stream da respectiva emissão a partir da Internet. As boas notícias é que de facto a rádio tem a sua emissão on-line. As más notícias é que parece que esta rádio não quer que o pessoal ouça a emissão se utilizar o Firefox ou o Konqueror.
Habituado que estou a problemas deste género e seguindo a máxima de não atribuir à malicia o que mais facilmente se pode atribuir à estupidez foi consultar o código fonte da página que dá accesso ao stream da emissão. Eis que me deparo com o seguinte:
<HTML> <HEAD> <SCRIPT LANGUAGE="Javascript"> <!-- var Words = "%3Ctitle%3ERNA%20 [ESTA ERA UMA STRING COM UNS 22kB QUE CORTO AQUI] function SetNewWords() { var NewWords; NewWords = unescape(Words); document.write(NewWords); } SetNewWords(); // --> <SCRIPT> <HEAD> <BODY> <BODY> <HTML>
Estamos pois perante uma tentativa bastante fraca de esconder o conteúdo da página! Este tipo de atitude não leva, obviamente a nada. A Internet é um meio aberto (esta abertura foi exactamente o que lhe proporcionou o crescimento explosivo que teve nestes últimos anos), por isto o código fonte da página não pode estar muito distante. Se os donos desta rádio não querem que ela seja ouvida, o melhor mesmo é tira-la do ar. Enfim, adiante...
A página consiste nos headers e no código suficiente para carregar e executar a função SetNewWords(). Esta função, o que faz, é simplesmente pegar na string Words, fazer o unescape da mesma e escreve-la para o documento corrente, gerando desta forma a página.
Como resolver então este problema?
Até foi bastante fácil. O passo um consistiu em instalar um interpretador de JavaScript (usei o NGS), no Kubuntu isto implica fazer o seguinte como root:
apt-get install ngs-js
A seguir altera-se, ligeiramente o código fonte da página, para:
var Words = "%3Ctitle%3ERNA%20 [ESTA ERA UMA STRING COM UNS 22kB QUE CORTO AQUI] var out = System.stdout; function SetNewWords() { var NewWords; NewWords = unescape(Words); out.writeln(NewWords) } SetNewWords();
E grava-se num ficheiro, no caso chamei-lhe "porcaria.js".
As alterações consistiram em retirar as tags html e redireccionar o output para o standard output.
Agora vamos correr o programa:
$ ngs-js porcaria.js > porcaria.html
No ficheiro porcaria.html temos o html da página, bem formatado e tudo! Fazendo uma análise rápida a esta página, facilmente se encontra o URL da stream de audio. na linha seguinte:
<param name="Filename" value="mms://stream.radio.com.pt/ROLI-ENC-138" ref>
Ou seja:
mms://stream.radio.com.pt/ROLI-ENC-138
Também fica claro porque é que a stream não funciona em browsers diferentes do IE. Só utilizaram o formato para IE, quando deviam ter acrescentado qualquer coisa como o seguinte dentro da tag object que já lá têm, para funcionar também nos outros browsers (ou seja nos browsers que seguem os standards da web).
<embed type="application/x-mplayer2" ID="MediaPlayer" WIDTH="0" HEIGHT="0" src="mms://stream.radio.com.pt/ROLI-ENC-138" autostart="1" transparentatstart="1" showcontrols="0" showdisplay="0" showstatusbar="0" animationatstart="0"></embed>
Para ouvir a stream basta fazer:
$ mplayer mms://stream.radio.com.pt/ROLI-ENC-138
Para gravar a stream:
$ mplayer -dumpfile rna.asf -dumpstream mms://stream.radio.com.pt/ROLI-ENC-138
Já está! Problema resolvido... Já agora também quero dizer que não creio que o site tenha sido feito desta forma por uma questão de malícia!