Descargando gallerias de Televisa Deportes

Hola que tal después de un tiempo sin escribir entrada alguna, posteo algo que hice al  tomarme un rato libre.

Uno de mis pasatiempo es en ocasiones ver imágenes de muchachonas por la nube, debo confesar(con algo de vergüenza) que en ocasiones suelo visitar sitios como el de televisadeportes.com . Y en esta ocasión dejo un par de instrucciones del como descargar una galería completa de la pagina http://www.televisadeportes.com/fotogalerias/, esto a a través de un script al cual he denominado tIdiotizaGallery.py y que comparto:

http://gist.github.com/355585

Descarga las imágenes de una galería de televisadeportes.com

Descarga las imágenes de una galería de televisadeportes.com

Corrida de Ejemplo:

#1ro descargamos el script
wget http://gist.github.com/raw/355585/5977f5ba1cc95e9d548cd23e5566e01c540554a0/tIdiotizaGallery.py
#2do le damos permisos de ejecución al script
chmod +x tIdiotizaGallery.py
#3ro lo ejecutamos con la url de la galeria que queremos descargar
./tIdiotizaGallery.py URL_GaleriaTelevisaDeportes.com

Aqui les dejo el ejemplo en un video:

llegando mas lejos:

Para aquellos que no solo se conforman con el código si no también desean una explicación de su funcionamiento, ahí les va una breve explicación:

Resulta que televisadeportes.com al igual que muchas paginas ocupan JavaScript para hacer dinámicas las transiciones de sus imágenes en sus galerías, es nos da una gran ventaja ya  que al estar en un lenguaje de programación esto implica que la información se encuentra en un lenguaje de la forma ‘normal’ y puede ser fácilmente parseable.

Estudiando el code de televisa deportes:

Si observamos el código que nos devuelve la siguiente galería http://www.televisadeportes.com/fotos/bellezas-torneo-bicentenario-2010/18495 encontraremos que el código que nos interesa es :

<script language="javascript">
		var comment_tpl = "little";
		// Nombre de la Galería
		var gallery_name = 'Bellezas del Bicentenario J-13';
		// Imágenes de los Slides de la Fotogalería
		var gallery_images = new Array();
				gallery_images[0] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_01-1418e900-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[1] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_02-14a5026e-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[2] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_03-15377a86-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[3] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_04-15be0d62-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[4] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_05-163946ee-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[5] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_06-16bf186e-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[6] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_07-173f0628-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[7] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_08-17beed48-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[8] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_10-183bdeac-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[9] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_11-18c12062-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[10] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_12-1947dc6a-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[11] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_13-19b8f170-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[12] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_14-1a38cfe4-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
				gallery_images[13] =["http://i2.esmas.com/galerias/fotos/2010/4/bellezas_15-1abaacd0-90f9-102d-a60a-0019b9d5c8df.jpg","Foto: Mexsport Prohibida su reproducción total o parcial. esmas.com © 2010",""];
</script>

