Lector de Feeds para la web
Los portales de Internet utilizan mucho esta forma de "crear" contenido. Hay muchas formas de poder hacerlo, pero les voy a mostrar una que funciona muy bien.
Tal vez nos interesa poder integrar algun RSS en nuestra web, es una buena forma de mantener las noticias actualizadas sin demasiado esfuerzo por parte del administrador de la pagina web.
Para ello utilizaremos una funcion, que no es mia y que no recuerdo de donde la baje. Si alguien lo sabe, por favor que me avise para dar los creditos necesarios ya que las cosas en este blog funcionan asi.
Lo primero es la funcion lectora de los feeds, la cual podemos tener en una pagina que luego incluiremos donde sea necesario. La funcion es como sigue:
<?php
$itemNum=0;
class RSSParser {
var $channel_title="";
var $channel_website="";
var $channel_description="";
var $channel_pubDate="";
var $channel_lastUpdated="";
var $channel_copyright="";
var $title="";
var $link="";
var $description="";
var $pubDate="";
var $author="";
var $url="";
var $width="";
var $height="";
var $inside_tag=false;
function RSSParser($file,$encType) {
$this->xml_parser = xml_parser_create($encType);
xml_set_object( $this->xml_parser, &$this );
xml_set_element_handler( $this->xml_parser, "startElement", "endElement" );
xml_set_character_data_handler( $this->xml_parser, "characterData" );
$fp = @fopen("$file","r") or die( "$file could not be opened" );
while ($data = fread($fp, 4096)){xml_parse( $this->xml_parser, $data, feof($fp)) or die( "XML error");}
fclose($fp);
xml_parser_free( $this->xml_parser );
}
function startElement($parser,$tag,$attributes=”){
$this->current_tag=$tag;
if($this->current_tag=="ITEM" || $this->current_tag=="IMAGE"){
$this->inside_tag=true;
$this->description="";
$this->link="";
$this->title="";
$this->pubDate="";
}
}
function endElement($parser, $tag){
switch($tag){
case "ITEM":
$this->titles[]=trim($this->title);
$this->links[]=trim($this->link);
$this->descriptions[]=trim($this->description);
$this->pubDates[]=trim($this->pubDate);
$this->authors[]=trim($this->author);
$this->author=""; $this->inside_tag=false;
break;
case "IMAGE":
$this->channel_image="<img src=\"".trim($this->url)."\" width=\"".trim($this->width)."\" height=\"".trim($this->height)."\" alt=\"".trim($this->title)."\" border=\"0\" title=\"".trim($this->title)."\" />";
$this->title=""; $this->inside_tag=false;
default:
break;
}
}
function characterData($parser,$data){
if($this->inside_tag){
switch($this->current_tag){
case "TITLE":
$this->title.=$data; break;
case "DESCRIPTION":
$this->description.=$data; break;
case "LINK":
$this->link.=$data; break;
case "URL":
$this->url.=$data; break;
case "WIDTH":
$this->width.=$data; break;
case "HEIGHT":
$this->height.=$data; break;
case "PUBDATE":
$this->pubDate.=$data; break;
case "AUTHOR":
$this->author.=$data; break;
default: break;
}//end switch
}else{
switch($this->current_tag){
case "DESCRIPTION":
$this->channel_description.=$data; break;
case "TITLE":
$this->channel_title.=$data; break;
case "LINK":
$this->channel_website.=$data; break;
case "COPYRIGHT":
$this->channel_copyright.=$data; break;
case "PUBDATE":
$this->channel_pubDate.=$data; break;
case "LASTBUILDDATE":
$this->channel_lastUpdated.=$data; break;
default:
break;
}
}
}
}?>
No la vamos a explicar porque nos llevaria todo el dia hacerlo, pero lo importante es que la copien tal y como esta. Luego necesitamos leer esta funcion y transformarla en algo utilizable, para ello utilizaremos esta porcion de codigo en la pagina donde querramos mostrar las noticias.
<?
$Noticias = new RSSParser("http://blog.veperu.com/feed/","");$Noticias_RSSmax=4;
if($Noticias_RSSmax==0 || $Noticias_RSSmax>count($Noticias->titles))$Noticias_RSSmax=count($Noticias->titles);
for($itemNum=0;$itemNum<$Noticias_RSSmax;$itemNum++){?>
<br /><a href="<? echo $Noticias->links[$itemNum]; ?>"> <?php echo $Noticias->titles[$itemNum]."<br />"; ?></a>
<?php }?>
Entenderla es bastante facil, a pesar de verse complicada.
La primera linea es donde insertaremos la direccion del feed, en este caso http://blog.veperu.com/feed/ La linea siguiente, es el maximo numero de noticias que mostraremos, para el ejemplo, elegimos mostrar solo 4 noticias. De lo que sigue, solo recomiendo modificar esta seccion
<?php echo $Noticias->titles[$itemNum]."<br />"; ?>
Aqui podremos dar el formato de salida que querramos, pudiendo utilizar una hoja de estilos CSS o darle saltos de linea o parrafos para se ajuste a nuestra pagina web
Espero que les sirva tanto como me sirvio a mi en varias ocasiones y por favor, si alguien sabe a quien le corresponde esta funcion, haganlo saber.
Salu2
Fecha: 09 / 07 / 08

























Dejar un Comentario