parsgreen.com
article

ساخت فید آر اس اس (RSS Feed)، با استفاده از php و mysql

mysql-php-rss-feed

آر اس اس (RSS) مخففی از سرواژه های RDF Site Summary (کلمه RDF مخفف Resource Description Framework) و معروف به Really Simple Syndication است و در اصطلاح به روشی گفته می شود که با آن می توان بدون مراجعه به یک سایت یا یک وبلاگ، با استفاده از ابزارهایی موسوم به آر اس اس خوان یا Feed Reader، آخرین مطالب آن را با صرف حداقل زمان و به صورت متن ساده یا متن همراه تصاویر معمولا به صورت چکیده پیش خوانی نمود، فیدها یا خوراک وب به زبان xml یا Extensible Markup Language هستند، به طور ساده زبان xml کدهایی را تولید می کند که برای انسان و ماشین قابل خواندن و استفاده بوده و قابلیت سازگاری با پلتفرم های مختلف را داشته باشد، پایه گذار xml کنسرسیوم جهانی وب یا همان w3c بود که با هدف پشتیبانی از یونیکدهای زبان های مختلف جهان در اینترنت، دست به ساخت این زبان زد که امروزه کم تر سایت یا وبلاگی است که یک خروجی rss نداشته باشد، در آموزش پیش رو خواهیم گفت که چگونه می توانیم به کمک php و mysql برای سایت یا وبلاگ شخصی خود فید آر اس اس یا همان خوراک وب را ایجاد و مدیریت کنیم.

آشنایی با فرمت کلی فید آر اس اس:


قبل از اینکه بتوانیم کدهای php و mysql خود را بنویسیم و از آنها خروجی xml بگیریم، باید فرمت کلی آن را بشناسیم؛ به طور ساده یک فید آر اس اس استاندارد، به صورت زیر است.
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>عنوان فید</title>
<link>http://yoursite.com</link>
<description>توضیح</description>
<language>fa</language>
<copyright>Copyright</copyright>
<item>
<title>عنوان مطلب</title>
<description>توضیح مطلب</description>
<link>لینک مطلب</link>
<guid>لینک مطلب</guid>
<pubDate>تاریخ مطلب به میلادی</pubDate>
<source url="http://yoursite.com/rss.xml">وبگو</source>
</item>
</channel>
</rss>
توضیح:
- کد بالا شیوه کلی نگارش صحیح خروجی یک فید آر اس اس ورژن 2 است.
- برای سازگاری و کاربرد بیشتر، تگ guid نیز به کد اضافه شده است (در حالت معمول بدون این تگ هم فید قابل استفاده است).
- یونیکد فید آر اس اس مخصوصا برای زبان فارسی باید utf-8 باشد.
- مطالب و اطلاعات آنها بین تگ های <item> و <item/> نوشته می شوند، یعنی برای هر مطلب، یک <item> و <item/> به همراه محتوای درون آن تکرار می شود.

چگونه از php و mysql برای ایجاد یک فید آر اس اس استفاده کنیم:


پس از اینکه با فرمت کلی خوراک وب آشنا شدیم، گرفتن خروجی از اطلاعات موجود در دیتابیس گام دوم است، برای این کار ابتدا یک فایل خالی با نام rss.xml ترجیحا در ریشه سایت بسازید (از این فایل برای نوشتن و خروجی نهایی استفاده خواهیم کرد)، سپس کد زیر را متناسب با دیتابیس و سیستم مدیریت محتوای خود تنظیم کنید.
<?php
//تعریف سرتیترها
$rssfeed = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
$rssfeed .= "<rss version=\"2.0\">";
$rssfeed .= "<channel>";
$rssfeed .= "<title>وبگو | فید آر اس اس</title>";
$rssfeed .= "<link>http://yoursite.com</link>";
$rssfeed .= "<description>آموزش برنامه نویسی و مهارتهای وب</description>";
$rssfeed .= "<language>fa</language>";
$rssfeed .= "<copyright>Copyright (C) ".date('Y')." http://yoursite.com</copyright>";
//انتخاب مطالب از پایگاه داده
$result = mysql_query("SELECT * FROM articles WHERE show = 'show' ORDER BY ranking + 0 DESC LIMIT 20")
or die (mysql_error());
//استفاده از ردیف های پایگاه داده
while($row = mysql_fetch_array($result)){
 $id = $row['id'];
 $title = $row['title'];
 //ایجاد خروجی استاندارد و جلوگیری از ایجاد کاراکترهای غیر مجاز
 $title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8');
 $summary = $row['summary'];
 //ایجاد خروجی استاندارد و جلوگیری از ایجاد کاراکترهای غیر مجاز
 $summary = htmlspecialchars($summary, ENT_QUOTES, 'UTF-8');
 //تبدیل تاریخ دیتابیس به تاریخ استاندار
 $date = $row['date'];// 22-12-1999
 $stringArray = explode("-", $date);
 $date = mktime(0,0,0,$stringArray[1],$stringArray[2],$stringArray[0]);
 $convert = date("D, j M Y", $date);
 $date = $convert .' '. $row['time'].' '.'GMT';
 //تعریف لینک خروجی
 $link = "http://yoursite.com/?article=$id";
 //ایجاد آیتم برای فید
 $rssfeed .= "<item>";
 $rssfeed .= "<title>" . $title . "</title>";
 $rssfeed .= "<description>" . $summary . "</description>";
 $rssfeed .= "<link>" . $link . "</link>";
 $rssfeed .= "<guid>" . $link . "</guid>";
 $rssfeed .= "<pubDate>" . $date . "</pubDate>";
 //$rssfeed .= "<author>" . mail . "(url)"."</author>"; //اختیاری
 $rssfeed .= "<source url=\"http://yoursite.com/rss.xml\">وبگو</source>";
 $rssfeed .= "</item>";
 }