Como podemos observar las imágenes se encuentran en una variable la cual es un arreglo de datos, y cada una puede ser atrapada a través de la expresión regular(‘gallery_images\[([0-9]+)\] \=\[([^]]+)‘) de la linea 52 del script, por otra parte el nombre de la carpeta a crear y que sera la contenedora tendra por nombre el de la galería la cual es el valor de la variable gallery_name y para atrapar dicho valor hago uso de la función String.find(s) en las lineas 47,48 y 49. Para ser honesto creo que hubiera quedado mas elegante con una sola expresión regular, pero en fin así se me ocurrió en el momento de desarrollar el script y así quedo :¬(.

Version HTML del script

El script en python funciona perfectamente pues del análisis del caso del que se basa es correcto, sin embargo comprendo que muchos usuarios no estan familiarizados con python y el ejecutar el script les pueda resultar difícil(sobre todo a usuarios q usan distribuciones de S.O. donde python no viene instalado por defecto) . por esta razón paso el script a una versión html(con javascript) disponible:

Genera links de galerias d televisaDeportes y esMas.com

Genera links de galerias d televisaDeportes y esMas.com

http://gist.github.com/425877

 

Versión Bash

.

En bash creo que se puede hacer una implementación bastante simple, dejo aquí una nueva versión que agrego:

Versión en bash

Versión en bash

wget con un ejemplo descargando las revistas de diasiete.com

Introducción:

GNU Wget es una herramienta de software libre que permite la descarga de contenidos desde servidores web de una forma simple. Su nombre deriva de World Wide Web (w), y de «obtener» (en inglés get), esto quiere decir: obtener desde la WWW.

Fuente: http://es.wikipedia.org/wiki/GNU_Wget

Por otra parte si eres de aquellos usuarios que solo usan Güindows :¬S   te tengo una buena noticia existe una versión de este programa disponible para Windows (espero q  en un tiempo cambies a un sistema GNU). Pues existe un proyecto denominado GNUwin32 el cual es un conjunto de software disponible para las versiones de Güindows :¬S de 32Bits (sitio: http://gnuwin32.sourceforge.net/packages.html) dicha versión se encuentra en:

http://gnuwin32.sourceforge.net/packages/wget.htm

descargar setup wget

descargar setup wget para Güindows

Incluso es factible acceder al source (algo bueno del FS)  por si gustas adentrarte mas en el tema.

Ejemplo Practico:

La revista día siete tiene sus revistas ubicadas en http://xml.diasiete.com/pdf/ como se puede ver en la siguiente imagen.

ruta de las revistas de diasite.com

se puede notar en la imagen que navegue en la ruta 339 (el núm. de revista)  pero ahi me encontré con que la revista estaba dividida en varios pdf’s.

La idea de descargar archivo por archivo atraves del navegador implica una tarea muy monotona y aburrida :¬(

Es aquí donde toma sentido todo lo previo ya que podemos pensar de la siguiente manera.

1.- queremos descargar los archivos a partir de la ruta http://xml.diasiete.com/pdf/

2.- Solamente nos interesan los archivos pdfs.

Basta con ejecutar la siguiente sentencia:

donde:

-A.pdf es para que solo descargue los archivos pdfs

Después de -A. suele venir la extensión que queremos que wget descargue; si por ejemplo queremos descargar archivos con extensión doc haremos -A.doc

-r  para que lo haga en forma recursiva

Esto quiere decir que empezara a descargar e replicara su comportamiento por cada vinculo que encuentre.

-l5 para que recorra solo 5 niveles

Se entiende por nivel a cada sub carpeta que recorra (cada / en la URL es un nivel) seleccione el 5 simplemente pensé que seria un buen limite

-np Para que no recorra a su directorio padre(..)

En este caso http://xml.diasiete.com/ si nos damos cuenta el primer vinculo de la pagina es para subir al directorio padre cosa que no queremos.

-N es para que no cambie la fecha y hora de la estructura stat del archivo

cada archivo contiene una serie de información la cual es guardada en una estructura denominada stat : fecha/hora de creación, de modificación, etc.. (mas info)

Corrida de ejemplo:

dejo este video disponible en : http://kissyoutube.com/watch?v=xY8y1fTCAwY

Ligas recomendadas:

wget con ejemplos (Linuxtotal):

http://www.linuxtotal.com.mx/index.php?cont=info_admon_017

Limitar la velocidad de descarga en Wget (blog del amigo @nierox):

http://www.nierox.com/2009/10/limitar-la-velocidad-de-descarga-en-wget/

servidor de repositorio linux parte1

Estaba pensando en como poder disminuir el ancho de banda el dia del Flisol investigando algo en la red encontre un poco de informacion,hubo algo que me intereso bastante era de como instalar un mirror de paquetes en entorno local pues pense que seria ideal ademas que es una muy buen servicio en la industria ya que solo descargas paquetes en una maquina con debian o ubunto le instalas el paquete approx configuras un archivo de los clientes y listo!, si un cliente busca un paquete lo va a buscar en la maquina de red local.

Dejo un par de ligas que se me hicieron interesantes.

http://packages.debian.org/es/squeeze/approx

http://www.galpon.org/wiki/index.php/Approx%2Bdebtorrent_howto

http://www.ecualug.org/2007/sep/25/blog/elsanto/como_crear_un_servidor_de_repositorio_debian_para_nuestra_red_local_con_approx

Se me ocurre una aplicación utilizando el SO Lliurex el cual es una distro basada en ubuntu(a su vez en Debian) la cual esta orientada para la educación esta desarrollada en españa y es una buena herramienta para las aulas de niños y sin duda seria una buena aplicacion en el campo de la educación.

Bueno espero pronto subir el avance de mi servidor de paquetes.