ساخت فید خوان آر اس اس (RSS Feed Reader) با php
#1
Note 
همانطور که می دانیم، فید آر اس اس (RSS Feed) یا خوراک وب، یکی از کاربردی ترین روش ها برای اطلاع از به روز رسانی یک سایت یا وبلاگ است که خیلی از کاربران ترجیح می دهند از این طریق، مطالب صفحه مورد علاقه خودشان را دنبال کنند، اما استفاده از این امکان، تنها به همین مورد محدود نمی شود، به فرض می توان لیستی از مطالب سایتها یا وبلاگ ها را به صورت لینک باکس طراحی کرد و در وبلاگ یا سایت خود به نمایش درآورد یا تازه ترین مطالب بخش های مختلف سایت یا وبلاگ را در صفحه اصلی به بازدیدکننده گان نشان داد و یا هر ایده ی دیگری که به ذهنتان می رسد؛ به همین دلیل در این مطلب قصد داریم نحوه ساخت فید خوان آر اس اس (RSS Feed Reader) را با php آموزش دهیم، به امید اینکه مفید واقع شود.
آشنایی با شیوه نگارش فید آر اس اس (RSS Feed)

قبل از اینکه به قسمت کدنویسی php بپردازیم، بد نیست با شیوه نگارش (syntax) یک فید rss آشنا شویم، چرا که نهایتا برنامه php که خواهیم نوشت، فایل xml مقصد یا همان فید آر اس اس را تجزیه تحلیل خواهد کرد.
یک فید آر اس اس معمولی، از تگ های خاصی به زبان xml استفاده می کند که در زیر نمونه آن را مشاهده می کنید.

کد php:
<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0"> 
<channel> 
<title>عنوان فید</title> 
<link>http://webgoo.ir</link> 
<description>توضیح</description> 
<language>fa</language> 
<copyright>Copyright</copyright>
<item> 
<title>عنوان مطلب</title> 
<description>توضیح مطلب</description> 
<link>لینک مطلب</link> 
<guid>لینک مطلب</guid> 
<pubDate>تاریخ مطلب به میلادی</pubDate> 
<source url="http://webgoo.ir/rss.xml">وبگو</source> 
</item> 
</channel> 
</rss> 

توضیح:
- یک فید آر اس اس از تگ هایی کلیدی تشکیل شده که هر کدام برای نمایش محتوای خاصی کاربرد دارند، مثلا تگ title برای نمایش عناوین مطالب است یا link، آدرس لینک مطلب مورد نظر را در خود نمایش می دهد، description برای پیش نمایش مطلب و pubDate تاریخ ایجاد آن را نشان می دهد.
- کد php که در ادامه به آن اشاره خواهیم کرد، با دریافت فایل xml فید، تگ های آن را تجزیه کرده و نتایج را نمایش می دهد.
کد php فید خوان آر اس اس (RSS Feed Reader)

برای نمایش محتوای فید های آر اس اس، در سایت یا وبلاگ خود، می توانید از توابع زیر که به زبان php نوشته شده اند استفاده کنید، کافی است آدرس فید را جایگزین مقادیر پیش فرض در کد کنید.

