ใช้ CURL ในการแสดงผล XML
Friday, January 23rd, 2009เมื่อวานก็เพิ่งโพสไปสำหรับการดึงข้อมูลแบบ JSON มาแสดง โดยอาศัยคำสั่ง curl ซึ่งใช้งานสะดวกและสั้นกว่าการใช้งานพวก fopen มาก มาวันนี้ก็เลยคิดว่าหากดึงเอา XML มาแสดงผลโดยใช้ curl หล่ะ มันก็คงไม่ได้ยากอะไรมากมายแน่นอน
ขออ้างไปยังข้อมูลที่เกี่ยวกับ XML ซะก่อนซึ่งเอามาจาก wikipedia โดยได้พูดถึง XML ไว้ดังนี้
เอกซ์เอ็มแอล (อังกฤษ: XML) ย่อมาจาก Extensible Markup Language ซึ่งเป็นภาษามาร์กอัปสำหรับการใช้งานทั่วไป พัฒนาโดยW3C โดยมีจุดประสงค์เพื่อเป็น สิ่งที่เอาไว้ติดต่อกันในระบบที่มีความแตกต่างกัน (เช่นใช้คอมพิวเตอร์มี่มีระบบปฏิบัติการคนละตัว หรืออาจจะเป็นคนละโปรแกรมประยุกต์ที่มีความต้องการสื่อสารข้อมูลถึงกัน) นอกจากนี้ยังเพื่อเป็นพื้นฐานในการสร้างภาษามาร์กอัปเฉพาะทางอีกขั้นหนึ่ง XML พัฒนามาจาก SGML โดยดัดแปลงให้มีความซับซ้อนลดน้อยลง XML ใช้ในแลกเปลี่ยนข้อมูลระหว่างเครื่องคอมพิวเตอร์ที่แตกต่างกัน และเน้นการแลกเปลี่ยนข้อมูลผ่านอินเทอร์เน็ต
XML ยังเป็นภาษาพื้นฐานให้กับภาษาอื่นๆ อีกด้วย (ยกตัวอย่างเช่น Geography Markup Language (GML) , RDF/XML, RSS, MathML, Physical Markup Language (PML) , XHTML, SVG, MusicXML และ cXML) ซึ่งอนุญาตให้โปรแกรมแก้ไขและทำงานกับเอกสารโดยไม่จำเป็นต้องมีความรู้ในภาษานั้นมาก่อน
ซึ่งผมจะลองดึง XML จาก feed ใน Blog ของผมเองนะครับ ซึ่งลิงก์ของ Feed ผมก็คือ http://www.myblog.in.th/feed/ ลองคลิกดูได้นะครับ
เมื่อผมลองเปิด URL นั้นใน IE ก็จะแสดงผลดังรูปนี้นะครับ

