ساخت RSS Feed با PHP

Create RSS Feed with PHP

24 شهریور 1399
ساخت RSS Feed با PHP

RSS یکی از راه های معروف به اشتراک گذاری محتوای خود با اینترنت است. این تکنولوژی به هیچ وجه جدید نیست و از سال های دو و درازی با ما بوده است. اگر شما صاحب یک وبلاگ هستید یا از CMS هایی مثل وردپرس استفاده می کنید احتمالا برنامه شما به صورت خودکار RSS را مدیریت می کند اما در برخی موارد ممکن است این اتفاق نیفتد. به همین جهت می خواهیم در این مقاله به شما نحوه ساخت RSS Feed با PHP را نمایش بدهیم.

RSS چیست؟

RSS مخفف Really Simple Syndication است که در فارسی ترجمه های مختلفی مانند «هم‌نشری بیش ساده» یا «هم‌نشری بسیار ساده» دارد. البته برخی RSS را مخفف RDF Site Summary می دانند که به معنی «خلاصه RDF سایت» است. در هر صورت RSS خانواده ای از فرمت های وب است که به ما اجازه می دهد محتوای به روز رسانی شده را منتشر کنیم تا کاربرانمان از آن مطلع شوند. به عبارت دیگر RSS به کاربران اجازه می دهد به به روز رسانی های وب سایت مورد علاقه شان در فرمتی استاندارد و قابل خواندن برای کامپیوتر ها دسترسی داشته باشند.

نکته جالب این است که کاربران می توانند به تمام پیام های RSS وب سایت های مورد علاقه شان به صورت یکجا دسترسی داشته باشند نه اینکه برای هر وب سایت به صورت جداگانه کار خاصی انجام بدهند. به طور مثال ما کاربر شما را یک کاربر با گوشی اندروید فرض می کنیم. این کاربر می تواند نرم افزار Flipboard را نصب کرده و آن را به آدرس های RSS وب سایت های مورد علاقه اش متصل کند. با این کار تمام به روز رسانی های این وب سایت ها را به صورت یکجا دریافت می کند.

فرمت RSS بر اساس XML است. بگذارید یک مثال ساده از یک فید RSS برایتان بزنم:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>My RSS feed</title>
        <link>http://www.mywebsite.com/</link>
        <description>This is an example RSS feed</description>
        <language>en-us</language>
        <copyright>Copyright (C) 2020 mywebsite.com</copyright>
        <item>
            <title>My News Story 3</title>
            <description>This is example news item</description>
            <link>http://www.mywebsite.com/news3.html</link>
            <pubDate>Mon, 23 Feb 2020 09:27:16 +0000</pubDate>
        </item>
        <item>
            <title>My News Story 2</title>
            <description>This is example news item</description>
            <link>http://www.mywebsite.com/news2.html</link>
            <pubDate>Wed, 14 Jan 2020 12:00:00 +0000</pubDate>
        </item>
        <item>
            <title>My News Story 1</title>
            <description>This is example news item</description>
            <link>http://www.mywebsite.com/news1.html</link>
            <pubDate>Wed, 05 Jan 2020 15:57:20 +0000</pubDate>
        </item>
    </channel>
</rss>

کد بالا یک نمونه RSS ساده از یک وب سایت فرضی است. برنامه هایی مانند flipboard این فید را خوانده و آن را به شکل زیبا برای کاربر نمایش می دهند (دقیقا مانند HTML). با این حساب ساخت RSS بسیار ساده و فارغ از زبان برنامه نویسی شما است. تنها کاری که باید انجام بدهید (با هر زبان برنامه نویسی که دارید) این است که مجموعه تگ های XML مورد نظرتان را با استاندارد RSS تعریف کنید. من در این مقاله این کار را با PHP انجام می دهم. در قدم اول نیاز به یک پایگاه داده داریم که اطلاعات RSS را در خود ذخیره کند. این پایگاه داده می تواند به شکل بسیار ساده ای باشد:

CREATE TABLE rss_info
 (
 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 title VARCHAR(200),
 link VARCHAR(200),
 description TEXT
 );

یا اینکه می توانید اطلاعات بیشتری را در آن قرار دهید. به طور مثال علاوه بر title (عنوان مطلب) و link (لینک مطلب در سایت شما) و Description (توضیحات مطلب)، فیلد pubDate (تاریخ انتشار) و امثال آن را نیز اضافه کنید. این ها همه بستگی به سلیقه خودتان دارد.

در مرحله بعدی یک فایل PHP به نام feed.php می سازیم و محتوای زیر را در آن قرار می دهیم:

<?php header('Content-type: application/xml'); 

define('DB_SERVER', 'localhost');
define('DB_USER', 'username');
define('DB_PASSWORD', 'password');
define('DB_NAME', 'database');
 
$conn = new PDO("mysql:host=".DB_SERVER.";port=8889;dbname=".DB_NAME, DB_USER, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

echo "<rss version='2.0' xmlns:atom='http://www.w3.org/2005/Atom'>\n";
echo "<channel>\n";

echo "<title>Demo RSS Feed</title>\n";
echo "<description>RSS Description</description>\n";
echo "<link>http://www.mydomain.com</link>\n";

 
$stmt = $conn->query('SELECT * FROM news ORDER BY newsDate DESC LIMIT 10');
while($row = $stmt->fetch(PDO::FETCH_OBJ)) {
    
     echo "<item>\n";
         echo "<title>$row->newsTitle</title>\n";
         echo "<description>$row->newsDesc</description>\n";
         echo "<pubDate>".date('D, d M Y H:i:s',strtotime($row->newsDate))." GMT</pubDate>\n";
         echo "<link>http://www.mydomain.com/$row->newsSlug</link>\n";
         echo "<guid>http://www.mydomain.com/$row->newsSlug</guid>\n";
         echo "<atom:link href='http://www.mydomain.com/$row->newsSlug' rel='self' type='application/rss+xml'/>\n"
     echo "</item>\n";

}

echo "</channel>\n";
echo "</rss>\n";
?>

بگذارید کد بالا را رایتان توضیح بدهم. در مرحله اول باید header پاسخ را روی XML تنظیم کنیم تا مرورگر بفهمد که کدهای ما HTML نیست. اینجاست که تابع ()header به کار ما می آید. در مرحله بعدی باید به پایگاه داده متصل شویم. من در کد بالا از رشته های ساده username و password برای نام کاربری و رمز عبور استفاده کرده ام اما طبیعتا شما باید از اطلاعات پایگاه داده خودتان استفاده کنید. در مرحله بعدی ورژن RSS و تگ <channel> را داریم که محتویات RSS ما درون آن قرار می گیرد. تگ های <title> و <description> و <link> در این قسمت مربوط به این کانال کلی (وب سایت شما) می باشد بنابراین آن ها را با <title> و <description> و <link> برای مطلب اشتباه نگیرید.

در مرحله بعدی یک حلقه ساده While را برای مطالب دریافت شده از پایگاه داده داریم. این مطالب را به صورت 10 عددی نشان می دهیم (DESC LIMIT 10 در کوئری بالا) و سپس آن ها را در تگ های XML مورد نظرشان نمایش می دهیم. از آنجایی که این تگ ها بسیار ساده هستند فکر نمی کنم نیازی به توضیح اضافه داشته باشند، فقط یادتان باشد که هر مطلب را درون یک تگ <item> قرار داده و در نهایت تگ های channel و rss را ببندید.

در ضمن اگر می خواهید تصویری را به این قسمت اضافه کنید باید از تگ CDATA استفاده نمایید:

<description><![CDATA[<img src='pathtoimage' alt=''> $row->newsDesc]]></description>

امیدوارم از این قسمت لذت برده باشید.

نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.