کد php:
<?php
//تنظیمات
$url='http://webgoo.ir/rss.xml';//آدرس فید
$num='5';//تعداد لینک
//توابع
function xml2array($text){
    
$reg_exp '/<(\w+)[^>]*>(.*?)<\/\\1>/s';
    
preg_match_all($reg_exp$text$match);
    foreach (
$match[1] as $key=>$val){
        if (
preg_match($reg_exp$match[2][$key])){
            
$array[$val][] = xml2array($match[2][$key]);
        }
        else{
            
$array[$val] = $match[2][$key];
        }
    }
    return 
$array;
}
function 
display_feed($url$num$template="<div class=\"rss-item\"> &raquo; <a href=\"#link#\" target=\"_blank\">#title#</a></div>"){
    if (
$rss=@file_get_contents($url)){
        
$rss=xml2array($rss);
        if (
is_array($rss)){
            
$code="";
            
$count=0;
            foreach(
$rss['rss'][0]['channel'][0]['item'] as $val){
                
$tpl=$template;
                foreach(
$val as $key=>$val2){
                    
$val2=html_entity_decode(htmlentities(@strip_tags($val2)));
                    
$tpl=str_replace("#".strtolower($key)."#"$val2$tpl);
                }
                if (
$count<$num$code.=$tpl;
                ++
$count;
                }
            }
            else{
                return 
FALSE;
            }
            echo 
$code;
            return 
TRUE;
        }
        else{
            return 
FALSE;
        }
    }
//خروجی
echo("<div class=\"rss-block\">");
display_feed("$url",$num);
echo(
"</div>");
?>

توضیح:

- آدرس فید خود را در متغیر url جایگزین کنید (حتما آدرس کامل را به صورت یا //:http درج کنید).
- تابع xml2array مقادیر دریافتی از فید را تجزیه کرده و آن را به صورت آریه هایی قابل استفاده در تابع دوم یعنی display_feed در می آورد.
- preg_match_all و preg_match در تابع xml2array، با جایگزینی مقادیر رشته ای با آرایه ها، امکان استفاده از آنها را در php فراهم می کنند.
- در تابع display_feed، محتویات فید مقصد را با file_get_contents دریافت می کنیم.
- در ادامه، تابع display_feed، به صورت داینامیک، تگ ها را با آرایه مقایسه کرده و مقادیر آنها را جایگزین می کند تا سرانجام نتیجه کد به صورت الگوی موجود در متغیر template در هر دور حلقه foreach به مرورگر ارسال شود.
- خروجی کد بالا در بلاکی با آی دی rss-block تولید می شود و هر آیتم، کلاس (css) با نام rss-item دارد، از این کلاس ها برای ایجاد تنظیمات و استایل css دلخواه می توانید استفاده کنید (اگر در این زمینه آشنایی ندارید، می توانید از نمونه پیش فرض، در انتهای همین صفحه استفاده کنید).
تنظیمات و استایل css قابل اعمال بر روی فید خوان php

کد بالا به صورت پیش فرض تنها لینک مطالب را خروجی می دهد، اما همانطور که پیش تر گفتیم، شما می توانید هرکدام از تگ های rss را در خروجی داشته باشید، مثلا توضیحات مطالب را با افزودن description به صورت #description# به متغیر template، علاوه بر لینک ها نمایش دهید، مثلا در کد زیر ما این کار را برای تاریخ و توضیحات انجام داده ایم.

کد php:
function display_feed($url$num$template="<div class=\"rss-item\"> &raquo; <a href=\"#link#\" target=\"_blank\">#title#</a><br />#description#<br />#pubDate#</div>"){
    if (
$rss=@file_get_contents($url)){
        
$rss=xml2array($rss);
        if (
is_array($rss)){
            
$code="";
            
$count=0;
            foreach(
$rss['rss'][0]['channel'][0]['item'] as $val){
                
$tpl=$template;
                foreach(
$val as $key=>$val2){
                    
$val2=html_entity_decode(htmlentities(@strip_tags($val2)));
                    
$tpl=str_replace("#".strtolower($key)."#"$val2$tpl);
                }
                if (
$count<$num$code.=$tpl;
                ++
$count;
            }
        }
        else{
            return 
FALSE;
        }
        echo 
$code;
        return 
TRUE;
    }
    else{
        return 
FALSE;
    }


برای اعمال استایل دلخواه نیز می توانید در یک کلاس css مقادیر مورد نظر خود را به کلاس های rss-block و rss-item نسبت دهید، برای مثال:

[CSS]<style type="text/css">
.rss-block{
border:1px #666 solid;
padding:4px;
line-height:18px;
}
.rss-block a{
text-decoration:none;
color:#06C;
}
.rss-block a:hover{
color:#09F;
}
.rss-item{
height:auto;
}
</style>[/CSS]

پیش نمایش اسکریپت فید خوان آر اس اس

نمونه کامل کد و پیش نمایشی از آن را می توانید در زیر مشاهده کنید.
[HTML]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | فید خوان آر اس اس با php</title>
<!-- -->
<style type="text/css">
body{
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
direction:rtl;
}
.rss-block{
border:1px #666 solid;
padding:4px;
line-height:18px;
}
.rss-block a{
text-decoration:none;
color:#06C;
}
.rss-block a:hover{
color:#09F;
}
.rss-item{
height:auto;
}
</style>
</head>
<body>
پیش نمایش اسکریپت فید خوان آر اس اس:<br /><br />
<?php
//تنظیمات
$url='http://webgoo.ir/rss.xml';//آدرس فید
$num='5';//تعداد لینک
//توابع
function xml2array($text){
$reg_exp = '/<(\w+)[^>]*>(.*?)<\/\\1>/s';
preg_match_all($reg_exp, $text, $match);
foreach ($match[1] as $key=>$val){
if (preg_match($reg_exp, $match[2][$key])){
$array[$val][] = xml2array($match[2][$key]);
}
else{
$array[$val] = $match[2][$key];
}
}
return $array;
}
function display_feed($url, $num, $template="<div class=\"rss-item\"> &raquo; <a href=\"#link#\" target=\"_blank\">#title#</a></div>"){
if ($rss=@file_get_contents($url)){
$rss=xml2array($rss);
if (is_array($rss)){
$code="";
$count=0;
foreach($rss['rss'][0]['channel'][0]['item'] as $val){
$tpl=$template;
foreach($val as $key=>$val2){
$val2=html_entity_decode(htmlentities(@strip_tags($val2)));
$tpl=str_replace("#".strtolower($key)."#", $val2, $tpl);
}
if ($count<$num) $code.=$tpl;
++$count;
}
}
else{
return FALSE;
}
echo $code;
return TRUE;
}
else{
return FALSE;
}
}
//خروجی
echo("<div class=\"rss-block\">");
display_feed("$url",$num);
echo("</div>");
?>
</body>
</html>
[/HTML]

وبگو | ساخت فید خوان آر اس اس (RSS Feed Reader) با php

پاسخ
#2
Note 
سلام
خیلی ممنون دنبال این کد میگشتم نمیتونسم پیدا کنم واقعا دستتون درد نکنه
فقط یه سوال دارم اگه بخوام فید ها رو فیلتر کنم چی کار باید بکنم؟ مثلا اگه بخوام فیدهایی رو نشون بده که مثلا توی description اش یه حرف خاص مثل "ورزش" بود کجاش رو باید تغییر بدم و به چه شکلی تغییر بدم؟

پاسخ
#3
Note 
ya5har نوشته است:سلام
خیلی ممنون دنبال این کد میگشتم نمیتونسم پیدا کنم واقعا دستتون درد نکنه
فقط یه سوال دارم اگه بخوام فید ها رو فیلتر کنم چی کار باید بکنم؟ مثلا اگه بخوام فیدهایی رو نشون بده که مثلا توی description اش یه حرف خاص مثل "ورزش" بود کجاش رو باید تغییر بدم و به چه شکلی تغییر بدم؟
سلام
به این پست یه نگاهی بندازید

امکان فیلتر گذاری که شما میخواستی رو بهش اضافه کردم
امیدوارم بدردتون بخوره.

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

کاربرانِ درحال بازدید از این موضوع:   1 مهمان