แล้วเมื่อลองดูโค๊ดของ Feed ที่ได้โดยการ view source ก็จะได้โค๊ดแบบนี้
<?xml version=”1.0″ encoding=”UTF-8″?>
<!– generator=”wordpress/2.3.1″ –>
<rss version=”2.0″
xmlns:content=”http://purl.org/rss/1.0/modules/content/”
xmlns:wfw=”http://wellformedweb.org/CommentAPI/”
xmlns:dc=”http://purl.org/dc/elements/1.1/”
>
<channel>
<title>U call me MAX</title>
<link>http://www.myblog.in.th</link>
<description>เขาเรียกผมว่า เว็บมาสเตอร์</description>
<pubDate>Thu, 22 Jan 2009 16:43:24 +0000</pubDate>
<generator>http://wordpress.org/?v=2.3.1</generator>
<language>en</language>
<item>
<title>JSON เคยใช้กันบ้างไหม ?</title>
<link>http://www.myblog.in.th/2009/01/22/json/</link>
<comments>http://www.myblog.in.th/2009/01/22/json/#comments</comments>
<pubDate>Thu, 22 Jan 2009 16:36:05 +0000</pubDate>
<dc:creator>admin</dc:creator>
<category><![CDATA[PHP]]></category>
<category><![CDATA[ความรู้]]></category>
<category><![CDATA[json]]></category>
<category><![CDATA[xml]]></category>
<guid isPermaLink=”false”>http://www.myblog.in.th/2009/01/22/json/</guid>
<description><![CDATA[สำหรับการส่งข้อมูลในการใช้งานไม่ว่าจะเป็นพวก Web Service ต่างๆพวกเราอาจจะคุ้นกับ XML ซะเป็นส่วนมาก แต่ในบางครั้งนักพัฒนาก็ต้องเจอข้อจำกัดของตัว XML เองบางครั้งก็เลยทำให้นักพัฒนาต้องหาการใช้งานดาต้าในรูปแบบอื่นๆเพื่อนำมาใช้งานกัน
ซึ่ง JSON หรือ JavaScript Object Notation เป็นข้อมูลสำหรับแลกเปลี่ยนที่เล็ก ง่ายสำหรับการ อ่าน และ เขียน ซึ่งจะว่าไปแล้ว JSON ก็คล้ายกับ XML ก็คือเป็นข้อมูลแบบเป็นไฟล์ text ธรรมดาๆ ที่มี Format ที่เป็นมาตรฐานและโครงสร้างของไฟล์ที่ตายตัว
JSON มี 2 รูปแบบคือ
1. แบบ Key pair value
2. แบบ list
ในรูปเป็นตัวอย่างโครงสร้างของข้อมูลในแบบ object และในแบบ array
ที่มาพูดถึง JSON ก็เพราะว่าคุยกะ 9AUM แห่ง Scriptdd.com แล้ว ได้ไฟล์ Plugin Wordpress ที่ดึงเอารูปจากเว็บ PG.in.th มาแสดง ไอ้ผมก็เลยไปลองดึงข้อมูลจากทางเว็บ PG […]]]></description>
อะไรประมาณนี้นะครับ ซึ่งเป็นมาตรฐานของ XML เอาล่ะมาเขียนโค๊ดเพื่อดึงเอา XML นี้เพื่อไปแสดงที่อื่น หรือเว็บอื่นๆของผม หรือใครที่อยากจะดึงเอา Feed ของผมไปแปะในเว็บก็ไม่ว่ากัน
เขียนโค๊ดโดยใช้ความสามารถของ curl ครับ ดังนี้
<?php
$ch = curl_init(”http://www.myblog.in.th/feed/“); //URL จาก feed ในเว็บผมครับ
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
$doc = new SimpleXmlElement($data, LIBXML_NOCDATA);
if(isset($doc->channel))
{
parseRSS($doc);
}
function parseRSS($xml)
{
//echo “<strong>”.$xml->channel->title.”</strong>”; //ไม่อยากให้โชว์ไตเติ้ลครับ
$cnt = count($xml->channel->item);
for($i=0; $i<$cnt; $i++)
{
$url = $xml->channel->item[$i]->link;
$title = $xml->channel->item[$i]->title;
$desc = $xml->channel->item[$i]->description;
echo ‘<a href=”‘.$url.’”>’.$title.’</a>’.$desc.’<br /><br />’; //แสดงผลรายการแต่ละอัน
}
}
?>
จากนั้นลองดูผลที่ได้ในการเขียนโค๊ดนี้ ก็ได้ผลดังนี้

จากนั้นผมลองเปลี่ยนไปดึงเอา RSS ของอีกที่หนึ่งมาจากเว็บ motogp.com โดยมี URL คือ http://www.motogp.com/en/news/rss และเมื่อลอง Refresh ก็แสดงผลดังนี้ครับ

อาจจะเป็นอีกไอเดียในการดึง XML มาแสดงผล โดยไม่ได้ใช้คำสั่ง fopen นะครับ



















