แสดงข่าวจาก Thaisarn.com ด้วย ASP.net(VB)


อัปเดท : 19 มีนาคม พ.ศ.2546 , แสดง : 49,776 , ความคิดเห็น : 3

ไทยสาร.คอม (ThaiSarn.com:ข่าวสารเพื่อคนไทย)คือศูนย์กลางแลกเปลี่ยนข่าวสารประเทศไทยที่ให้บริการแลกเปลี่ยนข่าวสารในรูปแบบอิเล็กทรอนิกส์บนเครือข่ายอินเทอร์เน็ตจากแหล่งข่าวต่างๆทั้งจากภาครัฐและภาคเอกชนของไท ในรูปแบบอัตโนมัติ โดยใช้เทคโนโลยีสารสนเทศในรูปแบบใหม่ที่เรียกว่า "Extensible Markup Language หรือ XML" เข้ามาประยุกต์เพื่อเป็นการปฏิวัติการเผยแพร่ข่าวสารบนเว็บไซต์ในประเทศไทยและเป็นทางเลือกใหม่ให้แก่ประชาชนไทยสามารถได้รับทราบข่าวสาร ได้อย่างมีประสิทธิภาพ คัดลอกจาก Thaisarn.com

สำหรับบทความนี้จะนำเสนอเกี่ยวกับวิธีการดึงข่าวจาก Thaisarn.com ที่เป็นเอกสาร XML มาแสดงผลในเวบไซต์ของเราโดยใช้ ASP.net(VB) ดังตัวอย่างในหน้าแรก ซึ่ง ThaiSarn.com เองจะมีข่าวที่ส่งมาจากแหล่งข่าวต่าง ๆที่มีอยู่ ทำให้ ThaiSarn.com มีข่าวที่หลายหมวดหมู่ และข่าวเหล่านั้นจะ [update] โดยอัตโนมัติทั้งใน ThaiSarn.com และ เวบไซต์ที่ดึงข่าวมา ดังนั้นเราจึงได้ข่าวมาโดยที่ไม่ต้องเพิ่มข่าวเอง เพียงแค่เขียน Code ขึ้นมาเพื่อดึงเท่านั้น ฟังดูแล้วน่าสนใจใช่มั้ยครับเริ่มกันเลยดีกว่า

ก่อนอื่นต้องทำความเข้าใจกันก่อนว่า Thaisarn.com จัดเตรียมอะไรไว้ให้บ้าง

Thaisarn.com ได้จัดเตรียม Query ข่าวให้ที่ URL : http://www.thaisarn.com/services/distributor/xml_distributor.php โดยเราจะส่ง Parameter หรือตัวแปรในการ Query ผ่าน URL นี้ สำหรับค่า Parameter มีดังนี้

  
 

fdate=dd/mm/yyyy เป็นตัวแปรกำหนดการดึงข่าวของวันนั้น ๆ (วันที่ dd เดือน mm ปีค.ศ. yyyy)
fdate=dd/mm/yyyy&tdate=DD/MM/YYYY เป็นตัวแปรกำหนดการดึงข่าวของทั้งหมดจากวันที่ dd เดือน mm ปีค.ศ. yyyy ถึงวันที่ DD เดือน MM ปีค.ศ. YYYY
nlatest=K เลือกข่าวล่าสุด K ข่าว (ที่ link ตัวอย่างให้ข่าวล่าสุด 7 ข่าว)
category=CAT ให้ข่าวประเภท CAT เท่านั้น สามารถเลือกข่าวหลายประเภทได้โดยกั้นแต่ละประเภทด้วย "," เช่น category=รัฐบาล,บันเทิง ให้ข่าวรัฐบาล และข่าวบันเทิง [หมวดข่าวทั้งหมด]
source=SRC ให้ข่าวจากแหล่งข่าว SRC เท่านั้น สามารถเลือกข่าวจากหลายแหล่งข่าวได้โดยกั้นแต่ละแหล่งด้วย "," เช่น source=ไทยรัฐ,ผู้จัดการ [แหล่งข่าวทั้งหมด]
keyword=KWD ให้ข่าวที่มีหัวข้อข่าวหรือ คำสำคัญในข่าวมีคำว่า "KWD" สามารถกำหนดคำสำคัญมากกว่าหนึ่งคำได้โดยแยกแต่ละคำด้วย "," เช่น keyword=CPU,intel

ถ้ามีการส่ง Parameter หลายๆตัว แต่ละตัวจะต้องกั้นด้วย & เช่น "xml_distributor.php?source=ไทยรัฐ&nlatest=7&category=เทคโนโลยี" หลังจากตั้งค่า Parameter ต่าง ๆเรียบร้อยแล้วก็ต้องมาลองดูก่อนว่าถูกต้องหรือไม่ โดยใช้ Internet Explorer ช่วย โดยพิมพ์ URL http://www.thaisarn.com/services/distributor/xml_distributor.php? แล้วตามด้วย Pameter ต่างๆ ถ้าถูกต้องก็จะได้ผลดังรูปตัวอย่าง

คุณสามารถอ่านรายละเอียดทั้งหมดได้ที่ http://www.thaisarn.com/

ต่อไปก็เป็นส่วนของ Code จริงๆ ซึ่งมีอยู่ด้วยกัน 2 ส่วน คือ

