PHP ve AJAX RSS Okuyucu
- Önceki Sayfa AJAX Canlı Arama
- Sonraki Sayfa AJAX Anket
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
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ığı:
- Kullanıcı aşağıdakı açılır menüdeki seçenekleri seçtiğinde bir olay tetiklenir
- 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:
- Sunucuya gönderilecek url'yi (dosya adı) tanımlayın
- Parametre (q) url'ye ekleyin, parametre içeriği aşağıdaki kutudaki seçilmiş seçenektir
- Rastgele bir sayı ekleyerek sunucunun dosyasını önbelleğe almasını önleyin
- 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
- Verilen url ile XMLHTTP açın
- 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:
- PHP hangi RSS beslemesinin seçildiğini bulur
- Seçilen RSS beslemesi için XML DOM nesnesi oluşturun
- RSS kanalından gelen elementleri bulun ve çıktı alın
- İlk üç RSS projesindeki elementleri tarayın ve çıktı alın
- Önceki Sayfa AJAX Canlı Arama
- Sonraki Sayfa AJAX Anket