ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 721|ตอบกลับ: 1

[VB.NET] การเช็คราคาน้ำมันประจำวัน ด้วยบริการเว็บเซอร์วิสของ ปตท.

[คัดลอกลิงก์]

257

กระทู้

399

โพสต์

3474

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
3474



เนื่องจากแอดมินกำลังรับงานโปรเจคที่เกี่ยวกับปั๊มน้ำมันอยู่ ก็เลยต้องมาหาการอ่านค่าราคาน้ำมันในแต่ละวัน เพื่อที่ผู้ใช้ไม่ต้องมากรอกเอาเอง แอดมินขออธิบายหลักการให้เข้าใจกันง่ายๆ พอเราเรียกใช้ บริการ Web Services ของทาง ปตท. ด้วยการส่งข้อมูลวันที่ออกไป (สามารถเช็คราคาในแต่ละจังหวัดได้ แต่แอดมินขออ้างอิงราคาของทางกรุงเทพฯก่อน) จากนั้นมันจะคืนค่ากลับมาในรูปแบบ XML (eXtensible Markup Language) เราต้องมาทำการแยกแยะข้อมูล (Parser) ออกมาแสดงผลในตารางกริด ... อนึ่ง โค้ดชุดนี้แอดมินเลือกใช้งานด้วยการ Add Service References ซึ่งจะใช้งานได้ง่ายกว่าการใช้ SOAP (Simple Object Access Protocol)

การเชื่อมโยงราคาน้ำมันของทาง ปตท.

การ Add Service References ...


https://www.pttor.com/OilPrice.asmx?wsdl




มาดูโค้ดฉบับเต็มกันเถอะ ...
  1. Public Class frmOilPricePTT

  2.     Private Sub frmOilPricePTT_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  3.         Call SetupGridView(dgvData)
  4.         dtpDatePrice.Value = Now()
  5.     End Sub

  6.     Private Sub btnGetData_Click(sender As System.Object, e As System.EventArgs) Handles btnGetData.Click
  7.         Dim SoapClient As New OilPricePTT.OilPriceSoapClient
  8.         Dim MyDate As DateTime = GetDate(dtpDatePrice.Text)
  9.         '// Thailand, วันที่, เดือน, ปี
  10.         RichTextBox1.Text = SoapClient.GetOilPrice( _
  11.             "TH", _
  12.             Microsoft.VisualBasic.Left(MyDate, 2), _
  13.             Microsoft.VisualBasic.Mid(MyDate, 4, 2), _
  14.             Microsoft.VisualBasic.Right(MyDate, 4))
  15.         '// Binding Data Source to DataGridView
  16.         dgvData.DataSource = ParserXML(RichTextBox1.Text)
  17.     End Sub

  18.     Function GetDate(ByVal d As DateTime) As String
  19.         Return d.ToString("dd/MM/yyyy", New System.Globalization.CultureInfo("en-US"))
  20.     End Function

  21.     Function ParserXML(ByVal xmlDoc As String) As DataTable
  22.         Dim dt As New Data.DataTable
  23.         ' / เพิ่มหลัก (Columns) หรือฟิลด์ จำนวน 3 หลัก
  24.         With dt
  25.             .Columns.Add("PriceDate", GetType(String))
  26.             .Columns.Add("Product", GetType(String))
  27.             .Columns.Add("Price", GetType(Double))
  28.         End With
  29.         '//
  30.         Dim doc As New XmlDocument()
  31.         '// โหลดเอกสาร XML
  32.         doc.LoadXml(xmlDoc)
  33.         '// จุดเริ่มต้นของ Node
  34.         Dim nodes As XmlNodeList = doc.DocumentElement.SelectNodes("/PTTOR_DS/FUEL")
  35.         Dim Price_Date As String = String.Empty, Product As String = "", Price As String = ""
  36.         For Each node As XmlNode In nodes
  37.             Price_Date = node.SelectSingleNode("PRICE_DATE").InnerText
  38.             Product = node.SelectSingleNode("PRODUCT").InnerText
  39.             '// ข้อมูลบางตัวอาจจะไม่มี Element ที่ชื่อ PRICE
  40.             If IsNothing(node.Item("PRICE")) Then
  41.                 Price = "0.00"
  42.             Else
  43.                 Price = Format(CDbl(node.SelectSingleNode("PRICE").InnerText), "0.00")
  44.             End If
  45.             Select Case Product
  46.                 '// กรองเอาเฉพาะประเภทที่ต้องการ
  47.                 Case "Gasoline 95", "Diesel B7", "Gasohol 91", "Gasohol E20", "NGV", "Gasohol 95", "Gasohol E85", "Premium Diesel B7", "Diesel", "Diesel B20"
  48.                     With dt
  49.                         .Rows.Add(Price_Date, Product, Price)
  50.                     End With
  51.             End Select
  52.         Next
  53.         '// Return DataTable
  54.         Return dt
  55.     End Function

  56.     Private Sub SetupGridView(ByRef DGV As DataGridView)
  57.         With DGV
  58.             .RowHeadersVisible = True
  59.             .AllowUserToAddRows = False
  60.             .AllowUserToDeleteRows = False
  61.             .AllowUserToResizeRows = False
  62.             .MultiSelect = False
  63.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  64.             .ReadOnly = True
  65.             '// Data rows
  66.             .Font = New Font("Tahoma", 10)
  67.             .RowTemplate.MinimumHeight = 27
  68.             .RowTemplate.Height = 27
  69.             '// Column Header
  70.             .ColumnHeadersHeight = 30
  71.             .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
  72.             '// Autosize Column
  73.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  74.             '// Even-Odd Color
  75.             .AlternatingRowsDefaultCellStyle.BackColor = Color.LightGreen
  76.             .DefaultCellStyle.SelectionForeColor = Color.White
  77.             '// Header
  78.             With .ColumnHeadersDefaultCellStyle
  79.                 .BackColor = Color.Navy
  80.                 .ForeColor = Color.White
  81.                 .Font = New Font(DGV.Font, FontStyle.Bold)
  82.             End With
  83.         End With
  84.     End Sub

  85.     Private Sub RichTextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles RichTextBox1.KeyPress
  86.         '// ล็อคการกดคีย์
  87.         e.Handled = True
  88.     End Sub
  89. End Class
