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

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

[VB.NET] รายงาน COVID-19 ประจำวัน ด้วยการติดต่อ API ของสำนักงานพัฒนารัฐบาลดิจิทัล

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

223

กระทู้

315

โพสต์

2601

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
2601




สำหรับโค้ดชุดนี้ก็ยังใช้ NewtonSoft เป็นหลักอยู่น่ะครับ แต่ต้องเลือก Net Framework เวอร์ชั่นที่สูงกว่า 4.0 แอดมินเลยใช้ VB2019 แทน VB2010 ... เป็นการดึงเอาข้อมูลหรือที่เรียกว่า API มาจาก สำนักงานพัฒนารัฐบาลดิจิทัล (องค์การมหาชน) (สพร.) ศูนย์กลางการให้บริการข้อมูลเปิดภาครัฐ (Open Government Data) พัฒนาขึ้นภายใต้แนวคิดการเป็นศูนย์กลางในการเข้าถึงข้อมูลเปิดภาครัฐของประเทศที่ให้ประชาชนสามารถเข้าถึงข้อมูลภาครัฐได้สะดวก รวดเร็ว ตลอดเวลา โดยข้อมูลที่เผยแพร่อยู่ในรูปแบบไฟล์ที่สามารถแสดงตัวอย่างข้อมูล (Preview) การแสดงข้อมูลด้วยภาพ (Visualization) และเอพีไอ (API) แบบอัตโนมัติให้กับชุดข้อมูลที่เผยแพร่ได้ รวมทั้งยังสามารถจัดการชุดข้อมูลและเมทาดาตาของข้อมูลได้อีกด้วย ...

แอดมินเลือกข้อมูลโควิด-19 มาใช้งาน โดยจะมีวิธีการอ่านค่าข้อมูลรูปแบบ JSON อยู่ 2 แบบน่ะครับ

อันดับแรกต้องเข้าไปสมัครสมาชิก เพื่อรับ TOKEN มาใช้งานก่อน ...

รายงาน COVID-19 ประจำวัน [covid-19-daily] ... เพื่อรับค่า API

