[Perl] Google Books Downloader

Posted on 15:42 by Xianur0

En pocas palabras, lo que hace es descargar dentro de la carpeta tmp (que tiene que estar creada en el mismo directorio que el perl), todas las paginas del libro especificado, las descarga una por una como imagen, no he tenido tiempo de buscar otra manera, pero creo que de momento es util para lo que esta planeado (bajar los libros para poder leerlos offline)...

esta diseñado para books.google.es, pero basta con cambiar el .es por .com (o lo que sea xD) y funcionara igual ;)...


xianur0@Zer0-Null:~$ perl gobookdownloader.pl 0EzERMZHkTIC 0 240 200.219.244.122:80
[-] Consulta inicial realizada, tenemos la cookie: PREF=ID=c882825959dda2ec:TM=1272916829:LM=1272916829:S=jA_XjmG4h8KbYi8K
http://books.google.es/books?id=0EzERMZHkTIC&pg=PA1&img=1&zoom=3&hl=es&sig=ACfU3U2Xm9aZPXoDIMgy91oaU-I0t892Dg
Descargada pagina: 0
http://books.google.es/books?id=0EzERMZHkTIC&pg=PA1&img=1&zoom=3&hl=es&sig=ACfU3U2Xm9aZPXoDIMgy91oaU-I0t892Dg
Descargada pagina: 1
http://books.google.es/books?id=0EzERMZHkTIC&pg=PA1&img=1&zoom=3&hl=es&sig=ACfU3U2Xm9aZPXoDIMgy91oaU-I0t892Dg
Descargada pagina: 2
http://books.google.es/books?id=0EzERMZHkTIC&pg=PA5&img=1&zoom=3&hl=es&sig=ACfU3U1cFZ1iIemGZygZ9-QCXiQSQoJLHg
Descargada pagina: 3
http://books.google.es/books?id=0EzERMZHkTIC&pg=PA6&img=1&zoom=3&hl=es&sig=ACfU3U0BFY-HtIbIjoEIdsvgcnKPhpeX8g
Descargada pagina: 4
http://books.google.es/books?id=0EzERMZHkTIC&pg=PA6&img=1&zoom=3&hl=es&sig=ACfU3U0BFY-HtIbIjoEIdsvgcnKPhpeX8g
Descargada pagina: 5
http://books.google.es/books?id=0EzERMZHkTIC&pg=PA6&img=1&zoom=3&hl=es&sig=ACfU3U0BFY-HtIbIjoEIdsvgcnKPhpeX8g
Descargada pagina: 6
http://books.google.es/books?id=0EzERMZHkTIC&pg=PA11&img=1&zoom=3&hl=es&sig=ACfU3U3G4_FjT1tZ4UR2Fl4Dh20ETPf8vw
Descargada pagina: 7
http://books.google.es/books?id=0EzERMZHkTIC&pg=PA12&img=1&zoom=3&hl=es&sig=ACfU3U1q4ErPv7WAB9OP3AYpAyAOvz-Q1A
Descargada pagina: 8
http://books.google.es/books?id=0EzERMZHkTIC&pg=PA13&img=1&zoom=3&hl=es&sig=ACfU3U2BQMNwDuVjuZkiUv_zZXXd1AAHmw
[...]


en la siguiente version programo que pase las imagenes a un PDF (para poder leer mas comodamente los libros).

Ahora sin mas el codigo:


#!/usr/bin/perl
use LWP::UserAgent;
# Google Books Downloader by Xianur0
# uxmal666@gmail.com
# nota: este codigo solo fue diseñado con la utilidad de poder leer los libros de forma offline
# el autor no se hace responsable del uso que se le de.
$ua = LWP::UserAgent->new;
$id = $ARGV[0];
$inicio = $ARGV[1];
$final = $ARGV[2];
$proxy = $ARGV[3];
die("Google Books Downloader by Xianur0\nUso: perl gobookdownloader.pl [id_libro] [pag. inicial] [pag. final] [Proxy (opcional)]") if($final eq "");
$cookie = "";
$contador = 0;

sub descargar {
$aurl = $_[0];
$id = $_[1];
$cookie = $_[2];
$proxya = $_[3];
$extencion = ".jpg";
($contenido,$cookie, $tipo) = consultar($aurl,$cookie,"http://books.google.es/books?id=".$id."&printsec=frontcover&source=gbs_slider_thumb",$proxya);
if($contenido ne "") {
if($tipo eq "image/jpeg") {
$extencion = ".jpg";
}
if($tipo eq "image/png") {
$extencion = ".png";
}
else {
$extencion = ".jpg";
}
open(ARCHIVO,">tmp/".$id."-".$contador.$extencion);
binmode ARCHIVO;
print ARCHIVO $contenido;
close(ARCHIVO);
print $aurl."\n";
print "Descargada pagina: ".$contador."\n";
$contador++;
}
}

sub consultar {
$url = $_[0];
$cookie = $_[1];
$urlini = $_[2];
$proxy = $_[3];
my $contettype = "";
$ua->agent("Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.1.9) Gecko/20100401 Ubuntu/9.10 (karmic) Firefox/3.5.9");
$ua->proxy(['http'] => 'http://'.$proxy) if($proxy ne "");
$req = HTTP::Request->new(GET => $url);
$req->header('Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
$req->header('Accept-Language' => 'es-es,es;q=0.8,en-us;q=0.5,en;q=0.3');
$req->header('Accept-Charset' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7');
$req->header('Cache-Control' => 'max-age=0');
$req->header('Cookie' => $cookie);
$req->header('Referer' => $urlini) if($urlini ne "");
$res = $ua->request($req);
if ($res->is_success) {
$contenido = $res->content;
$respuesta = $res->as_string;
if($respuesta =~ /Set-Cookie: (.*?);/) {
$cookie = $1;
}
if($respuesta =~ /Content-Type: (.*?)\r?\n/) {
$contettype = $1;
}
} else {
if($res->status_line =~ /(500 Can't connect to|503 Service Unavailable)/) {
die("[x] IP Baneada (o proxy ".$proxy." invalido), usar otro proxy...\n");
}
return ("",$cookie,"text/html");
}
return ($contenido,$cookie,$contettype);
}
print "\t\t\t\tGoogle Books Downloader by Xianur0\n";
$urlbase = "http://books.google.es/books?id=".$id."&printsec=frontcover&source=gbs_slider_thumb";
($contenido,$cookie,$tipo) = consultar($urlbase,$cookie,"",$proxy);
print "[-] Consulta inicial realizada, tenemos la cookie: ".$cookie."\n";
for($i = $inicio;$i<=$final;$i++) {
$estaurl = '
http://books.google.es/books?id='.$id.'&lpg=PP1&pg=PA'.$i.'&jscmd=click3';
($contenido,$cookie,$tipo) = consultar($estaurl,$cookie,$urlbase,$proxy);
($iurl) = ($contenido =~ /^{"page":\[{"pid":".*?","src":"(.*?)"/);
$iurl =~ s/\\u0026/&/g;
if($iurl ne "") {
descargar($iurl,$id);
} else { $final++; }
}
print "Descargado exitosamente! :)\n";

2 comentarios:

Javier dijo...

Pues la neta está chingon asi por el momento, aliviana bastante. Ya luego puedes subirlo a http://issuu.com/ y lo leer mas al tiro :P

ricardowiba dijo...

bueno, ya que puede funcionar, por favor, expliquen como hacer para que funcione, muchos no sabemos de programación, pero si nos lo explican solo para usar esta utilidad, pues estaría super, gracias.