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

همانطور که می دانیم استفاده از فید آر اس اس (RSS Feed یا خوراک وب) یکی از روش های متداول و کاربردی برای اطلاع از آخرین به روز رسانی محتوای سایت ها و وبلاگ ها است که خیلی از کاربران ترجیح می دهند از این طریق مطالب صفحه مورد علاقه خودشان را پیگیری و دنبال کنند، اما استفاده از این امکان تنها به همین مورد محدود نمی شود، خرجی RSS قابلیتی را فراهم می کند که می توانیم به فرض لیستی از مطالب به روز سایت ها یا وبلاگ ها را به صورت لینک باکس طراحی کرده و در وبلاگ یا سایت خود به نمایش درآوریم یا خلاصه ای از تازه ترین مطالب بخش های مختلف سایت ها یا وبلاگ های مختلف را در صفحه سایت یا وبلاگمان به بازدیدکننده گان نمایش داده و یا هر ایده ی دیگری که به ذهنمان می رسد را با اطلاعات موجود در فید اجرایی کنیم، به هر صورت با ذکر این مقدمه قصد داریم نحوه ساخت فید خوان آر اس اس (RSS Feed Reader) را با برنامه نویسی PHP آموزش دهیم.
فیدخوان آر اس اس (RSS Feed Reader) چیست؟
هر فید وب حاوی اطلاعاتی در چارچوب زبان XML است که در فایلی با همین پسوند ذخیره و نگهداری می شوند، به طور معمول این اطلاعات درون تگ های XML درج شده اند و به صورت خام چندان خوانا و قابل استفاده نیستند، به همین دلیل به برنامه یا اسکریپتی نیاز خواهیم داشت تا فایل فید را دریافت، اطلاعات موجود در آن را تجزیه و تحلیل نموده و در نهایت مطابق با هدف و نیازمان به خروجی صفحات HTML ارسال کند، با این تفسیر منظور از فیدخوان آر اس اس (RSS Feed Reader) برنامه ای است که قابلیت استخراج اطلاعات فیدهای RSS را داشته باشد و بدین منظور در وب به طور معمول یکی از زبان های برنامه نویسی سمت سرور مانند PHP مورد استفاده قرار می گیرد.
آشنایی با شیوه نگارش (Syntax) فید آر اس اس (RSS Feed)
قبل از اینکه به قسمت کدنویسی PHP بپردازیم بد نیست با شیوه نگارش (Syntax) یک نمونه فید آر اس اس (RSS Feed) آشنا شویم چرا که برنامه PHP که خواهیم نوشت ابتدا محتوای فایل XML مقصد (فید آر اس اس) را به عنوان اطلاعات ورودی دریافت و سپس تجزیه تحلیل خواهد کرد، بر همین اساس یک فید آر اس اس معمولی از تگ های خاصی به زبان XML استفاده می کند که در نمونه زیر ساختار کلی آن درج شده است:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>عنوان فید</title>
<link>https://webgoo.ir</link>
<description>توضیح</description>
<language>fa</language>
<copyright>Copyright</copyright>
<item>
<title>عنوان مطلب</title>
<description>توضیح مطلب</description>
<link>لینک مطلب</link>
<guid>لینک مطلب</guid>
<pubDate>تاریخ مطلب به میلادی</pubDate>
<source url="https://webgoo.ir/rss.xml">وبگو</source>
</item>
</channel>
</rss>
توضیح:- هر فید آر اس اس از تگ های کلیدی تشکیل شده که هر کدام برای نگهداری محتوای خاصی کاربرد دارند، به طور مثال تگ title عنوان مطلب و تگ link آدرس URL مطلب را در خود جای می دهند، یا از description برای پیش نمایش مطلب و pubDate برای درج تاریخ ایجاد آن استفاده می کنیم.
- کد PHP که در ادامه بررسی خواهیم کرد با دریافت فایل XML فید به عنوان ورودی، تگ های موجود در آن را تجزیه کرده و نتایج به دست آمده را به نحو دلخواه در خروجی نمایش می دهد.
کد PHP فید خوان آر اس اس (RSS Feed Reader)
برای استخراج و نمایش محتوای فیدهای آر اس اس در سایت یا وبلاگمان (در صورت استفاده از هاست و دامنه شخصی) می توانیم از توابع زیر که به زبان PHP نوشته شده اند استفاده کنیم، بدین منظور کافی است آدرس فید را جایگزین مقادیر پیش فرض در کد نمائیم.
<?php
//تنظیمات
$url = 'https://webgoo.ir/rss.xml';//آدرس فید
$num = '5';//تعداد آیتم
//تبدیل اطلاعات فید به آرایه
function xmlToArray($text){
$regexp = '/<(\w+)[^>]*>(.*?)<\/\\1>/s';
preg_match_all($regexp, $text, $match);
$loop = 0;
foreach($match[1] as $key=>$val){
if(preg_match($regexp, $match[2][$key])){
@$array[$val][$loop] = xmlToArray($match[2][$key]);
} else {
@$array[$val] = $match[2][$key];
}
$loop++;
}
return $array;
}
//آماده سازی فید جهت ایجاد خروجی
function displayFeed($url, $num){
$template = '<div class="rss-item"> » <a href="#link#" target="_blank">#title#</a></div>' . "\n";
if($rss = @file_get_contents($url)){
$rss = xmlToArray($rss);
if(is_array($rss)){
$code = "";
$count = 0;
foreach($rss['rss'][0]['channel'][0]['item'] as $val){
$tpl = strtolower($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">' . "\n";
displayFeed("$url", $num);
echo '</div>';
?>
توضیح:- آدرس فید مد نظر را در ابتدای کدها در متغیر url جایگزین می کنیم (حتما باید آدرس کامل را به صورت http://www یا //:http درج کنیم)، این آدرس به طور معمول به فرمت xml ختم می شود (اگر آدرس به فرمت xml ختم نشد خروجی آن باید به زبان XML باشد).
- دقت کنیم که محتوای فید از نظر استاندار کدنویسی معتبر باشد، برای این منظور می توانیم از سرویس اعتبارسنجی W3C در آدرس زیر استفاده کنیم:
https://validator.w3.org/feed/
- در تابع displayFeed ابتدا محتویات فید مقصد را با روش file_get_contents دریافت و جهت تجزیه و استخراج اطلاعات تگ ها تابع xmlToArray را با مقادیر دریافت شده به عنوان آرگیومنت فراخوانی می کنیم.- تابع xmlToArray مقادیر دریافتی از فید را با استفاده از روش preg_match_all و preg_match تجزیه کرده و نتیجه را به صورت آریه قابل استفاده در تابع displayFeed برمی گرداند.
- در ادامه، تابع displayFeed به صورت داینامیک الگوی هشتگ های موجود در متغیر template را با آرایه دریافتی مقایسه کرده و مقادیر متناظر آنها را جایگزین می کند تا سرانجام نتیجه برنامه در هر دور حلقه foreach ایجاد و در نهایت به مرورگر ارسال شود.
- با توجه به استفاده از تابع strtolower در کدنویسی برنامه، اسکریپت به بزرگ یا کوچک بودن حروف حساس نیست.
- خروجی کد بالا در بلاکی با آی دی rss-block تولید می شود و هر آیتم، کلاسی با نام rss-item دارد، از این کلاس ها می توانیم برای ایجاد تنظیمات و استایل CSS دلخواه استفاده کنیم (نمونه پیش فرض در انتهای همین صفحه به صورت پیش نمایش آنلاین درج شده است).
تنظیمات و استایل CSS قابل اعمال بر روی فید خوان PHP
کد بالا در حالت پیش فرض تنها لینک مطالب را به صورت HTML خروجی می دهد، اما همانطور که پیش تر گفتیم در صورت نیاز می توانیم محتوای هر کدام از تگ های RSS را در خروجی داشته باشیم، به طور مثال متن مربوط به توضیحات مطالب را با افزودن تگ description به صورت #description# به متغیر template علاوه بر لینک ها در خروجی نمایش دهیم، در نمونه کد زیر این کار را برای مقادیر تاریخ و توضیحات آیتم های فید انجام داده ایم:
$template = '<div class="rss-item"> » <a href="#link#" target="_blank">#title#</a><br>#description#<br>#pubDate#</div>' . "\n";
برای اعمال استایل دلخواه نیز می توانیم در فایل CSS مقادیر مورد نظر خود را به کلاس های rss-block و rss-item نسبت دهیم، مثال:<style>
.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>
پیش نمایش اسکریپت فید خوان آر اس اس
نمونه کامل کد فید خوان آر اس اس با برنامه نویسی PHP و پیش نمایش آنلاین آن در لینک زیر قابل تست و بررسی است.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | فید خوان آر اس اس با PHP</title>
<!-- Webgoo.ir -->
<style>
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>
<?php
//تنظیمات
$url = 'https://webgoo.ir/rss.xml';//آدرس فید
$num = '5';//تعداد آیتم
//تبدیل اطلاعات فید به آرایه
function xmlToArray($text){
$regexp = '/<(\w+)[^>]*>(.*?)<\/\\1>/s';
preg_match_all($regexp, $text, $match);
$loop = 0;
foreach($match[1] as $key=>$val){
if(preg_match($regexp, $match[2][$key])){
@$array[$val][$loop] = xmlToArray($match[2][$key]);
} else {
@$array[$val] = $match[2][$key];
}
$loop++;
}
return $array;
}
//آماده سازی فید جهت ایجاد خروجی
function displayFeed($url, $num){
$template = '<div class="rss-item"> » <a href="#link#" target="_blank">#title#</a><br>#description#<br>#pubDate#</div>' . "\n";
if($rss = @file_get_contents($url)){
$rss = xmlToArray($rss);
if(is_array($rss)){
$code = "";
$count = 0;
foreach($rss['rss'][0]['channel'][0]['item'] as $val){
$tpl = strtolower($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">' . "\n";
displayFeed("$url", $num);
echo '</div>';
?>
</body>
</html>
پیش نمایش آنلاین
ارسال ایمیل با PHP و کلاس PHPMailer
دریافت و نمایش پیج رنک گوگل با PHP
ارسال پارامتر به URL و دریافت مقادیر با PHP
نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess


file://192.168.30.192/images/PRODUCT/
ممنون میشم راهنمایی بفرمایید من خیلی تو نت سرچ زدم ولی موفق نشدم<?php
$user = 'remote_pc_username';
$password = 'remote_pc_password';
exec('net use "\\\REMOTE_PC_NAME_IP\path\to\dir" /user:"' . $user . '" "' . $password . '" /persistent:no');
$files = scandir('\\\REMOTE_PC_NAME_IP\path\to\dir');
print_r($files);
exec('net use "\\\REMOTE_PC_NAME_IP\path\to\dir" /delete /yes');
?>
توضیحاتی در خصوص net use command در ویندوز:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/gg651155(v=ws.11)
https://qualitestgroup.com/insights/technical-hub/how-to-map-a-drive-over-a-network/
همچنین کلاس smb4php را هم می توانید امتحان کنید:https://www.phpclasses.org/browse/file/20566.html
امکانش هست یک توضیحی راجب به ایجاد یک صفحه داینامیک بفرمایید. من یک دیتابیس دارم با عناوین مثلا titel, description, link
میخوام با اضافه شدن هر id جدید که دارای لینک جدیدی هم هست صفحه جدید ایجاد و مطالب دیتابیس در صفحه جدید ارسال بشه.
example.com/page.php?id=23
و در فایل page.php با متد GET پارامتر ID دریافت شده:<?php
$post_id = @$_GET['id'];
?>
در ادامه اطلاعات ردیف متناظر با این آی دی از دیتابیس درخواست و استخراج می شود:SELECT titel, description, link FROM tbl_name WHERE id = $post_id LIMIT 1
البته این پرس و جو خام است و باید با اکستنشن MySQLi یا PDO نوشته شده و امنیت کدها نیز حفظ شود (در آموزش های مقدماتی MySQL نمونه کدهای کامل وجود دارد)، در نهایت خروجی HTML توسط برنامه نویسی PHP و در حلقه while ایجاد می شود.http://torbat-music.ir/feed/
تو رو خدا جواب بدینhttps://validator.w3.org/feed/
مشکلی دیده نشد!کد ار اس اس چیکار باید بکنم سایتم نه جوملاست نه وردپرس از هرکسیم میپرسم جواب درستی بهم نمیده
به پشتیبانی سایتم ایمیل زدم جواب درستی ندادن
لطفا اگر میتونید کمک کنید
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);
/* Check for 404 (file not found). */
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
/* Handle 404 here. */
}
curl_close($handle);
ببخشید، من میخوام بدونم که چطوری یه حرکتی بزنیم که اگر RSS جدید اومد خودش به صورت خودکار بره و بگیره؟
مثل rss های سایت ها خبری ... همیشه خبر جدید میدن .. من چطوری کاری کنم که همیشه فعال باشه و بره RSS جدید رو بگیره؟
یه سولی داشتم
چجوری میشه از چندتا آدرس فید گرفت یعنی مولتی آر اس اس بشه چند تا url بهش بدی بر اساس مثلا تاریخ نشون بده
ممنون
display_feed("$url_1",$num);
display_feed("$url_2",$num);
روش دیگر استفاده از حلقه است که توضیح آن چندان ساده نیست و باید با برنامه نویسی آشنا باشید.Parse error: syntax error, unexpected T_STRING in /rss.php on line 21
مواجه میشم !!در واقع تیکه خط زیر رو خطا میگیره
<?xml version="1.0" encoding="UTF-8"?>
میشه بفرمایید علتش چیه؟؟ممنون بابت آموزش نگارش RSS
خیلی وقته دنبال این آموزش میگشتم.
بازم ممنونم
یه مشکل عجیب و غریب داخل ار اس اس سایت من هست که نمیدونم چجوری حلش کنم ممنون میشم کمکم کنید
چند وقت پیش دامنه اصلی سایتم رو تغییر دادم پشتیبانیم جواب نمیداد با استفاده از فول بک اپ جابجا شدم و دامنه اصلی و دیتابیسم هم تغییر دادم
الان مشکل اینه که توی ار اس اس یه قسمت اسم دامنه قلبی میاد
به این دقت کنید
<item>
<title>كوهساران مرا پر كن ای طنین فراموشی</title>
<link>http://www.gap8.ir/sher026/</link>
<pubDate>Sat, 20 Feb 2016 15:43:09 +0000</pubDate>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[آوار افتاب]]></category>
<category><![CDATA[سهراب سپهری]]></category>
<category><![CDATA[شعرنو]]></category>
<guid isPermaLink="false">http://www.chat11.ir/?p=559</guid>
<description><![CDATA[كوهساران مرا پر كن ای طنین فراموشی نفرین به زیبایی آب تاریك خروشان كه هست مرا فرو پیچد و برد تو ناگهان زیبا هستی اندامت گردابی است موج تو اقلیم مرا گرفت ترا یافتم اسمان ها را پی بردم ترا یافتم درها را گشودم شاخه ها را خواندم افتاده باد آن برگ كه به آهنگ […]]]></description>
</item>
ببینید دامنه قبلی توی ار اس اس هستش چجوری میتونم این مشکل رو حل کنم ممنون میشم راهنماییم کنیدببخشید من مبتدی هستم و سوالم ممکن است بسیار ابتدایی باشد.
وب سایت من یک وب سایت استاتیک است که با html و css نوشته ام می خواهم برایش کلید rss تعریف کنم و در تمامی صفحات قرار دهم. آخرین کدی که برای فید گذاشتین رو فقط با تغییر url اون درون یه فایل rss.xml ریختم و توی روت سایتم قرار دادم و کلیدی را که برای rss تعریف کرده بودم را لینک دادم به فایل rss.xml ، نمی دانم همین کار را باید می کردم یا خیر ؟ اما وقتی روی کلید فید کلیک می کنم صفحه ای باز می شود که ارور می دهد...
باید چکار کنم؟
ممنون میشم من رو راهنمایی کنید.
http://webgoo.ir/rss.xml
نکته: آدرس فوق را در مرورگر وارد کرده، سپس در صفحه کلیک راست و گزینه View Page Source را انتخاب کنید، فایل xml شما باید چنین سورسی داشته باشد!<image>
<url>http://site.com/img/icon.png</url>
<link>http://site.com/index.php</link>
</image>
گوگل وبمستر از این تگ خطا میگیره... مشکل این وسط چیه ؟عکس ضمیمه :
http://s6.picofile.com/file/8221489700/Error_rss1.png
باتشکرhttp://www.landofcode.com/rss-reference/image-tag.php

پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.