Czytnik RSS AJAX w PHP

Czytnik RSS jest używany do czytania kanałów RSS.

RSS pozwala na szybkie przeglądanie wiadomości i aktualizacji.

Czytnik RSS AJAX

W poniższym przykładzie AJAX, pokażemy czytnik RSS, który wczytuje zawartość RSS bez odświeżania strony.

Wybierz subskrypcję wiadomości RSS z poniższej listy

Wybierz kanał RSS:

Tutaj są wymienione kanały RSS.

Ten przykład zawiera trzy elementy:

  • Prosty formularz HTML
  • JavaScript
  • Strona PHP

Formularz HTML

To jest strona HTML. Zawiera prosty formularz HTML i link do wykonywania pliku JavaScript:

<html>
<head>
<script type="text/javascript" src="getrss.js"></script>
</head>
<body>
<form> 
Select an RSS-Feed:
<select onchange="showRSS(this.value)">
<option value="Google">Google News</option>
<option value="MSNBC">MSNBC News</option>
</select>
</form>
<p><div id="rssOutput">
<b>RSS Feed will be listed here.</b></div></p>
</body>
</html>

Przykład wyjaśnienia - HTML formularz

Jak widać, powyższa strona HTML zawiera prosty formularz z rozwijanym menu.

Działanie formularza:

  1. Kiedy użytkownik wybiera opcję z rozwijanego menu, wywoływane jest zdarzenie
  2. Kiedy wywołuje się zdarzenie, wykonuje się funkcję showRSS()

Poniżej formularza znajduje się div o nazwie "rssOutput". Służy jako占位ник dla danych zwróconych przez funkcję showRSS().

JavaScript

Kod JavaScript przechowywany w "getrss.js", który jest połączeniem z dokumentem HTML:

var xmlHttp
function showRSS(str)
 { 
 xmlHttp = GetXmlHttpObject();
 jeśli xmlHttp == null
  {
  alert("Przeglądarka nie obsługuje żądań HTTP");
  zwróć;
  }
 var url = "getrss.php";
 url = url + "?q=" + str;
 url = url + "&sid=" + Math.random();
 xmlHttp.onreadystatechange = stateChanged; 
 xmlHttp.open("GET", url, true);
 xmlHttp.send(null);
 }
function stateChanged() 
 { 
 jeśli xmlHttp.readyState == 4 lub xmlHttp.readyState == "complete"
  { 
  document.getElementById("rssOutput")
  .innerHTML = xmlHttp.responseText; 
  } 
 }
function GetXmlHttpObject()
{
var xmlHttp = null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp = new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
zwróć xmlHttp;
}

Przykład wyjaśnienia:

stateChanged() i funkcja GetXmlHttpObject z Żądania AJAX w PHP Przykład w tym rozdziale jest podobny.

Funkcja showRSS()

Funkcja ta jest wywoływana za każdym razem, gdy wybieramy element z rozwijanej listy:

  1. Definiowanie url (nazwy pliku) wysyłanego do serwera
  2. Dodanie parametrów (q) do url, zawierających wybrany element z rozwijanej listy
  3. Dodanie losowej liczby, aby zapobiec 缓存owanie pliku serwera
  4. Wywołanie funkcji GetXmlHttpObject do utworzenia obiektu XMLHTTP i poinformowanie go, aby wykonał funkcję stateChanged, gdy zostanie wywołany
  5. Otwieranie XMLHTTP poprzez podany url
  6. Wysyłanie żądania HTTP do serwera

Strona PHP

Strona serwerowa, która wywołuje kod JavaScript, to plik PHP o nazwie "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=="MSNBC")
 {
 $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>");
 }
?>

Przykład wyjaśnienia:

Kiedy opcja jest wysyłana z JavaScript, następuje:

  1. PHP znajduje, który kanał RSS został wybrany
  2. Utwórz obiekt XML DOM dla wybranego kanału RSS
  3. Znajdź i wyświetl elementy z kanałów RSS
  4. Przejdź przez elementy trzech pierwszych projektów RSS i wyświetl je