เราจะให้บริการ Rss ยังไงดี?

ณ ขณะนี้ ยังคิดเรื่องที่จะเขียนเกี่ยวกับ jQuery ไม่ออก เอา PHP ไปอีกเรื่องละกัน แต่ขอเขียนแค่สั้นๆ ดีกว่า เหนื่อย!

RSS คิดว่าทุกคนรู้จักแน่นอน คือการให้บริการ Feed Data ซึ่งผู้ใช้งาน สามารถเอาไปอ่านได้ในหลายๆที่ อาทิ เช่น..

1. อ่านผ่าน Browser ที่ Support Rss
2. อ่านผ่านผู้ให้บริการต่างๆ เช่น friendfeed.com
3. อ่านโดยเขียน Javascript
4. อ่านโดยเขียน Server Side Script

แต่ที่จะมาแนะนำวันนี้คือการเขียน XML ใน Format Rss ซึ่งจริงๆ แล้วมันก็เป็น XML Format นึงเท่านั้น ซึ่ง ที่ Browser ส่วนใหญ่อ่านได้ จะเป็น มาตรฐาน Rss และ Atom

โดยการเขียน XML เราก็สามารถเขียนได้อีกหลายๆ วิธีเหมือนกัน
1. เขียนโดยใช้ tag โต้งๆ เลย (ข้ามไปๆ)
2. เขียนโดย interface ผ่าน class ต่างๆ เช่น PHP-XML
3. เขียนโดยใช้ Function ที่มีใน PHP อาทิเช่น
- SimpleXMLElement
- DOMDocument
- XMLWriter

และที่จะมา ทำตัวอย่างให้ดูวันนี้ก็คือ XMLWriter ด้วยสาเหตุ ที่ไม่ค่อยมีคนพูดถึง ตัวนี้นัก