คัดลอกไปที่คลิปบอร์ด

ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

257

กระทู้

399

โพสต์

3474

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
3474
 เจ้าของ| โพสต์ 2020-10-24 15:48:27 | ดูโพสต์ทั้งหมด

เพิ่มเติมกรณีที่ต้องการเช็คราคาในแต่ละจังหวัด แอดมินยกตัวอย่าง "เมืองขอนแก่น" ... โดยเริ่มต้นการอ่านจาก <FUEL_PROVINCIAL> ...
  1. <FUEL_PROVINCIAL>
  2.     <LOCATION>เมืองขอนแก่น</LOCATION>
  3.     <PRICE_DATE>10/16/2020 5:00:00 AM</PRICE_DATE>
  4.     <PRODUCT>Gasoline 95</PRODUCT>
  5.     <PRICE>29.4</PRICE>
  6.   </FUEL_PROVINCIAL>
คัดลอกไปที่คลิปบอร์ด

  1.     Private Sub btnGetData_Click(sender As System.Object, e As System.EventArgs) Handles btnGetData.Click
  2.         Dim SoapClient As New OilPricePTT.OilPriceSoapClient
  3.         Dim MyDate As DateTime = GetDate(dtpDatePrice.Text)

  4.         '// Thailand, วันที่, เดือน, ปี
  5.         'RichTextBox1.Text = SoapClient.GetOilPrice( _
  6.         '    "TH", _
  7.         '    Microsoft.VisualBasic.Left(MyDate, 2), _
  8.         '    Microsoft.VisualBasic.Mid(MyDate, 4, 2), _
  9.         '    Microsoft.VisualBasic.Right(MyDate, 4))
  10.         '// Binding Data Source to DataGridView

  11.         RichTextBox1.Text = SoapClient.GetOilPriceProvincial( _
  12.             "TH", _
  13.             Microsoft.VisualBasic.Left(MyDate, 2), _
  14.             Microsoft.VisualBasic.Mid(MyDate, 4, 2), _
  15.             Microsoft.VisualBasic.Right(MyDate, 4), _
  16.             "ขอนแก่น")
  17.         dgvData.DataSource = ParserXMLProvince(RichTextBox1.Text)
  18.         With dgvData.Columns(2)
  19.             .DefaultCellStyle.Format = "0.00"
  20.         End With
  21.     End Sub

  22.     Function ParserXMLProvince(ByVal xmlDoc As String) As DataTable
  23.         Dim dt As New Data.DataTable
  24.         ' / เพิ่มหลัก (Columns) หรือฟิลด์ จำนวน 3 หลัก
  25.         With dt
  26.             .Columns.Add("PriceDate", GetType(String))
  27.             .Columns.Add("Product", GetType(String))
  28.             .Columns.Add("Price", GetType(Double))
  29.         End With
  30.         '//
  31.         Dim doc As New XmlDocument()
  32.         '// โหลดเอกสาร XML
  33.         doc.LoadXml(xmlDoc)
  34.         '// จุดเริ่มต้นของ Node
  35.         Dim nodes As XmlNodeList = doc.GetElementsByTagName("FUEL_PROVINCIAL")
  36.         Dim Price_Date As String = String.Empty, Product As String = "", Price As String = ""
  37.         For Each node As XmlNode In nodes
  38.             If node("LOCATION").InnerText = "เมืองขอนแก่น" Then
  39.                 Price_Date = node("PRICE_DATE").InnerText
  40.                 Product = node("PRODUCT").InnerText
  41.                 '// ข้อมูลบางตัวอาจจะไม่มี Element ที่ชื่อ PRICE
  42.                 If IsNothing(node("PRICE")) Then
  43.                     Price = "0.00"
  44.                 Else
  45.                     Price = Format(CDbl(node("PRICE").InnerText), "0.00")
  46.                 End If
  47.                 Select Case Product
  48.                     '// กรองเอาเฉพาะประเภทที่ต้องการ
  49.                     Case "Gasoline 95", "Diesel B7", "Gasohol 91", "Gasohol E20", "NGV", "Gasohol 95", "Gasohol E85", "Premium Diesel B7", "Diesel", "Diesel B20"
  50.                         With dt
  51.                             .Rows.Add(Price_Date, Product, Price)
  52.                         End With
  53.                 End Select
  54.             End If
  55.         Next
  56.         '// Return DataTable
  57.         Return dt
  58.     End Function
คัดลอกไปที่คลิปบอร์ด

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2021-3-6 09:01 , Processed in 0.223310 second(s), 4 queries , File On.

Powered by Discuz! X3.3 R20170401, Rev.54

© 2001-2017 Comsenz Inc.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้