Foros del Web » Programando para Internet » PHP »

Problema con bucle (creo)

Estas en el tema de Problema con bucle (creo) en el foro de PHP en Foros del Web. Hola saludos a todos! Estoy haciendo un script para descargar imágenes a partir de una url. El proceso básicamente es obtener el código html de ...
  #1 (permalink)  
Antiguo 07/01/2013, 16:01
 
Fecha de Ingreso: junio-2010
Mensajes: 26
Antigüedad: 13 años, 11 meses
Puntos: 3
Pregunta Problema con bucle (creo)

Hola saludos a todos!

Estoy haciendo un script para descargar imágenes a partir de una url. El proceso básicamente es obtener el código html de una url, buscar el nombre de la imagen en ese código y después descargar la imagen.

Las url son con esta sintaxis - htt://www.url.com?id=1 - . Esa url tiene un parametro llamado id con valor 1 y ese id contiene una imagen. Si pones id=2 obtienes otra imagen y asi sucesivamente. Para cambiar automaticamente el valor de la id he creado una variable llamada $id para ke la url tome esta forma - htt://www.url.com?id=$id - y de ahi en adelante el proceso es el ke comenté al principio.

El problema ke tengo es ke mi script solo obtiene el código html del id=1. No entiendo por ké razón no pasa al id=2 y desués al id=3 y así, sucesivamente. Os paso primero el código y despues lo ke imprime en pantalla.

Código:

Código PHP:
Ver original
  1. $limite=1;
  2. $id=1;
  3. $contador=0;
  4. $abierto="";
  5. $codigo="";
  6. $tag="tag";   <-- Pon aki la tag ke necesites buscar como referencia.
  7.  
  8. while($limite<=15){
  9.  
  10.     $url="http://www.url.com?id=".$id;  <-- Url del sitio del ke kieras descargar imagenes.
  11.     $url_remota=@fopen($url, "r");
  12.  
  13.     if(!$url_remota==false){
  14.         $abierto="si";
  15.         } else {
  16.             $abierto="no";
  17.             }
  18.  
  19.     while($abierto=="si"){
  20.  
  21.         $trozo=fgets($url_remota, 1024);
  22.  
  23.         if(!$trozo==false){
  24.  
  25.             while($trozo=fgets($url_remota, 1024)){
  26.                 $codigo.=$trozo;
  27.                 }
  28.  
  29.                 $buscar_tag=strpos($codigo, $tag);
  30.                 $borrar1=substr($codigo, ($buscar_tag+8));
  31.                 $borrar2=explode("[", $borrar1);
  32.                 $nombre_img=$borrar2[0];
  33.                 echo($contador." - ".$nombre_img."<br />");
  34.                 fclose($url_remota);
  35.                 $abierto="no";
  36.                 $limite++;
  37.                 $contador++;
  38.                 $id++;
  39.             }
  40.         }
  41.     }

En la línea 34 he puesto un echo para comprobar los valores de las variables ke necesito modificar automáticamente para ke el script funcione y como podeis ver $contador se autoincremente y si pones $id en vez de $nombre_img también se incrementa pero $nombre_img nunca cambia por lo ke creo ke algún bucle da vueltas de más pero a simple vista no consigo ver el fallo.

Esto es lo ke imprime en pantalla:
Código PHP:
Ver original
  1. 0 - 2a672vu9.jpg
  2. 1 - 2a672vu9.jpg
  3. 2 - 2a672vu9.jpg
  4. 3 - 2a672vu9.jpg
  5. 4 - 2a672vu9.jpg
  6. 5 - 2a672vu9.jpg
  7. 6 - 2a672vu9.jpg
  8. 7 - 2a672vu9.jpg
  9. 8 - 2a672vu9.jpg
  10. 9 - 2a672vu9.jpg
  11. 10 - 2a672vu9.jpg
  12. 11 - 2a672vu9.jpg
  13. 12 - 2a672vu9.jpg
  14. 13 - 2a672vu9.jpg
  15. 14 - 2a672vu9.jpg