ผมจะลองเขียน Rss ขึ้นมาโดยใช้ Entry นึงใน jQueryTips.com มาเป็นตัวอย่างละกัน

  1. <?php
  2. header(‘Content-Type: text/xml; charset=utf-8′);
  3. $xw = new XMLWriter();
  4. $xw->openMemory();
  5. //$xw->openUri(‘data.xml’);
  6. $xw->startDocument(‘1.0′, ‘UTF-8′);
  7. $xw->startElement(‘rss’);
  8. $xw->writeAttribute(‘version’, ‘2.0′);
  9. $xw->writeAttribute(‘xmlns:content’, ‘http://purl.org/rss/1.0/modules/content/’);
  10. $xw->writeAttribute(‘xmlns:wfw’, ‘http://wellformedweb.org/CommentAPI/’);
  11. $xw->writeAttribute(‘xmlns:dc’, ‘http://purl.org/dc/elements/1.1/’);
  12. $xw->writeAttribute(‘xmlns:atom’, ‘http://www.w3.org/2005/Atom’);
  13. $xw->writeAttribute(‘xmlns:sy’, ‘http://purl.org/rss/1.0/modules/syndication/’);
  14.  
  15. $xw->startElement(‘channel’);
  16. $xw->writeElement(‘title’, ‘jQueryTips by Tee++;’);
  17. $xw->startElement(‘atom:link’);
  18. $xw->writeAttribute(‘href’, ‘http://www.jquerytips.com/feed/’);
  19. $xw->writeAttribute(‘rel’, ’self’);
  20. $xw->writeAttribute(‘type’, ‘application/rss+xml’);
  21. $xw->endElement(); // end atom
  22. $xw->writeElement(‘link’, ‘http://www.jquerytips.com’);
  23. $xw->writeElement(‘description’, ‘Javascript is just bananas.’);
  24. $xw->writeElement(‘pubDate’, ‘Mon, 06 Apr 2009 08:56:33 +0000′);
  25. $xw->writeElement(‘generator’, ‘http://wordpress.org/?v=2.7.1′);
  26. $xw->writeElement(‘language’, ‘en’);
  27. $xw->writeElement(’sy:updatePeriod’, ‘hourly’);
  28. $xw->writeElement(’sy:updateFrequency’, ‘1′);
  29.  
  30. /*—————— Start Loop ——————*/
  31.         $xw->startElement(‘item’);
  32.  
  33.         $xw->writeElement(‘title’, ‘มาทำ Akuma ปล่อย Hadouken กัน (ขำๆ)’);
  34.         $xw->writeElement(‘link’, ‘http://www.jquerytips.com/2009/04/06/jquery-akuma-hadouken/’);
  35.         $xw->writeElement(‘comments’, ‘http://www.jquerytips.com/2009/04/06/jquery-akuma-hadouken/#comments’);
  36.         $xw->writeelement(‘pubData’, ‘Mon, 06 Apr 2009 08:56:33 +0000′);
  37.         $xw->writeElement(‘dc:Creator’, ‘Tee++;’);
  38.         /*—————— Start Loop Categories ——————*/
  39.                 $xw->startElement(‘category’);
  40.                 $xw->writeCData(‘Name of category’);
  41.                 $xw->endElement(); // end category
  42.         /*——————- End Loop Categories ——————-*/
  43.         $xw->startElement(‘guid’);
  44.         $xw->writeAttribute(‘isPermalink’, ‘false’);
  45.         $xw->text(‘http://www.jquerytips.com/?p=369′);
  46.         $xw->endElement(); // end guid
  47.  
  48.         $xw->startElement(‘description’);
  49.         $xw->writeCData(‘<p>Long Description should be here.</p>’);
  50.         $xw->endElement(); // end description
  51.  
  52.         $xw->startElement(‘content:encoded’);
  53.         $xw->writeCData(‘<p>Long Description should be here.</p>’);
  54.         $xw->endElement(); // end content:encoded
  55.  
  56.         $xw->writeElement(‘wfw:commentRss’, ‘http://www.jquerytips.com/2009/04/06/jquery-akuma-hadouken/feed/’);
  57.  
  58.         $xw->endElement(); // end item
  59. /*——————- End Loop ——————-*/
  60.  
  61. $xw->endElement(); // end channel
  62. $xw->endElement(); // end rss
  63.  
  64.  
  65. $xml = $xw->outputMemory(true);
  66. $xw->flush(true);
  67. echo $xml;
  68. ?>

ซึ่งจากโคดด้านบนเป็น XML ใน Format Rss 2.0 ครับ โดยที่ผมไม่อยากจะไปนั่งอธิบาย ว่า โคดแต่ละชุดทำงานยังไง เพราะว่า PHP Manual มีบอกหมด (มีตัวอย่างด้วย)

ความสามารถของ XMLWriter สามารถกำหนดได้ ว่า จะ save xml ไว้ที่ file หรือว่า จะให้ render output ออกมา เลย

และส่วนตรงที่ผมเขียนว่า Start Loop – End Loop นั่น จริงๆ แล้วมันควรจะเป็น loop ของ Entries ที่เรามี มาวน

ถ้าโคดไม่มีอะไรผิดพลาดก็จะได้หน้าตาออกมาแบบนี้ครับ
rss

*** จากภาพด้านบนผมใช้ IE6 Render ออกมาครับ เพราะว่า ถ้าใช้ IE7, Firefox, Safari, etc. มันจะ อ่านออกมาไม่เป็นโคด แต่ว่า อ่านออกเป็นภาษามนุษย์ แทนจะทำให้ไม่เห็นภาพกัน ยังไงลองเล่นกันดูนะครับ สำหรับ XMLWriter เจ๋งดี WriteCData ได้ด้วย อิอิ

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

3 Comments »

 
  • PdNB says:

    บทความดีมีประโยชน์มากครับ
    การทำ rss ก็ไม่ยากอีกต่อไป

  • EThaiZone says:

    เอิ้ก~ ผมเขียนสดเองทุกครั้งเลย เพราะ rss ที่เคยเขียนอย่างมากก็ title link description pubdata = =a

  • perng says:

    แล้วอยากให้แสดงรูปด้วยนี่ทำยังไงครับ ลองมานานทำไม่ได้สักที

 

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>