Código de Python - descargar de Issuu

descargar de Issuugráfica de visualizaciones


Python

estrellaestrellaestrellaestrellaestrella(1)
Actualizado el 09 de Abril del 2015 por Pal (Creado el 08 de Abril del 2015)
1.838 visualizaciones desde el 08 de Abril del 2015. Una media de 28 por semana
Con la url de una publicación de Issuu.com, descarga el libro completo y lo deja en ~/Documentos en formato .pdf

Requerimientos

Tener instalado el paquete pdftk (apt-get install pdftk)

0.1
estrellaestrellaestrellaestrellaestrella(1)

Actualizado el 09 de Abril del 2015 (Creado el 08 de Abril del 2015)gráfica de visualizaciones de la versión: 0.1
1.839 visualizaciones desde el 08 de Abril del 2015. Una media de 28 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#!/usr/bin/env python
'''
Created on 19/02/2015
Primer programa en Python
@author: palvilla
'''
 
import pygtk
import gtk
import os
import re
import urllib2
import subprocess
 
" Interface Grafica - Clase para el Loop principal"
class MainGui:
    def __init__(self):
        "creamos una ventana"
        self.ventana = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.ventana.set_title('Descarga Issuu')
        "Es buena idea hacer esto para todas las ventanas"
        self.ventana.connect("destroy", lambda wid: gtk.main_quit())
        self.ventana.connect("delete_event", lambda a1,a2:gtk.main_quit())
        "grosor de la ventana"
        self.ventana.set_border_width(10)
        "creamos una tabla de 2x2"
        tabla1 = gtk.Table(8,2,gtk.TRUE)
        "metemos la tabla en la ventana"
        self.ventana.add(tabla1)
 
        "rellenamos"
        self.etiq_nombre = gtk.Label("Nombre del libro a crear? ")
        tabla1.attach(self.etiq_nombre,0,1,0,1)
        self.mete_nombre = gtk.Entry()
        tabla1.attach(self.mete_nombre,0,1,1,2)
 
        self.etiq_url = gtk.Label("Direccion Url: ")
        tabla1.attach(self.etiq_url,0,1,2,3)
        self.mete_url = gtk.Entry()
        tabla1.attach(self.mete_url,0,2,3,4)
 
        self.boton_ok = gtk.Button("Crear Libro")
        self.boton_ok.connect("clicked",self.empieza)
        tabla1.attach(self.boton_ok,1,2,6,7)
        self.boton_ko = gtk.Button("Salir")
        self.boton_ko.connect("clicked",self.evento_de_borrado, None)
        tabla1.attach(self.boton_ko,0,1,6,7)
 
        self.ventana.show_all()
 
    def evento_de_borrado(self, widget, event, data=None):
        gtk.main_quit()
        return gtk.FALSE
 
    def error(self, message):
        "Ventana generica de error. Se le pasan los mensajes a mostrar"
        dialog_error = gtk.MessageDialog(parent=None, flags=0, buttons=gtk.BUTTONS_OK)
        dialog_error.set_title("Atencion")
        label = gtk.Label(message)
        dialog_error.vbox.pack_start(label, True, True, 0)
        "Con show_all() mostramos el contenido del cuadro de dialogo (en este \
        caso solo tiene la etiqueta) si no se hace el dialogo aparece vacio "
        dialog_error.show_all()
        "El run y destroy hace que la ventana se cierre al apretar el boton"
        dialog_error.run()
        dialog_error.destroy()
 
    def empieza(self, widget):
        "empezamos recuperando datos de las cajas de texto"
        while True:
            libro = self.mete_nombre.get_text()
            if libro == "":
                self.error("Me falta el nombre del libro")
                print "introduzca un nombre"
                self.mete_nombre.set_text("")
                self.mete_url.grab_focus()
                return
            else:
                libro = libro.replace(" ","_")
                print " Nombre del libro " + libro
 
 
            url_user=self.mete_url.get_text()
            try:
                '''  Comprobamos que la direccion es correcta '''
                print "Comprobando la pagina. Espere un momento" , url_user
                respuesta=urllib2.Request(url_user)
                handle = urllib2.urlopen(url_user)
                break
            except:
                self.error("Aqui no encuentro ningun libro. Comprueba la direccion.")
                self.mete_url.set_text("")
                self.mete_url.grab_focus()
                return
 
        pagina = handle.readlines()
        for x in pagina:
            m = re.search(r'(<meta property=\"og:image\")', x, re.I)
            if m:
                # hemos encontrado la linea
                t = re.search(r'(http://image.issuu.com/)(.[^/]*)',x,)
                dir_tmp = "~/temp/"+t.group(2)
                dir_tmp = os.path.expanduser(dir_tmp)
                Crea_dir(dir_tmp)
                descargajpgs(t.group(2))
 
                for (path, dirs, files) in os.walk(os.getcwd()):
                    numpag = len(files)
                cadena = ''
                for i in range(numpag):
                    # convertirmos una a una los .jpg en .pdf
                    comando = 'convert '+str(i+1)+'.jpg '+str(i+1)+'.pdf'
                    Ejecuta_comando(comando)
                    cadena = cadena + str(i+1)+'.pdf '
 
                print "Creando el libro "+libro+".pdf"
 
                comando= 'pdftk '+cadena+'cat output '+libro+'.pdf'
                Ejecuta_comando(comando)
 
                '''Movemos el libro a Documentos '''
                comando = 'cp '+libro+'.pdf ~/Documentos/'
                Ejecuta_comando(comando)
                ''' borramos  limpiamos y salimos '''
                Borra_dir(dir_tmp)
                self.mete_nombre.set_text("")
                self.mete_url.set_text("")
                self.error("Creado el libro "+libro+" en ~/Documentos")
                return False
 