Y en vez de eso debería salir el $contador seguido de un guión y una imagen diferente en cada linea en vez de la misma imagen en todas las lineas. Nu se no consigo continuar. Todavia no descarga porke descargaría todo el rato la misma imagen.

Bueno saludos a todos :)
  #2 (permalink)  
Antiguo 08/01/2013, 08:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Problema con bucle (creo)

Primero, escribes bien pero te cuelgas con la palabra que, en vez escribes ke, eso es parte de un chat, que mucha gente por vagancia trata de avanzar y usa ello. Como tambien usas aki en vez de aqui. Es solo una observación para lo corrijas en futuras ocasiones.

Segundo la razón por la que siempre recibes el mismo valor es que a $nombre_img le estás dando siempre el mismo valor ya que no cambias el indice de $borrar2. Ese 0 como indice debe ser dinámico en vez de declararlo directamente el valor.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 08/01/2013, 10:04
 
Fecha de Ingreso: junio-2010
Mensajes: 26
Antigüedad: 13 años, 11 meses
Puntos: 3
Respuesta: Problema con bucle (creo)

Gracias por responder :D

Siempre ke escribo en un foro pongo una PD indicando ke no tengo ku en el teclado para ke no piensen ke soy un cateto pero justo aki se me olvidó, es mas, si escribes en google ku mayúscula en la descripción del primer resultado te sale una ku mayúscula y otra minúscula y casi siempre tengo abierto ese resultado para tener las dos letras disponibles pero me cansa un poco copiar y pegar cada vez ke tengo ke usarla :P

Ahora, con lo referente al código, ¿no se supone ke el dinamismo de $borrar2 empezaría en el momento de dar valor a la variable $codigo??

Este paso busca una $tag ke precede al nombre ke estoy buscando en $codigo:

Código PHP:
Ver original
  1. $buscar_tag=strpos($codigo, $tag);

El siguiente paso borra todo el código ke hay antes de $tag incluida la $tag de 8 dígitos. Con esto consigo ke el nombre de la imagen ke busco esté al principio de $codigo seguido del resto de código html ke falta por eliminar:

Código PHP:
Ver original
  1. $borrar1=substr($codigo, ($buscar_tag+8));

Y en el paso de $borrar2 busco el primer dígito ke aparece después de la extension de la imagen y lo convierto en un separador con lo ke consigo ke el nombre ke busco esté en $borrar2[0]

Código PHP:
Ver original
  1. $borrar2=explode("[", $borrar1);

Ahora bien, no dudo en absoluto ke estés en lo cierto, pero no lo comprendo porke el valor de $borrar2 depende de $borrar1 y el valor de $borrar1 depende del contenido actual de $codigo, el cual se supone ke cambia cada vez ke se reinicia el proceso.

He fabricado desde el principio otra vez todo y lo he logrado hacer funcionar pero no comprendo el error del código ke he posteado al principio de este hilo.

Este es el nuevo código (este funciona):

Código PHP:
Ver original
  1. $limite=1;
  2. $id=1;
  3. $tag="tag";
  4. $url_img="http://www.url.com/"; url de la imagen pero sin el nombre de la imagen porke todavía no se sabe.
  5. $ruta="img/";
  6.  
  7. while($limite<=20){
  8.    
  9.     while(empty($descargado)){
  10.         $codigo=@file_get_contents("http://www.url.com/index.php?id=".$id);
  11.         $descargado="si";
  12.         }
  13.         unset($descargado);
  14.            
  15.     $buscar_tag=strpos($codigo, $tag);
  16.     $borrar1=substr($codigo, ($buscar_tag+8));
  17.     $borrar2=explode("[", $borrar1);
  18.     $nombre_img_remoto=$borrar2[0];
  19.        
  20.     while(empty($descargado)){
  21.         $img=@file_get_contents($url_img.$nombre_img_remoto);  
  22.         $descargado="si";
  23.         }
  24.         unset($descargado);
  25.            
  26.     file_put_contents($ruta.$nombre_img_remoto.".jpg", $img);          
  27.     $limite++;
  28.     $id++;
  29.     }

