RSS กับ XML (ตอนที่ 5)
ตอนที่แล้วเราได้เรียนรู้การอ่านข่าว RSS ไปแล้ว ตอนนี้เราจะมาทำตัวเป็นผู้นำเสนอข่าวบ้าง หลักการก็คือเราจะต้องจัดการสร้างเอกสาร RSS ขึ้นมาตามมาตรฐาน XML เพื่อให้ ตัวอ่าน(Reader) สามารถอ่านเอกสารได้ เราสามารถสร้างเอกสารได้ใน 2 แบบหลักๆก็คือ
1.สร้างเอกสาร XML โดยการเขียนขึ้นมาด้วยตัวเองตามข้อกำหนดของเอกสาร ในกรณีนี้เราจะได้เอกสารนามสกุล xml เพื่อให้ Reader นำไปใช้งานได้ทันทีครับ ในกรณีนี้ลิงค์ที่ได้จะมีนามสกุลเป็น xml เช่น http://www.rssthai.com/rss/foreign.xml
2.ใช้โปรแกรมสร้างเอกสารโดยการอ่านมาจากฐานข้อมูล แล้วให้ output ออกมาเป็นเอกสาร XML ครับ เช่น https://www.goragod.com/...s.php?category=xhtml ซึ่งมีข้อดีที่เราไม่ต้องมานั่งเขียนข่าวเอง แต่สามารถอ่านออกมาจากฐานข้อมูลได้โดยตรง และข่าวที่ได้ก็จะทันสมัยอยู่เสมอ เราจะมาดูการสร้างเอกสารด้วยวิธีนี้กันครับ
โค้ดตัวอย่างนี้อ่านมาจาก database ของเว็บไซต์ผม ดังนั้นการนำไปใช้งานต้องแก้ไขโค้ดให้ได้ตามต้องการครับ (ส่วนสีน้ำเงิน)
สำหรับบนเว็บไซต์ผม สามารถอ่านได้จากทุก category โดยสามารถระบุ category ต่างๆได้ตามกรอบ Category ด้านข้างเว็บไซต์ครับ และสามารถระบุได้มากกว่า 1 category โดยคั่นแต่ละ category ด้วย ,(comma) ด้วยคำสั่ง category=xxx
สามารถระบุจำนวนข่าวที่ต้องการได้ ซึ่งถ้าไม่ระบุจะแสดง category ละ 10 รายการ ด้วยคำสั่ง count=xxx
https://goragod.com/forumrss อ่านกระทู้ล่าสุดของบอร์ด จำนวน 10 รายการ
https://goragod.com/...ss?count=5&cat=2 อ่านบทความล่าสุดของหมวดที่ 2 จำนวน 5 รายการ
1.สร้างเอกสาร XML โดยการเขียนขึ้นมาด้วยตัวเองตามข้อกำหนดของเอกสาร ในกรณีนี้เราจะได้เอกสารนามสกุล xml เพื่อให้ Reader นำไปใช้งานได้ทันทีครับ ในกรณีนี้ลิงค์ที่ได้จะมีนามสกุลเป็น xml เช่น http://www.rssthai.com/rss/foreign.xml
2.ใช้โปรแกรมสร้างเอกสารโดยการอ่านมาจากฐานข้อมูล แล้วให้ output ออกมาเป็นเอกสาร XML ครับ เช่น https://www.goragod.com/...s.php?category=xhtml ซึ่งมีข้อดีที่เราไม่ต้องมานั่งเขียนข่าวเอง แต่สามารถอ่านออกมาจากฐานข้อมูลได้โดยตรง และข่าวที่ได้ก็จะทันสมัยอยู่เสมอ เราจะมาดูการสร้างเอกสารด้วยวิธีนี้กันครับ
<?php
header("Expires: Sat, 1 Jan 2005 00:00:00 GMT");
header("Last-Modified: ".gmdate( "D, d M Y H:i:s")."GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("content-type: text/xml; charset=TIS-620");
//category เช่น ajax, xhtml, webdir, vc, vb, delphi, web, program, vcboard, vbbpard, dpboard, webboard, news
//เลือกได้มากกว่า 1 หมวดคั่นแต่ละหมวดโดย ,(comma)
$category=$_GET[category];
//จำนวนรายการสูงสุดที่ต้องการ
$count=(int)$_GET[count];
//ถ้าไม่ได้กำหนดมาให้แสดง 10 รายการ
if ($count==0) $count=10;
//แยก category ออกเป็น array เพื่ออ่านทีละหมวด
$categorys=explode(',', $category);
include_once("config/config.php"); //โหลด settings
include_once("config/function.php"); //โหลด ฟังก์ชั่น
include_once("config/tdb.class.php"); //เรียกใช้ คลาส text database
$db=new tdb($config[data], "db.tdb"); //เปิดฐานข้อมูล
echo "<?xml version=\"1.0\" encoding=\"TIS-620\"?> ";
echo "<rss version=\"2.0\"> ";
echo "<channel> ";
//โค้ดส่วนนี้เปลี่ยนแปลงตามแต่ละเว็บ
echo "<title>g-O-r-a-g-o-d.com</title> ";
echo "<description>แหล่งเรียนรู้ด้วยตัวเอง จากซอร์สโค้ดและแอพพลิเคชั่น</description> ";
echo "<link>https://www.goragod.com</link> ";
echo "<pubDate>".date("D, d M Y H:i:s", $mmktime)." +0700</pubDate> "; //วันที่ วันนี้
//โค้ดส่วนนี้เปลี่ยนแปลงตามแต่ละเว็บ
for ($n=0; $n<count($categorys); $n++) {
//category ที่อ่าน
$cat=$categorys[$n];
$listofcategory=$db->basicSearch("webboardcategory", "cat_name", $cat);
$cattopic=$listofcategory[cat_topic];
//จาก text database
$listrec=$db->listRec("Q$cat");
//จาก text database
$listpage=$count;
if ($listrec) {
for ($i=count($listrec)-1; $i>=0 & ($listpage>0); $i--) {
echo "<item> ";
$listpage--;
//จาก text database
$wb_id=$listrec[$i][wb_id];
if ($cat=="xhtml" || $cat=="ajax" || $cat=="vb" || $cat=="vc" || $cat=="delphi" || $cat=="web" || $cat=="program") {
//หมวด howto
$data=explode("|", $listrec[$i][wb_topic]);
$wb_topic=$data[0];
$link="https://www.goragod.com/view.php?module=howto&category=$cat&wb_id=$wb_id";
} else {
$wb_topic=$listrec[$i][wb_topic];
$link="https://www.goragod.com/view.php?module=webboard&category=$cat&wb_id=$wb_id";
}
//แยกวันที่ออกเพื่อจัดรูปแบบ
$date=explode(" ", $listrec[$i][wb_date]);
//แปลงเดือนไทยกลับเป็นตัวเลข
for ($month=0; $month<count($thaimonth) & $thaimonth[$month]!=$date[1]; $month++) {
}
//คืนค่าวันที่ตามฟอร์แมต RFC822
$cdate=date("D, d M Y", mktime(0,0,0,$month+1,$date[0],(int)$date[2]-543));
//จาก text database
echo "<title>$wb_topic [$cattopic]</title> ";
echo "<link>$link</link> ";
echo "<description>คลิกเพื่ออ่าน</description> ";
echo "<pubDate>$cdate ".$listrec[$i][wb_time].":00 +0700</pubDate> ";
echo "<guid>$link</guid> ";
echo "</item> ";
}
}
}
echo "</channel> ";
echo "</rss> ";
โค้ดตัวอย่างนี้อ่านมาจาก database ของเว็บไซต์ผม ดังนั้นการนำไปใช้งานต้องแก้ไขโค้ดให้ได้ตามต้องการครับ (ส่วนสีน้ำเงิน)
สำหรับบนเว็บไซต์ผม สามารถอ่านได้จากทุก category โดยสามารถระบุ category ต่างๆได้ตามกรอบ Category ด้านข้างเว็บไซต์ครับ และสามารถระบุได้มากกว่า 1 category โดยคั่นแต่ละ category ด้วย ,(comma) ด้วยคำสั่ง category=xxx
สามารถระบุจำนวนข่าวที่ต้องการได้ ซึ่งถ้าไม่ระบุจะแสดง category ละ 10 รายการ ด้วยคำสั่ง count=xxx
https://goragod.com/forumrss อ่านกระทู้ล่าสุดของบอร์ด จำนวน 10 รายการ
https://goragod.com/...ss?count=5&cat=2 อ่านบทความล่าสุดของหมวดที่ 2 จำนวน 5 รายการ