thongkorn โพสต์ 2020-6-17 15:20:26

[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]
ดูในรูปแบบกติ: [B4A] รายงานข้อมูลสถานะการณ์โควิด-19 ประเทศไทย ผ่านทาง API (Json)