Los while en los file_get_contents(edito, los while estan mal ya ke no tienen ke comprobar si $descargado tiene valor,. Tienen ke comrpobar ke $codigo o $img tienen valor) los uso para ke no siga el proceso hasta ke $codigo o $img tengan valor lo ke significa ke tienen el contenido ke busco. Eso lo hago porke a veces consigue descargar una url y a veces no.

Una duda ke me ha surgido y ke no he podido solventar con google es si existe la posibilidad de recorrer graficamente un bucle o una especie de reproductor de código ke coloree la linea en la ke se encuentra actualmente el proceso activo o algo similar no se si me explico. Así se ve si se sale de un bucle, si no, donde se keda dando vueltas hasta el infinito... Nu se, seguro ke con la práctica acabas viendo esas cosas tu mismo pero se me antoja útil la existencia de algo parecido.

Saludos!

PD: No tengo ku en el teclado.
PD2: Ni shift izkierdo, ni control izkierdo, ni @ = alt+64. Es totalmente cierto ...

Última edición por higochumbo; 08/01/2013 a las 10:18
  #4 (permalink)  
Antiguo 08/01/2013, 14:06
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Problema con bucle (creo)

Hmmm, una forma de debuging es ver como va el flujo. En el caso que indicas, sí es cierto lo que indicas, pero sin ver como va el resultado es dificil, te recomiendo que coloques un echo en cada parte, es decir
Código PHP:
Ver original
  1. $buscar_tag=strpos($codigo, $tag);
  2. echo $buscar_tag;
  3. $borrar1=substr($codigo, ($buscar_tag+8));
  4. echo $borrar1;
  5. $borrar2=explode("[", $borrar1);
  6. echo $borrar2;
  7. $nombre_img_remoto=$borrar2[0];
  8. echo $nombre_img_remoto;
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 08/01/2013, 15:59
 
Fecha de Ingreso: junio-2010
Mensajes: 26
Antigüedad: 13 años, 11 meses
Puntos: 3
Respuesta: Problema con bucle (creo)

Mira lo de $borrar2 ya como ke no me produce demasiada intriga porke conseguí hacerlo funcionar pero lo de debuging y el flujo si ke me interesa.

El problema de los echo es ke hasta ke el bucle no se cierra no me muestra en pantalla nada y si el bucle está mal y se keda dando vueltas eternamente no veo el contenido de los echo.

Voy a buscar en google control de flujo o debuging, gracias por el dato. ¿Alguna sugerencia para obtener mejores resultados en google con respecto a control de flujo o debuging? Eske no se muy bien ke estoy buscando.

Gracias otra vez por contestar. Saludos! :D
  #6 (permalink)  
Antiguo 08/01/2013, 21:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema con bucle (creo)

Cita:
Siempre ke escribo en un foro pongo una PD indicando ke no tengo ku en el teclado
Perdona que te lo diga así, pero... Pues entonces compra otro teclado...

Es bastante molesto leer un mensaje mal escrito, cuesta comprender ese texto.
Personalmente me produce tal desagrado que casi no puedo seguir lo que explicas. Tengo que esforzarme para terminar cada párrafo.

Francamente me parece increíble un teclado al que le falte una letra. Eso es simplemente imposible.
Yo he llegado a hacerle agujeros a las teclas por el exceso de uso, pero nunca tuve un teclado al que le falte una. En esas condiciones lo tiro a la basura y consigo otro (he cambiado decenas, a fin de cuentas, nunca fueron muy caros, ni siquiera ahora).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 08/01/2013 a las 21:56
  #7 (permalink)  
Antiguo 09/01/2013, 05:55
 
Fecha de Ingreso: junio-2010
Mensajes: 26
Antigüedad: 13 años, 11 meses
Puntos: 3
Respuesta: Problema con bucle (creo)

Pues lo siento un montón. Cierra el tema entonces porke no voy a comprar otro teclado solo para poder escribir en este foro.

Tampoco voy a entrar en una discusión por esto.

Etiquetas: bucle, html, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:20.