1. XML Schema (XslTransform) : เป็นส่วนที่กำหนดโครงสร้าง XML ที่จะแสดงผล

NewStyle.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="newspage">
            <xsl:apply-templates [select]="news" />
    </xsl:template>

    <xsl:template match="news">
        <table width="470" border="0" cellpadding="1" cellspacing="1"><tr>
        <td><img src="images/DotMnu.gif" width="9" height="9" hspace="2"/>
            <a target="_blank">
                    <xsl:attribute name="href" >
                    <xsl:value-of [select]='link'/>
                    <xsl:value-of [select]='source'/>
                </xsl:attribute>
                <xsl:value-of [select]='title'/>
            </a>
        [<xsl:value-of [select]='pubdate'/>]
        </td></tr></table>
    </xsl:template>
</xsl:stylesheet>


2. XML Control : เป็นส่วนที่แสดงผลจริง

NewXml.aspx

<%@ Page Language="VB" autoeventwireup="True" Debug="true" %>
<%@ import Namespace="[sys]tem.Xml" %>
<%@ import Namespace="[sys]tem.Xml.Xsl" %>

<script runat="server">
    Sub Page_Load(sender As Object, e As EventArgs)
        Dim doc As XmlDocument = New XmlDocument()
        Dim XmlURL = "http://www.thaisarn.com/services/distributor/xml_distributor.php?category=%E0%B7%A4%E2%B9%E2%C5%C2%D5&nlatest=100&source=%bc%d9%E9%a8%d1%b4%a1%d2%c3,%a1%c3%d8%a7%e0%b7%be%b8%D8%c3%a1%d4%a8"
        doc.Load(XmlURL)

        Dim trans As XslTransform = new XslTransform()
        trans.Load(Server.MapPath("NewsStyle.xsl"))

        xml1.Document = doc
        xml1.Transform = trans
    End Sub
</script>


<html>
<head>
<title>www.NextProject.Net [News]</title>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620" />
</head>
<body >
    <form runat="server"><asp:Xml id="xml1" runat="server"></asp:Xml></form>
</body>
</html>


สำหรับการใช้งานจริงอาจมีจะมีความยุ่งยากอย่างหนึ่งคือ ในการส่ง Parameter ที่เป็นภาษาไทย ซึ่งในตอนเรียกผ่าน Internet Explorer จะแสดงผลถูกต้อง แต่ตอนเรียกผ่าน ASP.net จะทำไม่ได้ (ผมเองยังไม่ทราบว่าความผิดพลาดเกิดจากอะไร เข้าใจว่าคงเกี่ยวกับ Code Page) การแก้ไขก็ก็คือต้องส่งค่า Parameter ที่เป็น Code Page จริงๆ กล่าวคือเราต้องเข้ารหัส Code Page เช่น

   "เทคโนโลยี" จะต้องเปลี่ยนเป็น "%E0%B7%A4%E2%B9%E2%C5%C2%D5"
   "ผู้จัดการ" จะต้องเปลี่ยนเป็น "%bc%d9%E9%a8%d1%b4%a1%d2%c3"
   "กรุงเทพธุรกิจ" จะต้องเปลี่ยนเป็น "%a1%c3%d8%a7%e0%b7%be%b8%D8%c3%a1%d4%a8"
อักขระ อื่นๆ เช่น "?" "," และ "&" ยังใช้เหมือนเดิม

วิธีการเข้ารหัส Code Page หารายละเอียดได้จาก http://www.batutis.com/i18n/papers/lmbcs/group0B.html นะครับ สำหรับบทความนี้ก็ขอจบแค่นี้ล่ะครับ


ผู้เขียน/อ้างอิง : จักรกฤษณ์ แร่ทอง

ซอร์สโค๊ด/โอเพนซอร์ส

ความคิดเห็น/แนะนำ/ติชม/อื่นๆ

  • benz [18 ม.ค. 2549 , 08:50 PM]

    น่าสนใจ

  • สุนิสา [23 ส.ค. 2549 , 07:25 PM]

    ดิฉันเป้นนักศึกษา กำลังทำโปรเจคเกี่ยวกับ webservice โดย asp.net (vb) ดิฉันดิดปัญหาเกี่ยวกับ code อยากจะได้โค้ดเกี่ยวกับการส่งข้อมูลจาก pda phone โดยข้อมูลนั้นเป็น text ไปยัง Server โดย gprs ผ่านตัว webservice จึงใคร่ขอความกรุณาช่วยบอกที่และอย่างได้ข้อมูลเพิ่มเติมว่า การส่งข้อมูลจาก pda phone ไปยัง server โดยใช้ ส่งแบบ gprs ผ่าน webservice สามารถทำได้จริงหรือไม่ และมีขั้นตอนอย่างไร ช่วยบอกด้วย และอยากได้คำตอบอย่างด่วน!!!!!!!!!!!!! ขอบคุณค่ะ ขอขอบพระคุณเป็นอย่างสูง / สุนิสา

  • ฟ้าใส [07 ก.ย. 2551 , 09:13 PM]

    ทำได้ เพียงมี ip ของ Sever เพื่อทำการเชื่อมต่อไปยัง Sever เชื่อมต่อเสร็จแล้วโอนถ่ายข้อมูลจาก pda ไปยัง sever หรือดึงข้อมูลจาก sever ได้เลย