Te gustan las chicas de SOHO, descargatelas con PHP

[LMc] Jatt

Lanero Reconocido
15 Dic 2005
126
Bueno, éste es mi primer tuto de PHP. Hace mucho que no posteo mis tutos, pero la verdad es porque he estado un toque ocupado.

Hace algunas horas estuve viendo la página de soho. Obviamente andaba buscando ver las nenas que aparecen en tan suculenta revista. Así que entré aquí http://www.soho.com.co/wf_sohot.aspx que es donde colocan las galerías de las fotos tomadas a las modelos. Lo bueno
de esto es que la galería está hecha en Flash así con adblock encontré la ruta del .swf (http://www.soho.com.co/galeria_archivo.swf) y*** guarde el archivo.

1) Guardar .swf, la ruta se puede encontrar con adblock.

Luego, lo decompilé y me encontré con el siguiente fragmento de código:

Código:
http://www.soho.com.co/galerias/mod_".$i."/f".$j.".jpg

donde $i, representa el número actual del directorio por el cual el loop está pasando y $j es un numero que varía con respecto a cada foto. Se puede observar que todas las fotos se llaman fx.jpg donde x es un número ~f1.jpg, f2.jpg, f3.jpg etc...~. Finalmente se llama a la función imageJpeg que crea un archivo jpg que toma como parámetro un identificador de imagen, en este caso, le pasamos el identificador de imagen que anteriormente creamos, llamado $im y de segundo parámetros le pasamos la ruta donde queremos que se guarde, en mi caso lo voy a guardar en un directorio llamado modelos y cada foto que se guarde ahí va a obtener un nombre*** que contenga con el nombre de la modelo con el número de la foto, para que no se sobrescriban unas a otras.
Código:
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("galerias/mod_" + _root.IdGaleria + "/images.xml");

Como pueden ver, se crea una nueva instancia de la clase XML, luego carga un documento .xml que se encuentra en la carpeta de la carpeta mod_x donde x es un número, es decir, cada galería está en una carpeta independiente y cada carpeta contiene un archivo XML llamado images.xml.
Así que tenemos:


http://www.soho.com.co/galerias/mod_1/images.xml
http://www.soho.com.co/galerias/mod_2/images.xml
http://www.soho.com.co/galerias/mod_3/images.xml
http://www.soho.com.co/galerias/mod_4/images.xml
etc...

En pocas palabras, hay un directorio por cada modelo y cada directorio posee su propio archivo xml, que contiene las fotografías tomadas.

Ahora nos preguntamos, ¿Cuántos directorios hay (cuantas modelos)? Para esto, el siguiente fragmento de código lo explica.

Código:
calendario = new XML();
calendario.ignoreWhite = true;
calendario.onLoad = function (success)
{
*** ***// Código que no importa...
};
calendario.load("galerias/ComboBox.xml");

Aquí lo que se puede ver es que se crea un nuevo XML donde se carga un archivo llamado ComboBox, donde está ubicada la lista de las
modelos fotografiadas. http://www.soho.com.co/galerias/ComboBox.xml

Al verlo es un XML muy mal formateado, pero también se puede ver el "número de la modelo", el mas grande es 109 o sea que hay
109 directorios, aunque se omiten algunos que hay en el rango 1-109, pero en general pensemos que solo hay 109 directorios.

El último dato importante es que todas las imágenes están en formato .jpg, que es una ventaja para la elaboración del código final.

Bueno, después del análisis ya podemos elaborar el código para obtener lo siguiente, es una mescla de DOM con manejo de imágenes, un código bastante simple, pero potente a la ves.

Código:
<?php
for ($i = 1; $i <= 109; $i++) {
 $doc = new DOMDocument('1.0', 'UTF-8');
 $doc->load("http://www.soho.com.co/galerias/mod_".$i."/images.xml");
 $ls = $doc->getElementsByTagName("image");
 $modelo = $doc->getElementsByTagName("caption");
 for ($j = 1; $j <= $ls->length; $j++) {
*** $im = imagecreatefromjpeg("http://www.soho.com.co/galerias/mod_".$i."/f".$j.".jpg");
*** imagejpeg($im,"modelos/" . $modelo->item(1)->nodeValue . "_" . $j . ".jpg");
 }
}
?>

Con eso creamos un loop que se repetirá unas 109 veces, creando un objeto de la Clase DOMDocument en el que se
carga el archivo images.xml, que anteriormente dijimos que está ubicado en cada uno de los directorios, a eso se*** debe "mod_".$i."/images.xml", que hace que el loop pase por todos los directorios. LLamo al método getElementsByTagName, que me devuelve un objeto que contiene todos los elementos llamados "image", esto es debido a que el formato de estos XML es así

Código:
<pic>
<image>galerias/mod_[número de directorio]/F[número de foto].jpg</image>
<caption>[Nombre de la modelo]</caption>
<texto>*** </texto>
<autor>[Afortunado, digo fotógrafo]</autor>
</pic>

