segunda-feira, 16 de abril de 2012

Como baixar legendas automaticamente do legendas.tv

Fala galera!

No meu último post eu mostrei como eu fiz para extrair meus torrents automaticamente para uma pasta logo após a conclusão dele. Também disse que ia fazer uma forma de automatizar minhas legendas. Então eu fiz e vou mostrar para vocês.

Baixar legendas é sempre muito chato, tenho que entrar no site, buscar o que eu quero, baixar, extrair e mover para onde eu quero. Automatizei essa porra logo! Quem quiser pode ir direto olhar os scripts no meu github. Forks são bem vindos para melhorar o que quiserem.

Vamos lá, vou mostrar como eu faço isso para que vocês entendam e possam fazer também.

Para começar meu arquivo principal é o search_and_destroy.sh. Vou marcar no código as partes e explicar depois:


#Primeira parte

curl -b $HOME/Development/Autosubs/cookies.txt --data "txtLegenda=$1&selTipo=1&int_idioma=1&btn_buscar.x=24&btn_buscar.y=7" http://legendas.tv/index.php?opcao=buscarlegenda > /tmp/legendas/html


#Segunda parte
/usr/bin/python  $HOME/Development/Autosubs/parse_html.py


sleep 1


#Terceira parte
rm -rf /tmp/legendas/legendas.tv
/usr/local/bin/wget --mirror --load-cookies $HOME/Development/Autosubs/cookies.txt -P /tmp/legendas/ http://legendas.tv/info.php?d=`cat /tmp/legendas/legenda_id.txt`&c=1


sleep 20


#Quarte parte
cd /tmp/legendas/legendas.tv
mv info\.php\?d\=`cat /tmp/legendas/legenda_id.txt`\&c\=1 legenda.rar


#Quinta parte
/usr/local/Cellar/unrar/4.0.7/bin/unrar x legenda.rar $2



Primeira parte:
Assim que o script roda ele faz a busca no legendas.tv por um nome passado por paramêtro. Depois ele salva o HTML gerado num arquivo em /tmp/legendas/.
Importante lembrar que é preciso ter o cookie da sessão para isso. Existem alguns plugins para o chrome/firefox que fazem isso, ou basta você usar o próprio curl para pega-lo:


curl --data "txtLogin=USERNAME&txtSenha=PASSWORD&entrar.x=20&entrar.y=6" http://legendas.tv/login_verificar.php -c cookies.txt


O que esse script faz é salvar o cookies num arquivo chamado cookies.txt na pasta onde está esse script
Todo dia você precisa pegar um cookie novo, então vc pode colocar isso no cron ou no próprio script. Eu prefiro no cron.

Segunda parte:
Agora que eu tenho o HTML da página de resultados eu posso "parsear" ele e pegar o primeiro resultado. Como eu pego o primeiro resultado é muito importante buscar pelo nome completo da sua legenda. Como por exemplo minha.serie.s01.e01.
Não inclua o 720p ou hdtv, pois isso confunde o legendas.tv
O código do parse é o parse_html.py:


from BeautifulSoup import BeautifulSoup


f = open('/tmp/legendas/html', 'r')
html = f.read()


soup = BeautifulSoup(html)
table = soup.find('table', {"class": "buscaDestaque"})
onclick = table['onclick']
subtitle_id = onclick[21:53]


f2 = open('/tmp/legendas/legenda_id.txt', 'w')
f2.write(subtitle_id)
f2.close
f.close()



Eu usei o BeautifulSoup para fazer o parse e simplesmente abro o arquivo HTML salvo, acho o id da legenda e salvo o id em /tmp/legendas/legenda_id.txt

Terceira parte:
Agora vem a magia negra. Como o legendas.php usa um redirect no PHP, o curl não consegue baixar o .rar direto, então eu baixo tudo que tem na página. Inclusive um arquivo com o nome de: `info.php?d=ID_DA_LEGENDA&c=1` que na verdade é o .rar que queremos.

Quarta parte:
Agora eu renomeio o arquivo `info.php?d=ID_DA_LEGENDA&c=1` para legenda.rar
Pode parecer loucura, mas funciona. Se alguém conseguir uma forma melhor por favor me mande um pull request!

Quinta parte:
Depois de esperar baixar tudo (sleep 20) eu extraio os arquivos para onde eu quiser.

Finalizando, eu rodo o comando assim:

$ ./search_and_destroy minha.serie.s01.e01 ~/minha/pasta/de/series


e pronto, tudo lá!

No próximo post vou mostrar como eu integrei isso ao Transmission para deixar tudo automático!

2 comentários:

  1. Bom dia Thiago! Achei excelente tua idéia. Uma pergunta... esses scripts rodam no Transmission QT for windows? grande abraço!

    ResponderExcluir
    Respostas
    1. Esses scripts estão em bash. Dai só funciona para linux/mac. Não sei como funcionar o transmission no windows e qual tipo de script ele te deixa rodar. Tem que ver no site deles. mas se ele rodar algum script vc pode usar a idéia e fazer um que rode no windows.

      Excluir