มาดูโค้ดฉบับเต็มกันเถอะ ...
  1. Imports System.Net
  2. Imports System.IO
  3. Imports Newtonsoft.Json
  4. Imports Newtonsoft.Json.Linq

  5. '"' Sign Up ... https://opend.data.go.th/register_api/signup.php
  6. '"' Get API ... https://opend.data.go.th/search_virtuoso/after/index.jsp?language=th&dsname=vir_3277_1584880342

  7. Public Class frmCovid19Thai
  8.     Dim TOKEN As String = "YOUR TOKEN"
  9.     Private Sub frmCovid19Thai_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  10.         lblCount.Text = ""
  11.         Call Covid19Thailand()
  12.         'Call Covid19API()
  13.     End Sub

  14.     '// Deserialized JSON and return DataTable.
  15.     Public Function DeserializeDataTable(json As String) As DataTable
  16.         Dim dt As DataTable
  17.         dt = TryCast(JsonConvert.DeserializeObject(json, (GetType(DataTable))), DataTable)
  18.         Return dt
  19.     End Function

  20.     '// It's me.
  21.     Private Sub Covid19Thailand()
  22.         '// All data.
  23.         Dim url As String = "https://opend.data.go.th/opend-search/vir_3277_1584880342/query?dsname=vir_3277_1584880342&path=vir_3277_1584880342&loadAll=1&type=json&offset=0"
  24.         '// Filter "ขอนแก่น"
  25.         'Dim url = "https://opend.data.go.th/opend-search/vir_3277_1584880342/query?dsname=vir_3277_1584880342&path=vir_3277_1584880342&property=col_6&operator=S_EQUALS&valueLiteral=%E0%B8%82%E0%B8%AD%E0%B8%99%E0%B9%81%E0%B8%81%E0%B9%88%E0%B8%99&loadAll=1&type=json&limit=100&offset=0"
  26.         Dim request As HttpWebRequest
  27.         Dim response As HttpWebResponse = Nothing
  28.         Dim reader As StreamReader
  29.         Try
  30.             request = DirectCast(WebRequest.Create(url), HttpWebRequest)
  31.             request.Method = "GET"
  32.             request.Headers.Add("api-key", TOKEN)
  33.             response = DirectCast(request.GetResponse(), HttpWebResponse)
  34.             reader = New StreamReader(response.GetResponseStream())
  35.             Dim s As String
  36.             s = reader.ReadToEnd
  37.             '// {""numData"":""934"",""data"":[ --> Find first bracket [ from left side.
  38.             Dim FirstBracket As Integer = s.IndexOf("[")
  39.             '// ],""message"":""Success"",""status"":""200""} --> Find first bracket ] from right side.
  40.             Dim LastBracket As Integer = InStrRev(s, ("]"))
  41.             s = Mid(s, FirstBracket + 1, LastBracket - FirstBracket)
  42.             Dim dt As New DataTable
  43.             '// Deserialized
  44.             dt = DeserializeDataTable(s)
  45.             dgvData.DataSource = dt
  46.             Call SetupGridView()
  47.             lblCount.Text = "Total Records: " & dgvData.RowCount
  48.             dt.Dispose()
  49.             reader.Dispose()
  50.             response.Dispose()
  51.         Catch ex As Exception
  52.             MessageBox.Show(ex.Message)
  53.         End Try
  54.     End Sub

  55.     '// From some people.
  56.     Private Sub Covid19API()
  57.         Dim url As String = "https://opend.data.go.th/opend-search/vir_3277_1584880342/query?dsname=vir_3277_1584880342&path=vir_3277_1584880342&loadAll=1&type=json&offset=0"
  58.         Dim request As HttpWebRequest
  59.         Dim response As HttpWebResponse = Nothing
  60.         Dim reader As StreamReader
  61.         Try
  62.             request = DirectCast(WebRequest.Create(url), HttpWebRequest)
  63.             request.Method = "GET"
  64.             request.Headers.Add("api-key", TOKEN)
  65.             response = DirectCast(request.GetResponse(), HttpWebResponse)
  66.             reader = New StreamReader(response.GetResponseStream())
  67.             Dim s As String
  68.             s = reader.ReadToEnd
  69.             Dim obj As JObject = JsonConvert.DeserializeObject(s)
  70.             Dim ln As JToken = obj("data")
  71.             Dim Corona As dataCovid = JsonConvert.DeserializeObject(Of dataCovid)(s)
  72.             If (ln.GetType() Is GetType(Newtonsoft.Json.Linq.JArray)) Then
  73.                 Corona.dataArray = JsonConvert.DeserializeObject(Of List(Of dataJson))(JsonConvert.SerializeObject(ln))
  74.             End If
  75.             '//
  76.             'If (ln.GetType() Is GetType(Newtonsoft.Json.Linq.JObject)) Then
  77.             'Corona.dataArray = New List(Of dataJson)
  78.             'Corona.dataArray.Add(JsonConvert.DeserializeObject(Of dataJson)(JsonConvert.SerializeObject(ln)))
  79.             'End If
  80.             '//
  81.             Dim dt As New DataTable
  82.             dt.Columns.Add("no", GetType(Integer))
  83.             dt.Columns.Add("age")
  84.             dt.Columns.Add("sex")
  85.             dt.Columns.Add("nation")
  86.             dt.Columns.Add("occ_new")
  87.             dt.Columns.Add("Province")
  88.             dt.Columns.Add("Risk")
  89.             dt.Columns.Add("AnnounceDate", GetType(String))
  90.             For Each covid As dataJson In Corona.dataArray
  91.                 If covid IsNot Nothing Then
  92.                     Dim dr As DataRow = dt.NewRow()
  93.                     dr(0) = covid.no
  94.                     dr(1) = covid.age
  95.                     dr(2) = covid.sex
  96.                     dr(3) = covid.nation
  97.                     dr(4) = covid.occ_new
  98.                     dr(5) = covid.Province
  99.                     dr(6) = covid.Risk
  100.                     dr(7) = covid.AnnounceDate
  101.                     '// Add row.
  102.                     dt.Rows.Add(dr)
  103.                 End If
  104.             Next
  105.             dgvData.DataSource = dt
  106.             Call SetupGridView()
  107.             lblCount.Text = "Total Records: " & dgvData.RowCount
  108.             dt.Dispose()
  109.             reader.Dispose()
  110.             response.Dispose()
  111.         Catch ex As Exception
  112.             MessageBox.Show(ex.Message)
  113.         End Try
  114.     End Sub

  115.     Private Sub SetupGridView()
  116.         With dgvData
  117.             .RowHeadersVisible = False
  118.             .AllowUserToAddRows = False
  119.             .AllowUserToDeleteRows = False
  120.             .AllowUserToResizeRows = False
  121.             .MultiSelect = False
  122.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  123.             .ReadOnly = True
  124.             '// Data rows
  125.             .Font = New Font("Tahoma", 10)
  126.             .RowTemplate.MinimumHeight = 27
  127.             .RowTemplate.Height = 27
  128.             '// Column Header
  129.             .ColumnHeadersHeight = 30
  130.             .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
  131.             '// Autosize Column
  132.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  133.             '// Even-Odd Color
  134.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue ' Color.LightGreen
  135.             '// Header
  136.             With .ColumnHeadersDefaultCellStyle
  137.                 .BackColor = Color.Navy
  138.                 .ForeColor = Color.White
  139.                 .Font = New Font(dgvData.Font, FontStyle.Bold)
  140.             End With
  141.             '// Hidden
  142.             .Columns(0).Visible = False
  143.         End With
  144.         '//
  145.         'For i = 0 To dgvData.RowCount - 1
  146.         'If Mid(dgvData.Rows(i).Cells(2).Value.ToString, 1, 10) <> "2020-02-29" Then
  147.         'dgvData.Rows(i).Cells(2).Value = Format(CDate(Mid(dgvData.Rows(i).Cells(2).Value.ToString, 1, 10)), "dd/MM/yyyy")
  148.         'Else
  149.         'dgvData.Rows(i).Cells(2).Value = "29/02/2020"
  150.         'End If
  151.         'Next
  152.     End Sub

  153.     Private Sub frmCovid19Thai_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  154.         Me.Dispose()
  155.         GC.SuppressFinalize(Me)
  156.         Application.Exit()
  157.     End Sub

  158.     Private Sub BtnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
  159.         Call Covid19Thailand()
  160.         'Call Covid19API()
  161.     End Sub
  162. End Class

  163. Public Class dataCovid
  164.     Public Property dataArray As List(Of dataJson)
  165. End Class

  166. Public Class dataJson
  167.     Public Property no As Integer
  168.     Public Property age As String
  169.     Public Property sex As String
  170.     Public Property nation As String
  171.     Public Property occ_new As String
  172.     Public Property Province As String
  173.     Public Property Risk As String
  174.     Public Property AnnounceDate As String
  175. End Class
คัดลอกไปที่คลิปบอร์ด


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


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

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

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

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

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

GMT+7, 2020-4-8 15:24 , Processed in 0.331792 second(s), 4 queries , File On.

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

© 2001-2017 Comsenz Inc.

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