[B4A] รายงานข้อมูลสถานะการณ์โควิด-19 ประเทศไทย ผ่านทาง API (Json)
http://www.g2gnet.com/webboard/images/b4a/covid19.pngเป็นบทความแรกในรอบหลายปี สำหรับ B4A (Basic For Android) ภาษาเบสิคบนระบบปฏิบัติการแอนดรอยด์ ซึ่งปัจจุบันนี้ B4A กลายเป็น Open Source และฟรีโปรแกรมเป็นที่เรียบร้อย ... สำหรับโค้ดชุดนี้เราจะทำการอ่านค่า URL จากรายงานของต่างประเทศ ข้อมูลที่ถูกส่งกลับมาจะอยู่ในรูปแบบของ JSON ซึ่งเราต้องมาทำการเขียนโค้ดเพื่อแยกแยะ (Parser) ข้อมูลต่างๆออกมา ...
ดาวน์โหลด B4A เพื่อทำการติดตั้งใช้งานฟรี ...
ดาวน์โหลดโค้ดต้นฉบับ Covid-19 ประเทศไทย (โค้ด B4A) ...
ลิ้งค์รับค่า JSON ... https://coronavirus-19-api.herokuapp.com/countries/thailand
รูปแบบที่ถูกส่งกลับมา หากเลือกจากประเทศ จะไม่มีเครื่องหมาย Bracket [ ] ปิดหัวท้ายให้ ดังนั้นเราจึงต้องจัดรูปแบบใหม่ ...
{"country":"Thailand","cases":3135,"todayCases":0,"deaths":58,"todayDeaths":0,"recovered":2996,"active":81,"critical":1,"casesPerOneMillion":45,"deathsPerOneMillion":0,"totalTests":468175,"testsPerOneMillion":6708}
การใช้ JSON Tree Example เพื่อทำการแยกข้อมูล และจะได้โค้ดเพื่อนำไปใช้กับ B4A หรือตระกูล B4X ... หรือเข้าไปที่ http://basic4ppc.com:51042/json/index.html
http://www.g2gnet.com/webboard/images/b4a/covid19json.png
ที่เก็บไฟล์ Libraries ของ B4A ... หากท่านไม่มี Libraries 2 ตัวนี้ แอดมินได้เก็บไว้ในไฟล์ Zip ให้เรียบร้อย จากนั้นก็แตกไฟล์ออกมา คัดลอกมาวางไว้ที่นี่ก่อนด้วยล่ะครับ
http://www.g2gnet.com/webboard/images/b4a/b4alib.png
ก่อนจะเขียนโค้ด เราต้องเลือก Libraries มาใช้งานก่อน ... หากนำไฟล์ Libraries 2 ตัวไปเก็บไว้ใน C:\Program Files (x86)\Anywhere Software\Basic4android\Libraries ภายหลัง ให้คลิ๊กเมาส์ขวาเลือก Refresh ก็จะเห็นชื่อไฟล์ปรากฏขึ้นมา ...
http://www.g2gnet.com/webboard/images/b4a/covid19lib.png
หน้าจอการ Designer จาก B4A เลือกเมนู Designer --> Open Designer ... ขอให้พิจารณาคุณสมบัติ (Properties) ในการจัดรูปแบบต่างๆให้กับ Label แต่ละตัวเองด้วยครับ ...
http://www.g2gnet.com/webboard/images/b4a/covid19designer.png
มาดูโค้ดฉบับเต็ม B4A กันเถอะ ... Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
End Sub
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
'// พวก Label ที่เป็นค่าคงที่ ไม่จำเป็นต้อง Generate หรือประกาศตัวแปร
Private lblTodayCases As Label
Private lblRecovered As Label
Private lblCases As Label
Private lblDeaths As Label
Private lblHeader As Label
Private lblTodayDeaths As Label
Private lblActive As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("main")
'
Dim cov1 As HttpJob
cov1.Initialize("GetAddress", Me)
'// โหลด JSON เข้ามา
cov1.Download("https://coronavirus-19-api.herokuapp.com/countries/thailand")
Wait For (cov1) JobDone(cov1 As HttpJob)
'// หากดาวน์โหลดสำเร็จ
If cov1.Success Then
ProgressDialogHide
'// รูปแบบ JSON ที่ได้รับมา จะไม่มี Bracket [] ปิดหัวท้าย
'// {"country":"Thailand","cases":3135,"todayCases":0,"deaths":58,"todayDeaths":0,"recovered":2987,
'// "active":90,"critical":1,"casesPerOneMillion":45,"deathsPerOneMillion":0,"totalTests":468175,"testsPerOneMillion":6708}
Dim parser As JSONParser
'// ใส่ Bracket ให้กับชุดรูปแบบข้อมูล JSON แล้วทำการแยกแยะข้อมูล (Parser)
parser.Initialize("[" & cov1.GetString & "]")
'Log("parser started ")
DateTime.DateFormat="dd/MM/yyyy"
lblHeader.Text="สถานะการณ์โควิด-19 วันที่ " & DateTime.Date(DateTime.now)
'//
Dim root As List = parser.NextArray
'// ลูปรายการเพื่อรับค่า
For Each colC As Map In root
lblTodayCases.Text = NumberFormat2(colC.Get("todayCases"), 0, 2, 0, True)
lblRecovered.Text = NumberFormat2(colC.Get("recovered"), 0,2,0, True)
lblCases.Text = NumberFormat2(colC.Get("cases"), 0,2,0, True)
lblActive.Text = NumberFormat2(colC.Get("active"), 0,2,0, True)
lblTodayDeaths.Text = NumberFormat2(colC.Get("todayDeaths"), 0,2,0, True)
lblDeaths.Text = NumberFormat2(colC.Get("deaths"), 0,2,0, True)
Next
End If
cov1.Release
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
หน้า:
[1]