Parsear un RSS y extraer la imagen de un tag img
21 Junio, 2006 por CarlosEn la portada de buscatuning que estamos preparando queremos poner noticias del blog. Para eso parseamos el rss del blog gracias a MagpieRSS. Nuestra intención es mostrar una foto de la noticia (si tiene) el titulo y el principio del texto.
Para mostrar una foto es necesario crear una expresion regular (o por lo menos es lo más práctico), por ejemplo ’src\s*=\s*([\”\’])?(?(1) (.*?)\\1 | ([^\s\>]+))’isx (gracias a cocososo por su ayuda). La expresión regular supone que el atributo imagen va entre comillas y siempre después de img. Es decir algo así <img src="/imagen.gif".
Para cortar al cabo de unos caracteres sin cortar ninguna palabra he usado una función que tiene smarty (si la usas recuerda que tiene licencia GPL)
function truncate($string, $length = 80, $etc = ‘…’,
$break_words = false, $middle = false)
{
if ($length == 0)
return ”;if (strlen($string) > $length) {
$length -= strlen($etc);
if (!$break_words && !$middle) {
$string = preg_replace(’/\s+?(\S+)?$/’, ”, substr($string, 0, $length+1));
}
if(!$middle) {
return substr($string, 0, $length).$etc;
} else {
return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
}
} else {
return $string;
}
}
Al final todo junto quedaría algo así:
<?php
/**
* Funcion para truncar un string sin cortar una palabra. De Smarty.php.net (GPL)
*/
function truncate($string, $length = 80, $etc = ‘…’,
$break_words = false, $middle = false)
{
if ($length == 0)
return ”;if (strlen($string) > $length) {
$length -= strlen($etc);
if (!$break_words && !$middle) {
$string = preg_replace(’/\s+?(\S+)?$/’, ”, substr($string, 0, $length+1));
}
if(!$middle) {
return substr($string, 0, $length).$etc;
} else {
return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
}
} else {
return $string;
}
}// MagpieRSS
require_once(’funciones/magpierss/rss_fetch.inc’);$url = "http://www.buscatuning.com/blog/feed/";
$rss = fetch_rss($url);
echo "Channel Title: " . $rss->channel[’title’] . "<p>";
echo "<ul>";
foreach ($rss->items as $item) {
$href = $item[’link’];
$title = $item[’title’];
echo "<li>";
echo "<h2><a href=$href>$title</a></h2>";// Extraemos la imagen de la noticia
preg_match("’< \s*img\s.*?src\s*=\s*([\"\’])?(?(1) (.*?)\\1 | ([^\s\>]+))’isx", $item[’content’][’encoded’], $resultado );$img = ( $resultado[3] ) ? $resultado[3] : $resultado[2];
if($img != "")
echo "<img src=’$img’ alt=’$title’ title=’$title’ />";
echo "<p>" . truncate(strip_tags($item[’content’][’encoded’]),100) . "</p>";
echo "</li>";
}
echo "</ul>";?>
Enero 29th, 2007 at 8:18 pm
[…] Para poder obtener solo la imagen necesitaba usar una expresión regular que me consiguiera solo la etiqueta y mas concretamente el src. […]