Image es la que contiene la ruta, así que al llamar al metodo getElementsByTagName, vamos a poder saber el número de fotos que se tomaron en la sesión, para poder generar el siguiente loop. A continuación vuelvo a llamar al método getElementsByTagName, pero esta
vez para pedir el nombre de la modelo, para poder generar el archivo que vamos a guardar en nuestro pc (o en un hosting mejor XD no seas masoquista como yo). Despues anidamos otro loop, que es el que se encargará de trabajar las imágenes y guardarlas en
nuestro disco duro; en ese loop, en la parte que es condicional se le dice que $j no sea mayor que $ls->length, que es el número total de fotos tomadas, que hallamos previamente con el método getElementsByTagName("image").

Se crea un identificador de imagen con la función imagecreateformjpeg, le pasamos como parámetros la dirección url

Código:
"modelos/" . $modelo->item(1)->nodeValue . "_" . $j . ".jpg"

Con $modelo->item(1)->nodeValue obtengo el valor del nodo 2 que está en el objeto modelo, que es el nombre de la modelo, luego concateno éste nombre con un "_" y luego con $j más la extensión .jpg

CONCIDERACIONES A TENER EN CUENTA:

1) Éste script relativamente dura bastante en ejecutarse, así que lo mejor que puedes hacer es aumentar el máximo tiempo de ejecución de script desde el php.ini, actualmente hay una función que hace esto pero no me acuerdo de su nombre así que pido que alguien si la sabe que la escriba con un nuevo post XD.

Código:
max_execution_time = NÚMERO EN SEGUNDOS

2) No recomiendo que ejecuten éste código desde su pc, ya que los hostings tienen algo llamado logs que registran todas las peticiones que haces, con esto solo lograras llenar mas de 700*** campos en esos logs con tu ip, que puede causarte problemas, como se que me va a pasar a mi ya que yo lo hice así, pero la diferencia entre tu y yo es que yo estoy loco*** tu no.

3) Para poder utilizar las funciones que manejan las imágenes deben tener cargada la GD Graphics Library http://www.boutell.com/gd/, normalmente ya viene instalada con php por defecto, sino les funcionan las funciones (valga la redundancia), antes de descargar la librería verifiquen que en el php.ini esté habilitada, o sea, si está así:

Código:
#extension=php_gd2.dll

quítenle la almohadilla para que se vea así

Código:
extension=php_gd2.dll

Creo que ya es todo, yo me descargué todas las imágenes, son 767.
Espero no recibir futuras llamadas de SoHo. XD

johanabahamonklkpu8.jpg


Autor: Bird of Paradise

Encuentra todas las fotos aqui

Fuente
Clave para descomprimir: www.dragonjar.us
 
  • Me gusta
Reacciones: 8 personas
:s a mi tampoco... revise el link brother... y gracias ta muy bueno ahi le dejé mis agradecimientos... :p
 
Bueno laneros, siguiendo el excelente aporte de Jatt estos fueron los resultados:
- Puesta en funcionamiento del método, incluida instalación de php (10 minutos)
- Descarga de las fotos (20 minutos)

Este es el enlace con las 767 imágenes para que las descarguen de una, y no saturemos el servidor de soho :p
http://**************/files/10980834/modelos.rar

Y revisando el método me di cuenta que ya aumentó el "número de la modelo", por lo que descargué las fotos nuevas, este es el enlace:
http://**************/files/10981668/modelos1.rar

Por todas ya son 881 fotos.

Espero les sirva, y nuevamente gracias a Jatt por el aporte.
 
ayuda con los videos

La verdad es que yo soy muy inexperto en estos temas, pero me pareció que cuando uno ve los videos detras de cámaras en la página de soho, estos se guardan en la carpeta achivos temporales de internet como archivos dat, estos se pueden reproducir cuando aún estan en la carpeta, pero cuando los saco ya no los reproduce, incluso descargué varios reproductores de video .dat pero no abre. Alguien puede ayudarme?

Cómo rayos descargo los videos de soho? me muero por los de ana lucia y de isabel sofia cabrales
 
gracias por las fotos, porque con el tuto quede gringo :S, para lo de los videos yo uso el videodownloader q es un addon de firefox y con eso los bajo como .flv y despues los convierto ;)
 
Muchas gracias por las fotos.... Excelente...

Lo unico que digo es que faltan como que unas fotos, confirmemos eso
 
Reportar | Nota | Respuesta Rápida |



04-04-2007 #17
harold24co
LANero novato (1)

Registrado: Apr 2006
Ciudad: bogota
Mensajes: 1
Estado: Conectado
 
Severa vuelta hermano... pero muy bueno el script

Yo hice algo pareceido hace tiempo pero tan solo busque las direcciones de los jpg que eran descargados. Aunque las fotos son vistas a travez swf las originales son jpgs comunes y corrientes, entonces con winpcap capture la direccion de donde venian los jpg las cuales tenian el siguiente rango.
http://www.soho.com.co/galerias/mod_[1-122]/f[1-30].jpg
donde
http://www.soho.com.co/galerias/mod_1/f1.jpg
es la primera foto de la primer modelo y
http://www.soho.com.co/galerias/mod_126/f14.jpg
es la ultima foto de la ultima galeria publicada hasta el momento

Entonces si quiero ver una galeria especifica simplemente usando la funcion de flashget para crear galerias en firefox, pongo el rango de una modelo o de varias modelos o todas y me baja las fotos. Si las quiero guardar simplemente guardo la pagina completa y me guarda todas las fotos.