La sanguijuela de cuevana

UPDATE Hay una nueva versión con interfaz gráfica acá

Parece que se me hizo hobby chupar links de cuevana.tv y el experimento ahora tiene su versión pythonica: Cuevanalinks .

Es un pequeño proyecto que permite "conseguir links" de contenidos ofrecidos en cuevana, sirviendo estos como fuentes a manejadores de descargas como Tucan o JDownloader.

Más allá de los resultados, me ha tenido entretenido algunas horas y me permitió aprender (o al menos resolver) algunas cosas: cómo se usa mercurial (y en particular un merge conflictivo con Meld), cómo se escribe un setup.py, como se distribuye via PyPi, etc.

También, por supuesto, me permitió usar dos utilidades que me gustan mucho: PyQuery y plac.

La aplicación tiene dos módulos/componentes:

  1. Una biblioteca que intenta funcionar como API de Cuevana y es la encargada de scrappear la web en busca de la info interesante.
  2. Una interfaz de línea de comandos que permite buscar links y bajar subtitulos de contenidos específicos

System Message: WARNING/2 (<string>, line 37)

Explicit markup ends without a blank line; unexpected unindent.

Para qué sirve

Por ejemplo, para bajar la temporada 4 completa de Mad Men, con subtitulos, se podría hacer esto:

$ cuevanalinks 'mad men' s04 -s > madmen.txt && tucan -d -i madmen.txt

Instalación

Para instalarlo, basta con usar pip

$ sudo pip install cuevanalinks

O con easy_install:

$ sudo easy_install cuevanalinks

O bien, bajar el paquete y ejecutar :

$ tar xvfz CuevanaLinks-0.1.tar.gz
$ cd CuevanaLinks-0.1
$ sudo python setup.py install

Algunas posibilidades de la API

El CLI por ahora sólo expone una parte pequeña de la API, pero hay varias posibilidades. Por ejemplo:

>>> from cuevanalinks import cuevanaapi
>>> api = cuevanaapi.CuevanaAPI ()
>>> house = api.get_show ('house')
>>> house.plot
u'El doctor Gregory House, especialista en el tratamiento de enfermedades infecciosas, trabaja en un hospital universitario de Princetown, donde dirige una unidad especial encargada de pacientes afectados por dolencias extrañas y en la que colabora con un selecto grupo de aventajados ayudantes.'
>>> house7x1 = house.get_episode (7, 1)
>>> house7x1.title
'Now What?'
>>> house7x1.cast
['Hugh Laurie',
 'Lisa Edelstein',
 'Omar Epps',
 'Jesse Spencer',
 'Jennifer Morrison',
 'Robert Sean Leonard',
 'Olivia Wilde',
 'Peter Jacobson']
>>> house7x1.sources
['http://www.megaupload.com/?d=DM58TA0J',
 'http://www.filesonic.com/file/36841721/?',
 'http://bitshare.com/?f=67z435xm',
 'http://www.filefactory.com/file/caf85b9']
>>> house7x1.subs
{'ES': 'http://www.cuevana.tv/download_sub?file=s/sub/7888_ES.srt'}

Lo que falta

Si bien es lo más prolijito que he hecho, todavía está lejos de ser un trabajo completo, tanto en funcionalidades como en SQA

Un aspecto esencial es hacer test (perdón Nati Bidart ;-) ), para lo cual tengo que aprender a usar nose y minimock.

Respecto a funciones, algo importante es definir cómo resuelve el CLI el manejo de múltiples resultados para una búsqueda. Actualmente devuelve el resultado "más relevante" sin anoticiar al usuario de otras opciones.

También falta documentación! Veremos la próxima.

Comentarios, sugerencias, bugs

Todo aporte (ideas, código, etc.) es bienvenido. Si encuentran problemas, reportenlos.

No estoy seguro cuánto puede durar esto funcionando, ya que depende de que el funcionamiento del sitio no cambie o yo tenga mucho tiempo y ganas de andar parchando detrás. Por eso, si hay más interesados y usuarios, seguramente podremos hacerlo durar más.


El código de este artículo está disponible en github. ¿Encontraste un error? Por favor, enviame un pull request.

Comentarios

Comments powered by Disqus