martes, septiembre 22, 2009

Fotos de Soho v0.2

Después de un tiempo, he realizado la versión 0.2 de un script para descargar las imagenes de soho que busca ser multiplataforma, hecho en python, depende de la libreria PIL.
Para usarlo hay que crear una carpeta y alli poner el script, luego ejecutarlo como:


python2.5 soho.py


o


chmod a+x soho.py
./soho.py


Este es el código:


#! /usr/bin/env python2.5
import os, sys
from urllib2 import Request, urlopen, URLError
from PIL import ImageFile
URL = 'http://www.soho.com.co/galerias_new/mod_'
MODELO_INICIO = 205
MODELO_FINAL = 577
flag_descargar = True




def make_request(full_url):
    print 'Obteniendo imagen de %s ' % full_url 
    req = Request(full_url)
    try:
        response = urlopen(req)
    except URLError, e:
        if hasattr(e, 'reason'):
            print 'We failed to reach a server.'
            print 'Reason: ', e.reason
        elif hasattr(e, 'code'):
            print 'The server couldn\'t fulfill the request.'
            print 'Error code: ', e.code
    else:
        return response


def save_image(response, name):
    "La imagen"
    parser = ImageFile.Parser()
    parser.feed(response.read())
    image = parser.close()
    image.save(name)


while flag_descargar:
    """
    TODO: mejorar los nombres de las carpetas y de los archivos
    """
    NOMBRE_CARPETA = 'soho'
    if 1 <= MODELO_INICIO < 10:
        NOMBRE_CARPETA+='000'
    elif 10 <= MODELO_INICIO < 100:
        NOMBRE_CARPETA+='00'
    elif 100 <= MODELO_INICIO < 1000:
        NOMBRE_CARPETA+='0'
    NOMBRE_CARPETA+=str(MODELO_INICIO)
    if not os.path.exists(NOMBRE_CARPETA):
        full_url = URL+str(MODELO_INICIO)+'/f1.jpg'
        response = make_request(full_url)
        if response:
            "Esto se ejecuta si encuentra la primera foto"
            "Crea la carpeta"
            os.mkdir(NOMBRE_CARPETA)
            save_image(response, NOMBRE_CARPETA+'/f1.jpg')
            "Guarda el resto de imagenes"
            contador = 2
            while True:
                full_url = "%s%s/f%s.jpg" % (URL,str(MODELO_INICIO),str(contador))
                response = make_request(full_url)
                if response:
                    nombre_foto = '%s/f%s.jpg' % (NOMBRE_CARPETA, contador)
                    save_image(response, nombre_foto)
                    contador += 1
                else:
                    break
        else:
            MODELO_INICIO += 1
    else:
        print "YA EXISTE LA CARPETA %s" % NOMBRE_CARPETA
        if MODELO_INICIO <= MODELO_FINAL:
            MODELO_INICIO += 1
        else:
            flag_descargar = False