반응형

*VBNET 공공데이터를 이용한 코로나 확진자 현황...

Main

- 사용한 컨트롤 : Label 17 개 , Panel 7 개 

 

전체 소스 코드

Form1.vb

Imports System.Runtime.InteropServices

Imports System.Net
Imports System.IO
Imports System.Xml

Public Class Form1

    Public Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
    Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

    Protected Overrides Sub OnLoad(e As EventArgs)

        'Round Control
        SetRoundControl(panel4, 15)
        SetRoundControl(panel5, 15)
        SetRoundControl(pnl1, 15)
        SetRoundControl(pnl2, 15)
        SetRoundControl(pnl3, 15)
        SetRoundControl(pnl4, 15)
        SetRoundControl(pnl5, 15)

        Try
            Dim dtNow As DateTime = Date.Now

            If (dtNow.DayOfWeek = DayOfWeek.Sunday) Then
                MessageBox.Show("오늘은 집계를 하지 않는 주말 입니다.", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                'application.run() 이후에 종료 하는 것이므로... program.cs 에서 run 이전이면  application.exit()
                Environment.Exit(1)
            End If

            SetCorona(dtNow)

        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString())
        End Try

        MyBase.OnLoad(e)
    End Sub

    Private Sub SetRoundControl(ct As Control, iValue As Integer)

        Dim ip As IntPtr = CreateRoundRectRgn(0, 0, ct.Width, ct.Height, iValue, iValue)
        Dim i As Integer = SetWindowRgn(ct.Handle, ip, True)

    End Sub

    Private Sub SetCorona(ByVal dt As DateTime)
        Dim strURL As String = "http://openapi.data.go.kr/openapi/service/rest/Covid19/getCovid19InfStateJson"
        strURL += "?ServiceKey=" + "sb51casSGzjE5uqMHruw3gnN58sltRChTonZaqNIAqKvofyOsiupJE0Lwrlpyac%2BgZCD3QOWivSkk7CBZ5wOFQ%3D%3D" ' Service Key
        strURL += "&pageNo=1"
        strURL += "&numOfRows=10"
        strURL += "&startCreateDt=" + dt.AddDays(-1).ToString("yyyyMMdd")               '하루 전
        strURL += "&endCreateDt=" + dt.ToString("yyyyMMdd")                             '오늘

        Dim hwr As HttpWebRequest = CType(WebRequest.Create(strURL), HttpWebRequest)
        hwr.Method = "GET"

        Using hwrResult As HttpWebResponse = CType(hwr.GetResponse(), HttpWebResponse)
            Dim sr As Stream = hwrResult.GetResponseStream()
            'XML 파싱
            XMLToRead(sr)

            sr.Close()
            hwrResult.Close()
        End Using

    End Sub

    Private Sub XMLToRead(sr As Stream)
        '=========================nodeList Comment===================================
        '기준일 STATEDT
        '기준시간 STATETIME

        '확진자수 DECIDECNT
        '격리해제수 CLEARCNT
        '검사진행수 EXAMCNT
        '사망자수 DEATHCNT
        '치료중 환자수 CARECNT
        '결과음성 수 RESUTLNEGCNT
        '누적검사수 ACCEXAMCNT
        '누적검사완료수 ACCEXAMCOMPCNT
        '누적확진률 ACCDEFRATE

        '등록일시 CREATEDT
        '수정일시 UPDATEDT
        Dim xd As XmlDocument = New XmlDocument()

        'XML 문서로...
        xd.Load(sr)
        Dim xnl As XmlNodeList = xd.GetElementsByTagName("item")  '접근할 노드 (대소문자 구분 해야 됨.)

        Dim idecideCnt As Integer = 0
        Dim iExamCnt As Integer = 0
        Dim iclearCnt As Integer = 0
        Dim dbAccDefRate As Double = 0.0
        Dim ideathCnt As Integer = 0
        Dim icareCnt As Integer = 0

        '전날 누적 확진자 수
        Dim iBeforeDec As Integer = 0

        Dim xn As XmlNode
        For Each xn In xnl
            If xn("stateDt").InnerText = DateTime.Now.ToString("yyyyMMdd") Then
                '기준 일시
                lblDate.Text = xn("stateDt").InnerText + " " + xn("stateTime").InnerText
                '확진자 수
                idecideCnt = Convert.ToInt32(xn("decideCnt").InnerText)
                '검사 진행
                iExamCnt = Convert.ToInt32(xn("examCnt").InnerText)
                '격리 해제
                iclearCnt = Convert.ToInt32(xn("clearCnt").InnerText)
                '누적 확진률
                dbAccDefRate = Convert.ToDouble(xn("accDefRate").InnerText)
                '사망자
                ideathCnt = Convert.ToInt32(xn("deathCnt").InnerText)
                '치료중인환자
                icareCnt = Convert.ToInt32(xn("careCnt").InnerText)
            Else
                '어제 까지 누적 확진자 수
                iBeforeDec = Convert.ToInt32(xn("decideCnt").InnerText)
            End If

        Next 'foreach

        '오늘까지 누적 확진자 수  - 어제까지 누적 확진자 수 
        lblDec.Text = String.Format("{0:#,###,000}", idecideCnt - iBeforeDec)
        lbl1.Text = String.Format("{0:#,###,000}", iExamCnt)
        lbl2.Text = String.Format("{0:#,###,000}", iclearCnt)
        lblAccDefRate.Text = String.Format("{0:0.00}", dbAccDefRate) + " %"
        lbl3.Text = String.Format("{0:#,###,000}", ideathCnt)
        lbl4.Text = String.Format("{0:#,###,000}", icareCnt)
        lbl5.Text = String.Format("{0:#,###,000}", idecideCnt)
    End Sub

End Class

 

[VBNET] [API] 컨트롤 (Control) 모서리 둥글게 하기 :: 삽질하는 개발자... (tistory.com)

 

[VBNET] [API] 컨트롤 (Control) 모서리 둥글게 하기

* VBNET API 를 이용한 컨트롤 (Control ) 모서리 둥글게 하기 예제... 전체 소스 코드 Form1.vb Public Class Form1 Public Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As L..

kdsoft-zeros.tistory.com

 

컨트롤 모서리를 둥글게 하기 위해 API 선언 후 이용

아래의 함수 내용을 보면 공공데이터 이용할 URL 및 서비스키(인증키 앞서 말한 Encoding 일반인증키 사용)

조회 시작할 날짜와 끝 날짜를 입력 할 수 있게 되어 있습니다.

 

 

 

현재 날짜와 하루 전 날짜 데이터를 불러 오는 이유는 확진자 수가 누적 확진자 수 로 불러 오기 때문에

현재 누적 확진자 수 - 하루 전 누적 확진자 수 를 구하면 현재 확진자 수가 나오기 때문

 

공공데이터를 이용해 코로나 확진자 현황 예제를 만들어 봤으며 

코로나 집계에 관련된 버그라 소스코드 작성 하시는 분들이 테스트 해 보시고 맞게 코드를 최적화 하시면 

되겠습니다. (일요일 같은 주말에 테스트 해보시길...)

 

 

[C#] [공공데이터] 가입 및 활용 신청... (1) :: 삽질하는 개발자... (tistory.com)

 

[C#] [공공데이터] 가입 및 활용 신청... (1)

* 공공데이터를 활용 하여 코로나 확진자 및 현황을 알아 보겠습니다. 먼저 앞서 작업을 해야 될 부분이 있습니다. 공공데이터포털 (data.go.kr) 공공데이터 포털 국가에서 보유하고 있는 다양한 데

kdsoft-zeros.tistory.com

 

반응형

+ Recent posts