GORAGOD.com

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 ซึ่งมีข้อดีที่เราไม่ต้องมานั่งเขียนข่าวเอง แต่สามารถอ่านออกมาจากฐานข้อมูลได้โดยตรง และข่าวที่ได้ก็จะทันสมัยอยู่เสมอ เราจะมาดูการสร้างเอกสารด้วยวิธีนี้กันครับ
<?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&amp;category=$cat&amp;wb_id=$wb_id";
        } else {
          $wb_topic=$listrec[$i][wb_topic];
          $link="https://www.goragod.com/view.php?module=webboard&amp;category=$cat&amp;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 รายการ