خواننده RSS با PHP و AJAX

خواننده RSS برای خواندن نوارخورهای RSS استفاده می‌شود.

RSS به شما امکان می‌دهد به سرعت به اخبار و به‌روزرسانی‌ها نگاه کنید.

خواننده RSS AJAX

در این مثال AJAX، یک خواندن RSS را نشان می‌دهیم که محتوای RSS بدون بارگذاری مجدد صفحه به صفحه وب اضافه می‌شود.

یک اشتراک خبر RSS در لیست زیر انتخاب کنید

لطفاً یک نوارخور RSS انتخاب کنید:

در اینجا نوارخورهای RSS را لیست می‌کنیم.

این مثال شامل سه عنصر است:

  • فرم HTML ساده
  • JavaScript
  • صفحه PHP

فرم HTML

این یک صفحه HTML است. شامل یک فرم ساده HTML و لینک به یک فایل JavaScript است:

<html>
<head>
<script type="text/javascript" src="getrss.js"></script>
</head>
<body>
<form> 
یک نوارخور RSS انتخاب کنید:
<select onchange="showRSS(this.value)">
<option value="Google">اخبار Google</option>
<option value="MSNBC">اخبار MSNBC</option>
</select>
</form>
<p><div id="rssOutput">
<b>نوارخورخبرهادراینجا لیست خواهد شد.</b></div></p>
</body>
</html>

توضیحات مثال - فرم HTML

همانطور که مشاهده می‌کنید، صفحه HTML بالا یک فرم ساده HTML با یک لیست کشویی دارد.

عملکرد فرم به این صورت است:

  1. وقتی که کاربر گزینه‌ای در لیست کشویی انتخاب می‌کند، یک رویداد رخ می‌دهد
  2. وقتی که یک رویداد رخ می‌دهد، تابع showRSS() اجرا می‌شود

در زیر فرم یک <div> به نام "rssOutput" وجود دارد. این به عنوان نگه‌دارنده داده‌هایی که توسط تابع showRSS() بازگردانده می‌شود استفاده می‌شود.

JavaScript

کد JavaScript در "getrss.js" ذخیره شده است، که با مستند HTML مرتبط است:

var xmlHttp
function showRSS(str)
 { 
 xmlHttp=GetXmlHttpObject()
 if (xmlHttp==null)
  {
  alert ("مرورگر از درخواست HTTP پشتیبانی نمی‌کند")
  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
 {
 // فایرفاکس، اپرا 8.0+، سافاری
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // اینترنت اکسپلورر
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

例子解释:

stateChanged() و GetXmlHttpObject تابع با درخواست‌های AJAX با PHP مثال‌های این بخش مشابه هستند.

توابع showRSS()

هر زمان که در فهرست کشویی انتخاب شود، این تابع اجرا می‌شود:

  1. URL ارسالی به سرور را تعریف کنید (نام فایل)
  2. پارامتر (q) را به url اضافه کنید، پارامتر محتواست که در گزینه‌های فهرست انتخاب شده است
  3. یک عدد تصادفی اضافه کنید تا از ذخیره شده شدن فایل توسط سرور جلوگیری شود
  4. با استفاده از GetXmlHttpObject فراخوانی کنید تا XMLHTTP را ایجاد کنید و به آن بگویید که در صورت بروز تغییرات، فراخوانی stateChanged را انجام دهد
  5. با استفاده از url داده شده XMLHTTP باز کنید
  6. درخواست HTTP را به سرور ارسال کنید

صفحه PHP

صفحه سرور服务的 JavaScript کد نامیده می شود "getrss.php" فایل PHP است:

<?php
//پارامتر q را از URL دریافت کنید
$q=$_GET["q"];
//یافتن فرید انتخاب شده
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);
//عناصر خروجی از "<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;
//عناصر خروجی از "<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>");
 }
?>

例子解释:

当一个选项从JavaScript发送时,会发生:

  1. PHP找出哪个RSS feed被选中
  2. 为选中的RSS feed创建XML DOM对象
  3. 找到并输出来自RSS频道的元素
  4. 遍历前三个RSS项目中的元素,并进行输出