segunda-feira, 16 de abril de 2012

Como extrair seus torrents e baixar legendas atuomaticamente usando o transmission

E ae galera,

Para fechar essa série de posts vou mostrar como eu integrei meus dois scripts anteriores, o de unrar automático e de baixar legendas automático com o transmission.

Eu vou usar o mesmo método que usei no primeiro post. Chamar um script ao final do download de um torrent. Da uma lida lá para lembrar como faz.

Bem, meu script é bem simples e nem coloquei no github:



source $HOME/Development/Autorar/post_unrar.sh
source $HOME/Development/Autosubs/search_and_destroy.sh `python $HOME/Development/Autosubs/get_sub_name.py $TR_TORRENT_NAME` $TR_TORRENT_DIR/$TR_TORRENT_NAME

O que ele faz é chamar meus outros scripts passando como paramêtro o nome do torrent certo e a pasta para onde ele foi descompactado. No meu caso coloquei para a mesma pasta do download, pois achei mais prático.

Vocês podem ver que eu uso um script python `get_sub_name.py` para pegar o nome certo da legenda. Esse script está uma merda, mas eu vou colocar ele aqui mesmo assim:

import sys

full_name = sys.argv[1]
short_name = ''
found = False

if full_name.find('.720p') != -1:
    short_name = full_name[:full_name.find('.720p')]
    found = True

if full_name.find('.HDTV') != -1 and not found:
    short_name = full_name[:full_name.find('.HDTV')]


print short_name

Ele simplesmente apaga o nome do torrent até onde tem escrito .720p ou .HDTV. Eu não fiz para o .1080p por que eu nunca baixo nada em 1080p, mas fiquem a vontade para adicionar isso e me mandem pull requests pelo github.

É isso ae, agora é só adicionar ao transmission esse script e curtir a sua preguiça!

Agora eu vou montar um media center automático usando o Plex  que até minha mãe vai conseguir assistir o que quiser.

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!

quinta-feira, 12 de abril de 2012

Como descompactar torrents automaticamente

Assim como todo bom programador sou muito preguiçoso, por isso tento automatizar tudo que consigo. Meu ultimo feito foi extrair meus torrents automaticamente para a pasta certa.

Já faz um tempo que eu tenho muita preguiça de toda vez que termina um download do torrent eu tenho que ir lá, descompactar e mover para uma pasta separada.

Bem, hoje eu dei um basta nisso. Usando o Transmission como gerenciador de torrent, o unrar e um script simples.

Se vocês também não tem tanta paciência quanto eu vale a pena seguir uns passos básicos e automatizar seus torrents.

Disclaimer: Eu fiz todo o processo no meu Mac, mas também deve funcionar no Linux.

O Script é bem simples e você pode baixa-lo no meu github.

Eis o script com comentários do que cada linha está fazendo. Lembrando que eu não sou muito fluente em shell script, então podem mandar sugestões de refatorações :D



1 #!/bin/sh
#Cria uma pasta em ~/Movies com o nome do seu torrent.
#Você pode mudar onde essa pasta vai ser criada.
2 mkdir ~/Movies/$TR_TORRENT_NAME
#Agora entramos na pasta onde tem o arquivo .rar
3 cd $TR_TORRENT_DIR/$TR_TORRENT_NAME
#Achaei o arquivo .rar
4 CURRENT_FILE=$(ls | grep rar | xargs echo)
#Extrai o arquivo para a pasta que você criou logo no inicio.
# Aqui é importante notar que é preciso usar o caminho completo para o unrar. Dica do Flávio Amieiro
5 /usr/local/Cellar/unrar/4.0.7/bin/unrar x $CURRENT_FILE ~/Movies/$TR_TORRENT_NAME

Essas variáveis TR_... são do Transmission te ajudam a gente a fazer tudo. Além dessas temos ainda:

  • TR_APP_VERSION
  • TR_TIME_LOCALTIME
  • TR_TORRENT_DIR
  • TR_TORRENT_HASH
  • TR_TORRENT_ID
  • TR_TORRENT_NAME

Agora que você já tem o script basta altera-lo caso ache necessário e salva-lo onde quiser.

Depois baixe o Transmission e o unrar e instale os dois.
Dica: Se você usa Mac, vale a pena olhar o brew.

Depois entre no Transmission em "Preferências" -> "Transferências" -> "Gerenciamento"
Lá vai ter um checkbox: "Chamar Script". Marque ele e selecione o script que você criou.

Pronto! Assim que os seus torrents terminarem eles serão descompactados para a pasta que você escolheu.

Uma outra dica irada é que o Transmission também pode ficar checando uma pasta por novoc torrents e adiciona-los sozinho. Basta ir em "Preferências" -> "Transferências" -> "Auto add"

Espero que ajude mais gente. Minha idéia agora é conseguir buscar as legendas sozinho também e depois posso montar um media center irado!!