PHP ve AJAX RSS Okuyucu

RSS Okuyucusu, RSS Feed'leri okumak için kullanılır.

RSS, haber ve güncellemeleri hızlı bir şekilde gözden geçirmenize olanak tanır.

AJAX RSS Okuyucusu

Aşağıdaki AJAX örneğinde, RSS içeriğinin yenilemeden sayfaya indirileceğini göstereceğiz.

Aşağıdaki listeden bir RSS haber aboneliği seçin

Bir RSS-Feed seçin:

RSS Feed buraya listelenecektir.

Bu örnekte üç bileşen bulunmaktadır:

  • Basit HTML Formu
  • JavaScript
  • PHP sayfası

HTML Formu

Bu HTML sayfasıdır. Basit bir HTML formu ve bir JavaScript dosyasını çalıştıran bir bağlantı içerir:

<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>

Örnek açıklama - HTML formu

Yukarıdaki HTML sayfası, bir açılır liste kutusu içeren basit bir HTML formu içerir.

Formun nasıl çalıştığı:

  1. Kullanıcı aşağıdakı açılır menüdeki seçenekleri seçtiğinde bir olay tetiklenir
  2. Bir olay tetiklendiğinde showRSS() fonksiyonu çalıştırılır

Formun altında "rssOutput" adında bir <div> vardır. Bu, showRSS() fonksiyonu tarafından döndürülen verilerin yer tutucusu olarak kullanılır.

JavaScript

JavaScript kodları "getrss.js" dosyasında saklanmaktadır ve HTML belgesi ile bağlantılıdır:

var xmlHttp
function showRSS(str)
 { 
 xmlHttp=GetXmlHttpObject()
 if (xmlHttp==null)
  {
  alert ("Tarayıcı HTTP İsteklerini desteklemiyor")
  return
  }
 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() 
 { 
 if (xmlHttp.readyState==4 || 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");
  }
 }
return xmlHttp;
}

Örnek Açıklama:

stateChanged() ve GetXmlHttpObject fonksiyonları ile PHP ve AJAX İstekleri Bu bölümdeki örnekler aynıdır.

showRSS() fonksiyonu

Her zaman aşağıdaki kutuda bir seçim yapıldığında bu fonksiyon çalışır:

  1. Sunucuya gönderilecek url'yi (dosya adı) tanımlayın
  2. Parametre (q) url'ye ekleyin, parametre içeriği aşağıdaki kutudaki seçilmiş seçenektir
  3. Rastgele bir sayı ekleyerek sunucunun dosyasını önbelleğe almasını önleyin
  4. GetXmlHttpObject fonksiyonunu çağırarak XMLHTTP nesnesi oluşturun ve bu nesneye bir değişiklik olduğunda stateChanged fonksiyonunu çalıştırmasını söyleyin
  5. Verilen url ile XMLHTTP açın
  6. Sunucuya HTTP istemi gönderin

PHP sayfası

JavaScript kodunu çağıran sunucu sayfası, "getrss.php" adlı PHP dosyasıdır:

<?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>");
 }
?>

Örnek Açıklama:

Bir seçenek JavaScript'ten gönderildiğinde şu olay gerçekleşir:

  1. PHP hangi RSS beslemesinin seçildiğini bulur
  2. Seçilen RSS beslemesi için XML DOM nesnesi oluşturun
  3. RSS kanalından gelen elementleri bulun ve çıktı alın
  4. İlk üç RSS projesindeki elementleri tarayın ve çıktı alın