def Crea_dir(dir):
    ''' Creamos el directorio temporal para la descarga de .jpg'''
    try:
        os.makedirs(dir)
    except OSError:
        if not os.path.isdir(dir):
            raise
    finally:
        os.chdir(dir)
        print os.getcwd()
        return
 
def Borra_dir(dir):
    for root, dirs, files in os.walk(dir):
        for name in files:
            os.remove(os.path.join(root, name))
        for name in dirs:
            os.rmdir(os.path.join(root, name))
    os.rmdir(root)
    return
 
def Ejecuta_comando(x):
    salida = subprocess.Popen(x, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = True).communicate()[0]
    salida = salida.split(os.linesep)[0] # introduce un retorno de linea como segundo parametro de salida 
    return (salida)
 
def descargajpgs(cod):
    descarga = 0
    while True:
        descarga += 1
        url = 'http://image.issuu.com/'+cod+'/jpg/page_'+str(descarga)+'.jpg'
        print url
        print descarga
        try:
            req = urllib2.Request(url)
            respuesta = urllib2.urlopen(req)
        except urllib2.URLError as e:
            if hasattr( e, 'reason' ):
                print( 'Fail in reaching the server -> ', e.reason )
                break
 
            elif hasattr( e, 'code' ):
                print( 'The server couldn\'t fulfill the request -> ', e.code )
                break
        else:
            with open( str(descarga)+'.jpg', 'wb' ) as fo:
                fo.write( respuesta.read() )

if __name__ == "__main__":
    MainGui()
    gtk.main()



Comentarios sobre la versión: 0.1 (1)

Imágen de perfil
xve
09 de Abril del 2015
estrellaestrellaestrellaestrellaestrella
Esta perfecto!!!

Lo único, que he tenido que modificar la url de copia, ya que no me realizaba la copia correctamente.
He tenido que poner:
comando = 'cp '+dir_tmp+"/"+libro+'.pdf ~/Documents/'
Responder

Comentar la versión: 0.1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s3130