Los últimos tutoriales de desarrollo web
 

PHP Ejemplo - AJAX lector de RSS


Un lector de RSS se utiliza para leer feeds RSS.


AJAX lector de RSS

El siguiente ejemplo demostrará un lector de RSS, donde se carga el RSS-feed en una página web sin tener que recargar:


RSS-feed serán listados aquí ...

Ejemplo Explicación - La página HTML

Cuando un usuario selecciona un RSS-feed en la lista desplegable anteriormente, una función llamada " showRSS() " se ejecuta. La función se activa por el "onchange" evento:

<html>
<head>
<script>
function showRSS(str) {
  if (str.length==0) {
    document.getElementById("rssOutput").innerHTML="";
    return;
  }
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else {  // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      document.getElementById("rssOutput").innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","getrss.php?q="+str,true);
  xmlhttp.send();
}
</script>
</head>
<body>

<form>
<select onchange="showRSS(this.value)">
<option value="">Select an RSS-feed:</option>
<option value="Google">Google News</option>
<option value="NBC">NBC News</option>
</select>
</form>
<br>
<div id="rssOutput">RSS-feed will be listed here...</div>
</body>
</html>

El showRSS() la función hace lo siguiente:

  • Compruebe si se ha seleccionado una fuente de alimentación
  • Crear un objeto XMLHttpRequest
  • Cree la función a ejecutar cuando la respuesta del servidor está listo
  • Enviar la solicitud fuera a un archivo en el servidor
  • Nótese que un parámetro (q) se añade a la URL (con el contenido de la lista desplegable)

El archivo PHP

La página en el servidor llamado por el código JavaScript anterior es un archivo PHP llamado "getrss.php" :

<?php
//get the q parameter from URL
$q=$_GET["q"];

//find out which feed was selected
if($q=="Google") {
  $xml=("http://news.google.com/news?ned=us&topic=h&output=rss");
} elseif($q=="NBC") {
  $xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");
}

$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;

//output elements from "<channel>"
echo("<p><a href='" . $channel_link
  . "'>" . $channel_title . "</a>");
echo("<br>");
echo($channel_desc . "</p>");

//get and output "<item>" elements
$x=$xmlDoc->getElementsByTagName('item');
for ($i=0; $i<=2; $i++) {
  $item_title=$x->item($i)->getElementsByTagName('title')
  ->item(0)->childNodes->item(0)->nodeValue;
  $item_link=$x->item($i)->getElementsByTagName('link')
  ->item(0)->childNodes->item(0)->nodeValue;
  $item_desc=$x->item($i)->getElementsByTagName('description')
  ->item(0)->childNodes->item(0)->nodeValue;
  echo ("<p><a href='" . $item_link
  . "'>" . $item_title . "</a>");
  echo ("<br>");
  echo ($item_desc . "</p>");
}
?>

Cuando una solicitud de una fuente RSS se envía desde el JavaScript, ocurre lo siguiente:

  • Compruebe que se alimentan fue seleccionado
  • Crear un nuevo objeto DOM XML
  • Cargar el documento RSS en la variable xml
  • Extracto y de salida de elementos de elemento de canal
  • Extracto y de salida de elementos de los elementos item