Foros del Web » Programando para Internet » PHP »

Buscar primer imagen de post.

Estas en el tema de Buscar primer imagen de post. en el foro de PHP en Foros del Web. Hola, Bueno primero que nada, este es mi primer tema así que tal vez esté poniendolo en cualquier lado, espero que no. Estoy haciendo un ...
  #1 (permalink)  
Antiguo 09/10/2011, 07:28
 
Fecha de Ingreso: octubre-2011
Mensajes: 1
Antigüedad: 8 años
Puntos: 1
Buscar primer imagen de post.

Hola,
Bueno primero que nada, este es mi primer tema así que tal vez esté poniendolo en cualquier lado, espero que no.

Estoy haciendo un boletin de noticias, y quiero buscar la primer imagen de cada post. así tambien su contenido etc.
El problema surge cuando la nota tiene más de una foto ya que en el campo de imagen a mostrar me muestra las dos. y no una sola.

El código que estoy aplicando es el siguiente.

<?
$data = $Articulo_Body;
$pattern = "/src=[\"']?([^\"']?.*(png|jpg|gif))[\"']/i";
preg_match($pattern, $data, $images);
$url = $images[1];
?>

<img src="<?= $url;?>" width="250"/>



Que estoy haciendo mal que me muestra dos, en lugar de solo una foto?
Por lo que leí por ahí hay un array pero quiero solo el campo uno del mismo,.

Ayudaa y gracias.
  #2 (permalink)  
Antiguo 09/10/2011, 07:50
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 14 años, 2 meses
Puntos: 36
Respuesta: Buscar primer imagen de post.

Mira lo que hace esto:

Código PHP:
<?php
$doc
=new DOMDocument();
$doc->loadHTML('<html><body>Test<br><img src="myimage.jpg" title="title" alt="alt"> </body></html>');
$xml=simplexml_import_dom($doc);
$images=$xml->xpath('//img');
foreach (
$images as $img) {
    echo 
$img['src'];
}
Puedes leer otros atributos de la imagen tan fácil como $img['nombreAtributo'];

Saludos.

PS: Es recomendable abrir con <?php y hacer <?php echo en vez de <?=
  #3 (permalink)  
Antiguo 09/10/2011, 12:58
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 8 años, 2 meses
Puntos: 793
Respuesta: Buscar primer imagen de post.

Hola catoszyrko, tienes que usar el signo ? para que te coja la primera imagen y no se vaya del principio de la primera hasta el final de la última:

Fijate aquí .*?

Código PHP:
Ver original
  1. <?php
  2. $data = '<img src="myimage.jpg" title="title" alt="alt"> <img src="myimage2.jpg" title="title" alt="alt">';
  3. $pattern = "/src=[\"']?([^\"']?.*?(png|jpg|gif))[\"']/i";
  4. preg_match($pattern, $data, $images);
  5. echo $images[1];

también puedes hacer algo así, que captura todo lo que esté entre las comillas del src

Código PHP:
Ver original
  1. <?php
  2. $data = '<img src="myimage.jpg" title="title" alt="alt"> <img src="myimage2.jpg" title="title" alt="alt">';
  3. $pattern = '@src="(.*?)"@i';
  4. preg_match($pattern, $data, $images);
  5. echo $images[1];

Pásate por este aporte: http://www.forosdelweb.com/f18/aport...s-pcre-646110/

Ahora como propone kiko's

Así obtienes la primera imagen usando DOMDocument

Código PHP:
Ver original
  1. <?php
  2. $doc=new DOMDocument();
  3. $doc->loadHTML('<html><body>Test<br><img src="myimage.jpg" title="title" alt="alt"> </body></html>');
  4. $imgs = $doc->getElementsByTagName('img');
  5. echo $imgs->item(0)->attributes->getNamedItem('src')->nodeValue;

En caso de que el html tenga errores puedes usar por ejemplo la función libxml_use_internal_errors o repararlo con la clase Tidy etc...

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #4 (permalink)  
Antiguo 09/10/2011, 13:44
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 11 años, 9 meses
Puntos: 845
Respuesta: Buscar primer imagen de post.

Regex para parsear html no creo que sea la mejor idea, si dispones de DOM seguiría el consejo de kiko's con una pegueña variante al xpath para no cargar todas las imágenes si solo te interesa la primera, algo asi:

Código PHP:
Ver original
  1. $images = $xml->xpath('//img[position() = 1]');
Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 09/10/2011, 14:02
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 8 años, 2 meses
Puntos: 793
Respuesta: Buscar primer imagen de post.

Si es cierto masterpuppet, me faltó aclarar eso que ya bastante nos lo has enseñado. Por cierto gracias por tus aportes.

Por otro lado me gustaría saber si tienes una referencia sobre como construir ese tipo de búsquedas ya sea con xpath o query de DOMXPath.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #6 (permalink)  
Antiguo 09/10/2011, 14:26
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 14 años, 2 meses
Puntos: 36
Respuesta: Buscar primer imagen de post.

Cita:
Iniciado por andresdzphp Ver Mensaje
Si es cierto masterpuppet, me faltó aclarar eso que ya bastante nos lo has enseñado. Por cierto gracias por tus aportes.

Por otro lado me gustaría saber si tienes una referencia sobre como construir ese tipo de búsquedas ya sea con xpath o query de DOMXPath.

Saludos.
Si te refieres a como construir expresiones con xpath aquí te dejo un tutorial que me dieron en la Universidad:
http://netflie.es/blog/wp-content/up...rial-xpath.pdf

Y muchos ejemplos:
http://netflie.es/blog/wp-content/up...plos-XPath.pdf

Saludos
  #7 (permalink)  
Antiguo 09/10/2011, 14:27
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 8 años, 2 meses
Puntos: 793
Respuesta: Buscar primer imagen de post.

Exactamente eso necesito, muchas gracias kiko's.

ufff que interesante este tema, se merece una buena estudiada. Dejaré el código completo con las recomendaciones de todos:

Código PHP:
Ver original
  1. <?php
  2. $html = '<html><body>Test<br /><img src="myimage.jpg" title="title" alt="alt" /><img src="myimage2.jpg" title="title" alt="alt" /></body></html>';
  3. $doc = new DOMDocument();
  4. $doc->loadHTML($html);
  5. $sxe = simplexml_import_dom($doc);
  6. $images = $sxe->xpath('//img[position() = 1]/@src');
  7. echo $images[0]['src'];

Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 09/10/2011 a las 16:12

Etiquetas: miniatura, nota, post, primera, thumb, busquedas
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:36.