ساخت فید آر اس اس (RSS Feed) با استفاده از PHP و MySQL
آر اس اس (RSS) مخففی از سرواژه های RDF Site Summary و کلمه RDF مخفف عبارت Resource Description Framework است، RSS را با عنوان Really Simple Syndication نیز می نامند و در اصطلاح به روشی استاندارد گفته می شود که با آن می توان بدون مراجعه به یک سایت یا وبلاگ با استفاده از ابزارهایی موسوم به آر اس اس خوان یا Feed Reader، آخرین مطالب آن را با صرف حداقل زمان و به صورت متن ساده یا متن همراه با تصاویر معمولا به صورت چکیده پیش خوانی نمود، محتوای فیدها یا به اصطلاح خوراک وب به زبان XML (مخفف Extensible Markup Language) است، به بیان ساده زبان XML کدهایی را تولید می کند که هم برای انسان و هم برای ماشین قابل خواندن و استفاده بوده و قابلیت سازگاری با پلتفرم های مختلف را داشته باشد، پایه گذار XML کنسرسیوم جهانی وب W3C است که با هدف پشتیبانی از یونیکدهای زبان های مختلف جهان در اینترنت، دست به ساخت این زبان زد و امروزه کمتر سایت یا وبلاگی را می توان پیدا کرد که خروجی RSS از محتوای خود نداشته باشد، در آموزش پیش رو خواهیم گفت که چگونه می توانیم به کمک PHP و MySQL برای سایت یا وبلاگ شخصی خود فید آر اس اس یا همان خوراک وب را ایجاد و مدیریت کنیم.
فرمت کلی فید آر اس اس (RSS Feed)
قبل از اینکه بخواهیم کدهای PHP و MySQL خود را بنویسیم و از آنها خروجی XML بگیریم، باید فرمت کلی فید آر اس اس (RSS Feed) را بشناسیم، در نگاه کلی فرمت یک فید آر اس اس استاندارد به صورت نمونه زیر خواهد بود:
<?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>
<item>
<title>عنوان مطلب</title>
<description>توضیح مطلب</description>
<link>لینک مطلب</link>
<guid>لینک مطلب</guid>
<pubDate>تاریخ مطلب به میلادی</pubDate>
</item>
<item>
<title>عنوان مطلب</title>
<description>توضیح مطلب</description>
<link>لینک مطلب</link>
<guid>لینک مطلب</guid>
<pubDate>تاریخ مطلب به میلادی</pubDate>
<source url="https://webgoo.ir/rss.xml">وبگو</source>
</item>
</channel>
</rss>
توضیح:- کد بالا شیوه کلی نگارش صحیح خروجی یک فید آر اس اس نسخه 2 جهت نمونه است.
- یونیکد فید آر اس اس در قسمت encoding جهت سازگاری با زبان فارسی utf-8 تعیین شده است.
- هر فید آر اس اس باید با تگ rss شروع و به این تگ ختم شود، وجود این تگ الزامی است.
- تگ های اصلی فید مانند title، link، description باید بین تگ channel درج شوند، وجود این تگ الزامی است.
- مطالب و اطلاعات آنها نیز بین تگ های item نوشته می شوند، یعنی برای هر مطلب تگ جفتی item به همراه محتوای درون آن در قسمت channel تکرار می شود، به طور معمول آیتم ها در فید آر اس اس شامل چکیده ای از مطالب سایت یا وبلاگ هستند و با کلیک بر روی قسمت link کاربر را به مطلب اصلی هدایت می کنند.
- تگ guid (مخفف Globally Unique Identifier) را نیز به کد اضافه کرده ایم که محتوای آن آدرس URL منبع آیتم است (مشابه link)، در حالت معمول بدون درج تگ guid و صرفا با تگ link هم فید معتبر و قابل استفاده است اما جهت سازگاری بیشتر با انواع مختلف فیدخوان ها، این تگ نیز اضافه شده است.
- تگ pubDate تاریخ انتشار آیتم را مشخص می کند، pubDate از این لحاظ مهم است که معمولا جهت بررسی به روز بودن صفحات وب مورد استفاده موتورهای جستجویی چون گوگل قرار می گیرد، فرمت های مجاز تاریخ و زمان برای تگ pubDate یکی از شکل هایی است که در استاندارد RFC822 کنسرسیوم جهانی وب W3C مورد پذیرش است.
https://www.w3.org/Protocols/rfc822
به طور مثال:<pubDate>Mon, 1 Oct 2018</pubDate>
<pubDate>Mon, 1 Oct 2018 15:00:00 GMT</pubDate>
- تگ sorce که در انتهای آیتم دوم درج شده است زمانی کاربرد دارد که منبع آن آیتم از فید دیگری باشد (به طور مثال آیتم از فید آر اس اس سایتی دیگر باشد)، در این صورت آدرس URL فید آر اس اس مبداء در قسمت source به شکل نمونه درج می شود.چگونه از PHP و MySQL برای ایجاد فید آر اس اس استفاده کنیم؟
با فرمت کلی خوراک وب (RSS Feed) آشنا شدیم، گام دوم گرفتن خروجی از اطلاعات موجود در دیتابیس جهت ایجاد یا بازنویسی فایل XML است، برای این کار ابتدا یک فایل خالی با نام rss.xml ترجیحا در ریشه سایت (فولدر www یا public_html) می سازیم، این فایل در واقع همان فید آر اس اس سایتمان است که برای ایجاد و بازنویسی خروجی نهایی مورد نیاز خواهد بود، سپس نمونه کد زیر را متناسب با دیتابیس و سیستم مدیریت محتوای خود تنظیم می کنیم.
<?php
//تعریف تگ های اصلی
$rss_feed = '<?xml version="1.0" encoding="utf-8"?>' . "\n";
$rss_feed .= '<rss version="2.0">' . "\n";
$rss_feed .= '<channel>' . "\n";
$rss_feed .= '<title>وبگو | فید آر اس اس</title>' . "\n";
$rss_feed .= '<link>https://webgoo.ir</link>' . "\n";
$rss_feed .= '<description>آموزش برنامه نویسی و مهارتهای وب</description>' . "\n";
$rss_feed .= '<language>fa</language>' . "\n";
$rss_feed .= '<copyright>Copyright (C) ' . date('Y') . ' http://yoursite.com</copyright>' . "\n";
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn) {
echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
exit;
} else {
//انتخاب مطالب از پایگاه داده
$result = mysqli_query($conn, "SELECT id, title, description, date FROM articles WHERE publish = 1 ORDER BY rank DESC LIMIT 20")
or die (mysqli_error($conn));
//استفاده از اطلاعات پایگاه داده در حلقه
while($row = mysqli_fetch_array($result)){
$id = $row['id'];
$title = $row['title'];
$description = $row['description'];
//ایجاد خروجی استاندارد و تبدیل کاراکترهای غیر مجاز
$title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8');
$description = htmlspecialchars($description, ENT_QUOTES, 'UTF-8');
//تبدیل تاریخ دیتابیس به تاریخ استاندار (با فرض اینکه تاریخ دیتابیس با نمونه فرمت 00-00-00 22-12-1999 ذخیره شده باشد.)
$date = $row['date'];
$array = explode('-', $date);
$date = mktime(0, 0, 0, intval($array[1]), intval($array[2]), intval($array[0]));
$convert = date("D, j M Y", $date);
$date = $convert . ' GMT';
//تعریف لینک خروجی
$link = "http://yoursite.com/?article=$id";
//ایجاد آیتم ها برای فید
$rss_feed .= '<item>' . "\n";
$rss_feed .= '<title>' . $title . '</title>' . "\n";
$rss_feed .= '<description>' . $description . '</description>' . "\n";
$rss_feed .= '<link>' . $link . '</link>' . "\n";
$rss_feed .= '<guid>' . $link . '</guid>' . "\n";
$rss_feed .= '<pubDate>' . $date . '</pubDate>' . "\n";
$rss_feed .= '<author>آدرس ایمیل سایت</author>' . "\n";
//$rss_feed .= '<source url="http://yoursite.com/rss.xml">فید آر اس اس سایت</source>' . "\n";
$rss_feed .= '</item>' . "\n";
}
$rss_feed .= '</channel>' . "\n";
$rss_feed .= '</rss>' . "\n";
//نوشتن اطلاعات در فایل خروجی
$file = 'rss.xml';
chmod($file, 0755);
$file_handle = fopen($file, 'w+')
or die('خطا: سطح دسترسی برای ویرایش فایل در سرور تنظیم نیست!');
$string_data = $rss_feed;
fwrite($file_handle, $string_data);
fclose($file_handle);
}
//پایان اتصال
mysqli_close($conn);
?>
توضیح:- همان طور که گفتیم، برای استفاده از کد بالا باید موارد مورد نیاز را با توجه به پایگاه داده و سیستم مدیریت محتوای خود ویرایش کنیم.
- در ابتدای کدها خروجی تگ های اصلی مانند xml، rss، channel و... را در متغیر rss_feed می نویسیم.
- در گام بعدی باید اتصال به دیتابیس را برقرار کنیم، در این نمونه کد از اکستشن MySQLi به شیوه برنامه نویسی رویه ای استفاده کرده ایم و تابع mysqli_connect جهت اتصال درج گردیده است، اطلاعات اتصال (نام سرور، نام کاربری دیتابیس، کلمه عبور دیتابیس و نام جدول مربوطه) را به عنوان آرگیومنت در این تابع تنظیم کرده ایم.
- در صورت برقرار بودن اتصال به دیتابیس در تابع mysqli_query پرس و جوی فرضی از جدول articles را نوشته ایم که تعداد 20 مورد از آخرین مطالب منتشر شده (WHERE publish = 1) را به ترتیب (ORDER BY rank DESC) انتخاب می کند، قاعدتا این اسامی فرضی است و صرفا جهت نمونه استفاده شده اند، می توانیم مطابق با ساختار جدول و ستون های دیتابیس سایتمان در هنگام نوشتن کدهای شخصی از آنها الگوبرداری کنیم.
- می توانیم در ساختار جداول دیتابیس سایتمان ستونی برای مشخص کردن چینش آیتم ها به طور مثال با عنوان rank داشته باشیم، نوع ستون rank باید به صورت INT و عددی باشد در غیر این صورت برای استفاده از قابلیت ORDER BY لازم است که ستون rank با مقدار 0 جمع شود، با کاربرد عملگر جمع در پرس و جو، MySQL به صورت خودکار نوع INT را برای ستون مورد نظر در نظر می گیرد و امکان استفاده از قابلیت Sort با ORDER BY فراهم می شود، بر همین مبنا اگر ستون rank سایتمان به هر دلیل به صورت عددی نبود این بخش از دستور پرس و جو را به صورت نمونه زیر ویرایش می کنیم:
SELECT id, title, description, date FROM articles WHERE publish = 1 ORDER BY rank + 0 DESC LIMIT 20
- تابع htmlspecialchars و تنظیمات آن جهت جلوگیری از ایجاد کاراکترهای غیر مجاز و تبدیل آنها در محتوای XML مورد نیاز است، استفاده از کاراکترهای زیر در محتوای فایل های XML مجاز نیست و باید معادل HTML آنها جایگزین شود:< معادل <
> معادل >
" معادل "
' معادل '
& معادل &
- فرمت استاندارد تاریخ در فید آر اس اس به صورت Mon, 1 Oct 2018 15:00:00 GMT است، لذا باید تاریخ MySQL را به کمک توابع explode و mktime به این فرمت استاندارد تبدیل کنیم.- قسمت مربوط به author اختیاری است، به طور استاندارد باید ایمیل سایتمان را در این قسمت تعریف کنیم که این کار ممکن است موجب هجوم اسپمرها به آدرس پست الکترونیکمان شود.
- قسمت پایانی کد (chmod ،fopen ،fwrite و fclose) برای نوشتن اطلاعات در فایل rss.xml است.
- برای به روز رسانی مرتب فید آر اس اس بهتر است آن را در قسمت ارسال مطالب include کنیم تا با هر بار انتشار و ارسال پست ها، اطلاعات جدید جایگزین موارد قبلی شده و فایل rss.xml به روز شود.
اعتبارسنجی فید RSS در W3C Feed Validation Service
پس از ایجاد و ذخیره آیتم ها در فید RSS سایتمان، آخرین گام بررسی معتبر بودن ساختار کدنویسی و خروجی فایل XML به لحاظ استانداردهای سایت W3C است، خوشبختانه برای این هدف خدمات رایگانی تحت عنوان W3C Feed Validation Service در آدرس زیر قابل دسترسی است:
https://validator.w3.org/feed/
کافی است آدرس URL فید را در قسمت Validate by URI وارد یا محتوای آن را در قسمت Validate by direct input درج کنیم تا خطاهای احتمالی و پیشنهادات جهت بهینه سازی فید را از طریق سیستم اعتبارسنجی کنسرسیوم جهانی وب دریافت نمائیم.نحوه درج و استفاده از فید RSS در صفحات HTML
آخرین گام پس از ساخت فید آر اس اس (RSS Feed) درج و استفاده از آن در صفحات HTML است، بدین منظور در تگ head صفحه با استفاده از تگ link به فایل XML ایجاد شده در ریشه سایتمان لینک می دهیم:
<link rel="alternate" type="application/rss+xml" title="وبگو | فید آر اس اس" href="https://webgoo.ir/rss.xml">
با تنظیم و درج این کد در قسمت head صفحه وب امکان Subscribe یا مشترک شدن برای کاربران فراهم می شود و مخاطبان سایتمان می توانند تازه ترین مطالب و به روزرسانی ها را بدون مراجعه به محتوای اصلی به صورت خلاصه و سریع مشاهده کنند، همچنین می توانیم فید را در مواردی مانند ابزار وبمستر گوگل نیز استفاده کنیم که به لحاظ بهینه سازی برای موتورهای جستجو (SEO) امتیاز مثبت و مهمی محسوب می شود.آموزش ساخت فرم عضویت در سایت با PHP و MySQL
ایجاد لینک دانلود مدت دار با PHP و MySQL
تعویض کد امنیتی Captcha با Ajax و MySQL
آموزش حذف گروهی اطلاعات از MySQL با استفاده از چک باکس
هوشمند سازی پنل ورود و خروج سایت با PHP و MySQL
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
تشکر می کنم از مطلب خوبی که گذاشتین. خیلی برای من مفید بود و اطلاعات خوبی به من داد. امروز میخوام یه آر اس اس برای یکی از سایت هام ایجاد کنم.
موفق و سربلند باشید
تشکر مطلب مفیدی هست.
<?php
if($update_error == false){
include('rss.php');
}
?>
که در اینجا ما متغیر فرضی update_error را بررسی می کنیم، اگر false بود فایل rss.php را در ادامه کد وارد و اجرا می کنیم، البته می توانید در کد خود هر طور که نیاز است فایل را include کنید.XML Parsing Error: no element found
Location: http://themeviews.ir/tools.xml
<?php }?>
من که حالا فهمیدم، مشکلم این بوده که اصلا فایل xml من توسط php پردازش نمیشه و همه ی سورس کد های php رو به نمایش می گذاشت. میشه راهنمایی کنید؟
- فرمت فایلی که PHP را پردازش می کند باید php باشد نه xml، xml خروجی برای RSS است.
- از ؟> استفاده نکنید و به جای آن از php?> استفاده کنید.
- صفحه Syntax Error نداشته باشد.
این اسکریپت شما یه مشکلی داره. اون هم اینکه هر وقت برای به روز شدن سایت، یک بار باید صفحه xml.php لود بشه تا مطالب به روز شده تو صفحه قرار بگیرند.
میشد به جای این کار که یکم اذیت میکنه از دستور header استفاده کنیم و فایل رو به صورت خروجی xml دریافت کنیم که دیگه این مشکل پیش نیاد.
از آموزش هاتون هم ممنون.
راستی یه چیز دیگه. میشه ساخت یک نظرسنجی ساده رو هم آموزش بدید؟
در مورد ایجاد نظرسنجی هم در آموزش های کاربردی و در آینده به آن خواهیم پرداخت.
ما هر چه قدر تلاش کردیم نتونستیم درستش کنیم
لطفا به طور کامل اموزش را به ایمیل می فرستید ممنون می شم
لطفا کد را در قالب php بفرستید
من هر چه قدر تلاش کردم نتوانستم جور کنم تنظیمات را هم انجام دادم نشد
لطفا راهنمایی نمایید
با تشکر فراوان
جناب ما فقط تنظیمات دیتابیس را انجام می دهیم و یک فایل rss.xml هم به صورت خالی تو هاستمون اپلود کردیم ولی باز هم کار نکرد
ممنون می شم کمکمون کنید
نتیجه: اگر می خواهید خودتان فید RSS بسازید، الزاما باید آشنایی مقدماتی با PHP و MySQL داشته باشید.
This page contains the following errors:
error on line 3 at column 55: Document is empty
Below is a rendering of the page up to the first error.
از کد شما استفاده کردم برای ار اس اس یه سایتی
مشکل اینجاس که هر دفعه که اطلاعات رو توی فایل xml
میریزم انکودینگ فایل xml به ansi تغییر میکنه
راه حلی دارین ایا؟
$stringData = chr(239) . chr(187) . chr(191) . $rssfeed;
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.