O projeto xmltv tem, dentre seus inúmeros scripts, dois ou três grabbers para os canais brasileiros de TV. Porém a estabilidade dessas ferramentas deixa muito a desejar, e um sistema pode perder sua funcionalidade de uma hora para outra. Isto ocorre devido à própria natureza dos grabbers.
Um grabber é um programa que baixa o texto de uma página html e, baseado em um lay-out conhecido, "interpreta" seu conteúdo, extraindo as informações que queremos dela. Como exitem alguns sites brasileiros que publicam a programação de quase todos os canais de TV exibidos no país, o autor do grabber escolhe um deles e faz um programa que entende como o site está organizado, buscando as informações necessárias à compilação de um guia personalizado pelo usuário.
O problema ocorre quando o site decide mudar de lay-out, seja por qual motivo for. O grabber simplesmente "quebra", parando de funcionar. Ele deixa de encontrar as informações nos lugares esperados, e não consegue se adaptar sozinho ao novo lay-out.
Daí temos que tomar alguma ação, que pode ir desde "colocar a mão na massa" e "consertar" o grabber (readaptá-lo ao site), até ficarmos sentados esperando que o autor (ou outra pessoa) faça isso e lance uma nova versão.
Para minimizar esse problema, um desenvolvedor chamado Bill Dickens criou o TVxb, um grabber configurável através de arquivos .ini. Assim, ao invés de ter as informações sobre o lay-out das páginas html fixas no código do grabber (como ocorre nos scripts do projeto xmltv), o mesmo grabber pode baixar informações de vários sites e pode ser usado em vários países através de alterações num (quase) simples arquivo de configurações. Uma idéia genial, sem dúvida.
O grande problema do TVxb, ao menos para nós, é que ele só possui versão para Windows. No entanto, como a comunidade não pára, através do projeto wine podemos executar o TVxb no KnoppMyth sem nenhum problema. Mas, antes do caminho das pedras, vamos falar sobre ética:
Quando uma empresa (ou pessoa) decide criar um site contendo a programação de todos os canais de TV de um país, com certeza espera ganhar alguma coisa com isso. Alguns vendem o conteúdo a outras empresas, outros colocam banners nas páginas para terem o retorno do investimento e do trabalho que têm ao reunir essas informações.
Ao criar um grabber que visite de forma invisível ao usuário um site desses, o desenvolvedor e o usuário estão utlizando as informações de uma forma que não era exatamente aquela que o criador do site imaginou. Não existe retorno nenhum para o site e, em alguns casos, o consumo de banda aumenta tanto que o usuário do grabber acaba dando prejuízo real ao site.
É como se o usuário do grabber fosse um "parasita" sugando as informações do site de uma forma indesejada. E, como sabemos das aulas de biologia, se o parasita matar o hospedeiro, acabará morrendo também.
Portanto, se quiserem usar um grabber (não importa qual seja), criem uma relação de simbiose "saudável" com o hospedeiro: descubram de qual site o grabber busca as informações e façam visitas regulares a ele. Cliquem em alguns banners publicitários. Assinem a newsletter do site. Visitem e escrevam no fórum. Ou seja, mantenham o site "vivo". Do contrário, ficaremos sem grade de programação do mesmo jeito.
Agora, o tutorial, que é baseado num artigo escrito pelo mac no fórum do KnoppMyth. Eu fiz algumas modificações no script, mas a base é a mesma:
- Baixe o arquivo zipado da página de downloads do TVxb;
- Crie uma pasta chamada TVxb sob /home/mythtv;
- Descompacte o conteúdo do arquivo nessa pasta;
- Baixe o arquivo de configuração e salve-o como TVxb.ini na pasta ini que fica debaixo da TVxb;
- Edite o arquivo de cofiguração, transformando em comentários ("!" no início da linha) os comandos referentes aos canais dos quais você não quer obter informações. Sugiro que você estude a documentação do TVxb para adaptar o arquivo às suas necessidades;
- como root, dê os comandos "apt-get install sysutils" e "apt-get install wine";
- Usando o mythtv-setup (alt-s), inclua os canais no Mythtv (channel editor). Atenção para o campo XMLTV ID, que deve conter exatamente o mesmo conteúdo do código que aparece entre colchetes ("[" e "]") no arquivo .ini. É através desse código que o mythfilldatabase fará a correspondência entre o conteúdo do arquivo xmltv e os canais do banco de dados do Mythtv;
- Copie o script abaixo criando o arquivo grabber.sh na pasta TVxb (atenção às quebras de linha). Torne o arquivo executável com "chmod +x grabber.sh". Verifique, na última linha, se os parâmetros passados ao mythfilldatabase estão de acordo com sua instalação. "1" significa a primeira fonte de sinal. Verifique pelo mythweb (a partir de outra máquina), se está correto.
find /home/mythtv/TVxb/html -type f -mtime +7 -exec rm "{}" ";"
cd /home/mythtv/TVxb/bin
mv -f /home/mythtv/TVxb/bin/xmltv.xml /home/mythtv/TVxb/bin/xmltv.xml.old
rm /home/mythtv/TVxb/listings.xml
export DISPLAY=:0.0
wine TVxb.exe > /home/mythtv/TVxb/log/wine-output 2>&1
sleep 2
dos2unix /home/mythtv/TVxb/bin/xmltv.xml
cat /home/mythtv/TVxb/bin/xmltv.xml | sed s/\ +0000//g > /home/mythtv/TVxb/listings.xml
mythfilldatabase --file 1 -1 /home/mythtv/TVxb/listings.xml --update > /home/mythtv/TVxb/filldb-output 2>&1
Desta forma, se tudo estiver ok, ao executar /home/mythtv/TVxb/grabber.sh você verá uma janela com a log do TVxb e, quando ela se fechar, a grade de programação será importada para o Mythtv. Se algo não der certo, verifique as logs do sistema (e os arquivos criados com o desvio de saída padrão ">" no script) para saber o que ocorre.
No meu PVR, eu coloquei esse comando na crontab do usuário mythtv com freqüência diária. No mesmo horário, criei uma janela no MythWelcome para que a máqina seja ligada automaticamente pouco antes do início da execução do grabber e desligue-se uma hora depois. Assim eu garanto que a grade de programação está atualizada e não perco os programas que gosto de assistir, mesmo que eu não esteja em casa no horário em que são exibidos.
E essa liberdade é ótima. Seja livre você também!