$rssfeed .= "</channel>";
$rssfeed .= "</rss>";
//نوشتن اطلاعات در فایل خروجی
$file = "rss.xml";
chmod($file, 0755);
$fileHandle = fopen($file, 'w+')
or die("خطا: سطح دسترسی برای ویرایش فایل در سرور تنظیم نیست!");
$stringData = $rssfeed;
fwrite($fileHandle, $stringData);
fclose($fileHandle);
?>
توضیح:
- همان طور که گفتیم، برای استفاده از کد بالا باید موارد مورد نیاز را با توجه به پایگاه داده و سیستم مدیریت محتوای خود ویرایش کنید.
- در قسمت mysql_query، از جدول فرضی articles تعداد 20 مورد از آخرین مطالب منتشر شده ('WHERE show = 'show) را انتخاب کرده ایم.
- ranking + 0 برای جلوگیری از بروز مشکل عدد فرض نشدن ردیف هایی است که به صورت varchar تعریف شده اند (اگر در یک ردیف varchar بخواهید با اعداد، sort کنید، باید عدد صفر را به مقدار موجود اضافه کنید تا mysql نوع آن ردیف را به عنوان عدد بشناسد و بتواند روی آن ردیف، sort عددی را اجرا کند)، اگر نوع داده در ردیف مورد نظر INT باشد، نیازی به جمع با عدد صفر نیست.
- htmlspecialchars و تنظیمات آن برای جلوگیری از ایجاد کاراکترهای غیر مجاز در خروجی xml است.
- فرمت استاندارد تاریخ در فید آر اس اس به صورت Sat, 21 Apr 2012 14:36:40 GMT (جهت نمونه) است، لذا باید تاریخ mysql را به کمک توابع explode و mktime به این فرمت استاندارد تبدیل کنیم.
- قسمت مربوط به <author> اختیاری است، به طور استاندارد باید ایمیل سایت خود را در این قسمت تعریف کنید که این کار ممکن است موجب هجوم اسپمرها به آدرس پست الکترونیک شما شود.
- قسمت پایانی کد (chmod ،fopen ،fwrite و fclose) برای نوشتن اطلاعات در فایل rss.xml است.
- برای به روز رسانی مرتب فید آر اس اس بهتر است آن را در قسمت ارسال مطالب ایمپورت کنید تا با هر بار انتشار و ارسال پست های جدیدتر، اطلاعات جدید جایگزین موارد قبلی شود.
sectionدسته بندی: آموزش کاربردی » MySQL
related مطالب بیشتر:
» آموزش ساخت فرم تماس با php و mysql
» ایجاد لینک دانلود مدت دار با PHP و MySQL
» جستجو در مطالب سایت با استفاده از MySQL Full-Text و PHP
» تعویض کد امنیتی captcha با ajax و mysql
» نحوه رسم چارت و نمودار آماری با php و mysql
commentنظرات (۳۸ یادداشت برای این مطلب ارسال شده است)
نویسنده: elias
زمان: ۰۹:۱۶:۳۱ - تاریخ: ۱۳۹۱/۰۶/۱۶
سلام
تشکر می کنم از مطلب خوبی که گذاشتین. خیلی برای من مفید بود و اطلاعات خوبی به من داد. امروز میخوام یه آر اس اس برای یکی از سایت هام ایجاد کنم.
موفق و سربلند باشید
نویسنده: maryam
زمان: ۲۰:۳۹:۰۳ - تاریخ: ۱۳۹۱/۰۹/۰۴
سلام
تشکر مطلب مفیدی هست.
نویسنده: حسینی
زمان: ۱۴:۰۱:۳۲ - تاریخ: ۱۳۹۱/۰۹/۱۸
سلام ببخشید من از کدی که برای آر اس اس گذاشتین استفاده کردم ولی جواب نگرفتم لطف می کنید کمکم کنید. ممنون میشم جوابتون رو به ایمیلم بزنید خسته نباشید.
پاسخ: 
سلام
کدی که در آموزش معرفی شده صرفا یک نمونه است و باید آن را مطابق با سیستم سایت و دیتابیس آن تنظیم نمائید، در واقع باید با php و mysql و روند کار آنها آشنایی نسبی داشته باشید، در غیر این صورت ممکن است اشتباهاتی کنید که موجب از کار افتادن کد شود.
نویسنده: فرزانه
زمان: ۱۲:۱۱:۴۱ - تاریخ: ۱۳۹۱/۱۰/۲۸
با سلام به بچه های وبگو غرض از مزاحمت این کدی که شما برای آر اس اس گذاشتین موقعه ای که داخل دیتابیسم یه سری اطلاعات جدید اضافه میشه چه جوری میتونم به طور همزمان آر اس اس آپدیت بشه ممنون میشم کمکم کنید. چون این دوتا فایل جداگونه میباشد چه طور میتونم به طور همزمان دو تا فایل رو آدرس دهی یا اجراش کنم.
پاسخ: 
سلام
کار چندان سختی نیست البته به شرطی که کمی با php آشنا باشید، برای این کار هر کجا که نیاز به ساخت مجدد فایل rss است، کدها را می توانید در فایل فعلی include کنید (یعنی یک فایل اجرا می شود اما داخل آن یک فایل دیگر وارد می شود)، به عنوان مثال:
<?php
if($update_error == FALSE){
include('rss.php');
}
?>
که در اینجا ما متغیر فرضی update_error را بررسی می کنیم، اگر FALSE بود فایل rss.php را در ادامه کد وارد و اجرا می کنیم، البته می توانید در کد خود هر طور که نیاز است فایل را include کنید.
نویسنده: پرفكت استپس
زمان: ۱۳:۵۶:۲۰ - تاریخ: ۱۳۹۱/۱۰/۳۰
ممنونم از مطالب مفيدتون
نویسنده: حسین
زمان: ۱۹:۲۶:۲۶ - تاریخ: ۱۳۹۱/۱۲/۱۰
سلام.ببخشید من به فید آر اس اس شدیدا نیاز دارم.من سیستم مدیریت محتوا رو خودم طراحی کردم ولی با xml آشنایی ندارم. برای من این ارور رو در لاین آخر میده:
XML Parsing Error: no element found
Location: http://themeviews.ir/tools.xml
پاسخ: 
ظاهرا شما کدها را مستقیم در فایل xml کپی کرده اید! کدها را باید در فایل php اجرا کنید و خروجی xml دریافت نمائید.
نویسنده: حسین
زمان: ۲۰:۲۲:۵۳ - تاریخ: ۱۳۹۱/۱۲/۱۰
خیر. من تنظیمات دیتابیس رو انجام دادم و کدها رو درست و ویرایش کردم. بخاطر چه چیزهایی میتونه این ارور رو بده؟
پاسخ: 
بله، حق با شما است، یک ایراد ناخواسته در مطلب وجود داشت و آن اینکه بک اسلش هایی (در قسمت هایی که از علامت "" استفاده شده) از کد حذف شده بود، اما کد شما هم یک ایراد جزئی دارد، بعد از while این قسمت را حذف کنید:
<?php }?>
نویسنده: حسین
زمان: ۲۱:۳۹:۳۷ - تاریخ: ۱۳۹۱/۱۲/۱۰
سلام. فک کنم بدونم چرا اینطور شد. در ضمن راس میگفتید در قرار دادن } .
من که حالا فهمیدم، مشکلم این بوده که اصلا فایل xml من توسط php پردازش نمیشه و همه ی سورس کد های php رو به نمایش می گذاشت. میشه راهنمایی کنید؟
پاسخ: 
چند نکته زیر را بررسی کنید، شاید اشکال از این موارد باشد:
- فرمت فایلی که php را پردازش می کند باید php باشد نه xml، xml خروجی برای rss است.
- از ؟> استفاده نکنید و به جای آن از php?> استفاده کنید.
- صفحه syntax error نداشته باشد.
نویسنده: hossein
زمان: ۱۶:۵۳:۵۴ - تاریخ: ۱۳۹۱/۱۲/۱۱
سلام. واقعا که ممنون. درست شد ولی حالا یه سوال دیگه دارم و تمام. ببخشید اگه طولانی شد.
این اسکریپت شما یه مشکلی داره. اون هم اینکه هر وقت برای به روز شدن سایت، یک بار باید صفحه xml.php لود بشه تا مطالب به روز شده تو صفحه قرار بگیرند.
میشد به جای این کار که یکم اذیت میکنه از دستور header استفاده کنیم و فایل رو به صورت خروجی xml دریافت کنیم که دیگه این مشکل پیش نیاد.
از آموزش هاتون هم ممنون.
راستی یه چیز دیگه. میشه ساخت یک نظرسنجی ساده رو هم آموزش بدید؟
پاسخ: 
سلام
خواهش می کنیم، در مورد نحوه به روز رسانی فایل xml هر چند دقیقا متوجه منظورتان نشدیم، اما این کد صرفا یک نمونه است و می توانید ایده های خودتان را با توجه به آن اعمال کنید.
در مورد ایجاد نظرسنجی هم در آموزش های کاربردی و در آینده به آن خواهیم پرداخت.
نویسنده: hossein
زمان: ۱۴:۳۷:۲۱ - تاریخ: ۱۳۹۱/۱۲/۱۲
اگر اسکریپت رو امتحان کنید، منظورم رو می فهمید.
پاسخ: 
دستور header در اینجا کابردی ندارد، چون هدف از ایجاد rss.xml، دانلود آن نیست، فایل rss معمولا در ریشه سایت قرار می گیرد و حاوی لینک تعداد خاصی از آخرین مطالب سایت است، پس باید با ارسال هر مطلب جدید، لیست لینک ها (فایل rss.xml) هم متناسب با آخرین تغییرات به روزرسانی شوند، اگر ایده ی دیگری به ذهنتان می رسد لطفا با جزئیات بیشتری مطرح کنید تا متوجه منظورتان شویم.
نویسنده: ولی زاده
زمان: ۲۰:۵۹:۱۸ - تاریخ: ۱۳۹۱/۱۲/۳۰
با سلام جناب
ما هر چه قدر تلاش کردیم نتونستیم درستش کنیم
لطفا به طور کامل اموزش را به ایمیل می فرستید ممنون می شم
لطفا کد را در قالب php بفرستید
من هر چه قدر تلاش کردم نتوانستم جور کنم تنظیمات را هم انجام دادم نشد
لطفا راهنمایی نمایید
با تشکر فراوان
پاسخ: 
سلام
آموزش حاضر کامل است، مسئله اصلی این است که بتوانید با الگوبرداری از آن، متناسب با سیستم مدیریت محتوای خود فید آر اس اس بسازید که این موضوع خارج از مبحث حاضر است و بستگی به میزان آشنایی شما با php و mysql و CMS ای دارد که از آن استفاده می کنید.
نویسنده: ولی زاده
زمان: ۱۲:۲۲:۲۲ - تاریخ: ۱۳۹۲/۰۱/۰۱
با سلام دوباره
جناب ما فقط تنظیمات دیتابیس را انجام می دهیم و یک فایل rss.xml هم به صورت خالی تو هاستمون اپلود کردیم ولی باز هم کار نکرد
ممنون می شم کمکمون کنید
پاسخ: 
سلام
همان طور که گفتیم این کد صرفا یک نمونه است و جهت راهنمایی افرادی که با اصول و مبانی php و mysql آشنا هستند، مناسب است، به طور مثال قسمت انتخاب از پایگاه داده از جدول articles انجام می شود که کاملا فرضی است، باید ببینید برنامه شما از چه جداول و ستون هایی استفاده می کند و مطابق ساختار دیتابیس، کد را ویرایش کنید، به عبارتی با صرف کپی و درج کد، اتفاق خاصی نمی افتد! دستورات باید بر اساس برنامه شما ویرایش شوند.
نتیجه: اگر می خواهید خودتان فید rss بسازید، الزاما باید آشنایی مقدماتی با php و mysql داشته باشید.
نویسنده: ali
زمان: ۲۰:۳۶:۱۰ - تاریخ: ۱۳۹۲/۰۱/۱۶
عالی است
نویسنده: محمد مهدی
زمان: ۰۶:۲۱:۵۴ - تاریخ: ۱۳۹۲/۰۳/۰۷
خطای زیر میده
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 شما استاندارد نیست، به طور مثال مواردی خارج از تگ آغازی و پایانی چاپ می شوند و لذا مرورگر در پردازش صحیح سند دچار مشکل می شود، سورس فایل خروجی را بررسی و دقت کنید موارد، مطابق نمونه و به صورت استاندارد چاپ شده باشند.
نویسنده: محمد مهدی
زمان: ۰۱:۳۴:۳۲ - تاریخ: ۱۳۹۲/۰۳/۱۸
این کد رو استفاده کردم حتی اطلاعات دیتابیس رو توش اینکلود کردم باز نشد!
پاسخ: 
این کد صرفا یک الگو و جهت نمونه است، به طور مثال قسمت SELECT آن کاملا فرضی است! باید متناسب با دیتابیس، جداول و ستون های آن دستورات را بازنویسی کنید.
paged صفحه 1 از 3




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

9 × 1
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...