| 
 | 
 
  
 
 
สำหรับโค้ดชุดนี้ก็ยังใช้ NewtonSoft เป็นหลักอยู่น่ะครับ แต่ต้องเลือก Net Framework เวอร์ชั่นที่สูงกว่า 4.0 แอดมินเลยใช้ VB2019 แทน VB2010 ... เป็นการดึงเอาข้อมูลหรือที่เรียกว่า API มาจาก สำนักงานพัฒนารัฐบาลดิจิทัล (องค์การมหาชน) (สพร.) ศูนย์กลางการให้บริการข้อมูลเปิดภาครัฐ (Open Government Data) พัฒนาขึ้นภายใต้แนวคิดการเป็นศูนย์กลางในการเข้าถึงข้อมูลเปิดภาครัฐของประเทศที่ให้ประชาชนสามารถเข้าถึงข้อมูลภาครัฐได้สะดวก รวดเร็ว ตลอดเวลา โดยข้อมูลที่เผยแพร่อยู่ในรูปแบบไฟล์ที่สามารถแสดงตัวอย่างข้อมูล (Preview) การแสดงข้อมูลด้วยภาพ (Visualization) และเอพีไอ (API) แบบอัตโนมัติให้กับชุดข้อมูลที่เผยแพร่ได้ รวมทั้งยังสามารถจัดการชุดข้อมูลและเมทาดาตาของข้อมูลได้อีกด้วย ... 
 
แอดมินเลือกข้อมูลโควิด-19 มาใช้งาน โดยจะมีวิธีการอ่านค่าข้อมูลรูปแบบ JSON อยู่ 2 แบบน่ะครับ  
 
อันดับแรกต้องเข้าไปสมัครสมาชิก เพื่อรับ TOKEN มาใช้งานก่อน ...  
 
รายงาน COVID-19 ประจำวัน [covid-19-daily] ... เพื่อรับค่า API  
 
มาดูโค้ดฉบับเต็มกันเถอะ ...  
- Imports System.Net
 
 - Imports System.IO
 
 - Imports Newtonsoft.Json
 
 - Imports Newtonsoft.Json.Linq
 
  
- '"' Sign Up ... https://opend.data.go.th/register_api/signup.php
 
 - '"' Get API ... https://opend.data.go.th/search_virtuoso/after/index.jsp?language=th&dsname=vir_3277_1584880342
 
  
- Public Class frmCovid19Thai
 
 -     Dim TOKEN As String = "YOUR TOKEN"
 
 -     Private Sub frmCovid19Thai_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
 
 -         lblCount.Text = ""
 
 -         Call Covid19Thailand()
 
 -         'Call Covid19API()
 
 -     End Sub
 
  
-     '// Deserialized JSON and return DataTable.
 
 -     Public Function DeserializeDataTable(json As String) As DataTable
 
 -         Dim dt As DataTable
 
 -         dt = TryCast(JsonConvert.DeserializeObject(json, (GetType(DataTable))), DataTable)
 
 -         Return dt
 
 -     End Function
 
  
-     '// It's me.
 
 -     Private Sub Covid19Thailand()
 
 -         '// All data.
 
 -         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"
 
 -         '// Filter "ขอนแก่น"
 
 -         '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"
 
 -         Dim request As HttpWebRequest
 
 -         Dim response As HttpWebResponse = Nothing
 
 -         Dim reader As StreamReader
 
 -         Try
 
 -             request = DirectCast(WebRequest.Create(url), HttpWebRequest)
 
 -             request.Method = "GET"
 
 -             request.Headers.Add("api-key", TOKEN)
 
 -             response = DirectCast(request.GetResponse(), HttpWebResponse)
 
 -             reader = New StreamReader(response.GetResponseStream())
 
 -             Dim s As String
 
 -             s = reader.ReadToEnd
 
 -             '// {""numData"":""934"",""data"":[ --> Find first bracket [ from left side.
 
 -             Dim FirstBracket As Integer = s.IndexOf("[")
 
 -             '// ],""message"":""Success"",""status"":""200""} --> Find first bracket ] from right side.
 
 -             Dim LastBracket As Integer = InStrRev(s, ("]"))
 
 -             s = Mid(s, FirstBracket + 1, LastBracket - FirstBracket)
 
 -             Dim dt As New DataTable
 
 -             '// Deserialized
 
 -             dt = DeserializeDataTable(s)
 
 -             dgvData.DataSource = dt
 
 -             Call SetupGridView()
 
 -             lblCount.Text = "Total Records: " & dgvData.RowCount
 
 -             dt.Dispose()
 
 -             reader.Dispose()
 
 -             response.Dispose()
 
 -         Catch ex As Exception
 
 -             MessageBox.Show(ex.Message)
 
 -         End Try
 
 -     End Sub
 
  
-     '// From some people.
 
 -     Private Sub Covid19API()
 
 -         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"
 
 -         Dim request As HttpWebRequest
 
 -         Dim response As HttpWebResponse = Nothing
 
 -         Dim reader As StreamReader
 
 -         Try
 
 -             request = DirectCast(WebRequest.Create(url), HttpWebRequest)
 
 -             request.Method = "GET"
 
 -             request.Headers.Add("api-key", TOKEN)
 
 -             response = DirectCast(request.GetResponse(), HttpWebResponse)
 
 -             reader = New StreamReader(response.GetResponseStream())
 
 -             Dim s As String
 
 -             s = reader.ReadToEnd
 
 -             Dim obj As JObject = JsonConvert.DeserializeObject(s)
 
 -             Dim ln As JToken = obj("data")
 
 -             Dim Corona As dataCovid = JsonConvert.DeserializeObject(Of dataCovid)(s)
 
 -             If (ln.GetType() Is GetType(Newtonsoft.Json.Linq.JArray)) Then
 
 -                 Corona.dataArray = JsonConvert.DeserializeObject(Of List(Of dataJson))(JsonConvert.SerializeObject(ln))
 
 -             End If
 
 -             '//
 
 -             'If (ln.GetType() Is GetType(Newtonsoft.Json.Linq.JObject)) Then
 
 -             'Corona.dataArray = New List(Of dataJson)
 
 -             'Corona.dataArray.Add(JsonConvert.DeserializeObject(Of dataJson)(JsonConvert.SerializeObject(ln)))
 
 -             'End If
 
 -             '//
 
 -             Dim dt As New DataTable
 
 -             dt.Columns.Add("no", GetType(Integer))
 
 -             dt.Columns.Add("age")
 
 -             dt.Columns.Add("sex")
 
 -             dt.Columns.Add("nation")
 
 -             dt.Columns.Add("occ_new")
 
 -             dt.Columns.Add("Province")
 
 -             dt.Columns.Add("Risk")
 
 -             dt.Columns.Add("AnnounceDate", GetType(String))
 
 -             For Each covid As dataJson In Corona.dataArray
 
 -                 If covid IsNot Nothing Then
 
 -                     Dim dr As DataRow = dt.NewRow()
 
 -                     dr(0) = covid.no
 
 -                     dr(1) = covid.age
 
 -                     dr(2) = covid.sex
 
 -                     dr(3) = covid.nation
 
 -                     dr(4) = covid.occ_new
 
 -                     dr(5) = covid.Province
 
 -                     dr(6) = covid.Risk
 
 -                     dr(7) = covid.AnnounceDate
 
 -                     '// Add row.
 
 -                     dt.Rows.Add(dr)
 
 -                 End If
 
 -             Next
 
 -             dgvData.DataSource = dt
 
 -             Call SetupGridView()
 
 -             lblCount.Text = "Total Records: " & dgvData.RowCount
 
 -             dt.Dispose()
 
 -             reader.Dispose()
 
 -             response.Dispose()
 
 -         Catch ex As Exception
 
 -             MessageBox.Show(ex.Message)
 
 -         End Try
 
 -     End Sub
 
  
-     Private Sub SetupGridView()
 
 -         With dgvData
 
 -             .RowHeadersVisible = False
 
 -             .AllowUserToAddRows = False
 
 -             .AllowUserToDeleteRows = False
 
 -             .AllowUserToResizeRows = False
 
 -             .MultiSelect = False
 
 -             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
 
 -             .ReadOnly = True
 
 -             '// Data rows
 
 -             .Font = New Font("Tahoma", 10)
 
 -             .RowTemplate.MinimumHeight = 27
 
 -             .RowTemplate.Height = 27
 
 -             '// Column Header
 
 -             .ColumnHeadersHeight = 30
 
 -             .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
 
 -             '// Autosize Column
 
 -             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
 
 -             '// Even-Odd Color
 
 -             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue ' Color.LightGreen
 
 -             '// Header
 
 -             With .ColumnHeadersDefaultCellStyle
 
 -                 .BackColor = Color.Navy
 
 -                 .ForeColor = Color.White
 
 -                 .Font = New Font(dgvData.Font, FontStyle.Bold)
 
 -             End With
 
 -             '// Hidden
 
 -             .Columns(0).Visible = False
 
 -         End With
 
 -         '// 
 
 -         'For i = 0 To dgvData.RowCount - 1
 
 -         'If Mid(dgvData.Rows(i).Cells(2).Value.ToString, 1, 10) <> "2020-02-29" Then
 
 -         'dgvData.Rows(i).Cells(2).Value = Format(CDate(Mid(dgvData.Rows(i).Cells(2).Value.ToString, 1, 10)), "dd/MM/yyyy")
 
 -         'Else
 
 -         'dgvData.Rows(i).Cells(2).Value = "29/02/2020"
 
 -         'End If
 
 -         'Next
 
 -     End Sub
 
  
-     Private Sub frmCovid19Thai_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
 
 -         Me.Dispose()
 
 -         GC.SuppressFinalize(Me)
 
 -         Application.Exit()
 
 -     End Sub
 
  
-     Private Sub BtnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
 
 -         Call Covid19Thailand()
 
 -         'Call Covid19API()
 
 -     End Sub
 
 - End Class
 
  
- Public Class dataCovid
 
 -     Public Property dataArray As List(Of dataJson)
 
 - End Class
 
  
- Public Class dataJson
 
 -     Public Property no As Integer
 
 -     Public Property age As String
 
 -     Public Property sex As String
 
 -     Public Property nation As String
 
 -     Public Property occ_new As String
 
 -     Public Property Province As String
 
 -     Public Property Risk As String
 
 -     Public Property AnnounceDate As String
 
 - End Class
 
  คัดลอกไปที่คลิปบอร์ด 
 
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2019) ได้ที่นี่ ...  
 
 
 |   
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน  
 
x
 
 
 
 
 |