반응형
*C# 공공데이터를 이용한 코로나 확진자 현황...
- 사용한 컨트롤 : Label 17 개 , Panel 7 개
전체 소스 코드
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Xml;
using System.Collections;
using System.Runtime.InteropServices;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
[DllImport("gdi32.dll")] private static extern IntPtr CreateRoundRectRgn(int x1, int y1, int x2, int y2, int cx, int cy);
[DllImport("user32.dll")] private static extern int SetWindowRgn(IntPtr hWnd, IntPtr hRgn, bool bRedraw);
public Form1()
{
InitializeComponent();
//Round Control
SetRoundControl(15, panel4);
SetRoundControl(15, panel5);
SetRoundControl(15, pnl1);
SetRoundControl(15, pnl2);
SetRoundControl(15, pnl3);
SetRoundControl(15, pnl4);
SetRoundControl(15, pnl5);
//코로나 현황
//코로나 발생 현황
try
{
DateTime dtNow = DateTime.Now;
SetCorona(dtNow);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "확 인", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void Form1_Resize(object sender, EventArgs e)
{
this.Size = new Size(708, 443);
}
private void SetCorona(DateTime dt)
{
string strURL = "http://openapi.data.go.kr/openapi/service/rest/Covid19/getCovid19InfStateJson";
strURL += "?ServiceKey=" + // Service Key
strURL += "&pageNo=1";
strURL += "&numOfRows=10";
strURL += "&startCreateDt=" + dt.AddDays(-1).ToString("yyyyMMdd"); //하루 전
strURL += "&endCreateDt=" + dt.ToString("yyyyMMdd"); //오늘
HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(strURL);
hwr.Method = "GET";
using (HttpWebResponse hwrResult = hwr.GetResponse() as HttpWebResponse)
{
//StreamReader sr = new StreamReader(hwrResult.GetResponseStream(), Encoding.UTF8, true );
//strResult = sr.ReadToEnd();
Stream sr = hwrResult.GetResponseStream();
//XML Read...
XMLToRead(sr);
sr.Close();
hwrResult.Close();
}
}
private void SetRoundControl(int iValue, Control ct)
{
IntPtr ip = CreateRoundRectRgn(0, 0, ct.Width, ct.Height, iValue, iValue);
int i = SetWindowRgn(ct.Handle, ip, true);
}
private void XMLToRead(Stream st)
{
//=========================nodeList Comment===================================
//기준일 STATEDT
//기준시간 STATETIME
//확진자수 DECIDECNT
//격리해제수 CLEARCNT
//검사진행수 EXAMCNT
//사망자수 DEATHCNT
//치료중 환자수 CARECNT
//결과음성 수 RESUTLNEGCNT
//누적검사수 ACCEXAMCNT
//누적검사완료수 ACCEXAMCOMPCNT
//누적확진률 ACCDEFRATE
//등록일시 CREATEDT
//수정일시 UPDATEDT
XmlDocument xd = new XmlDocument();
//XML 문서로...
xd.Load(st);
XmlNodeList xnl = xd.GetElementsByTagName("item"); //접근할 노드 (대소문자 구분 해야 됨.)
int idecideCnt = 0;
int iExamCnt = 0;
int iclearCnt = 0;
double dbAccDefRate = 0.0;
int ideathCnt = 0;
int icareCnt = 0;
//전날 누적 확진자 수
int iBeforeDec = 0;
foreach (XmlNode xn in xnl)
{
if (xn["stateDt"].InnerText == DateTime.Now.ToString("yyyyMMdd"))
{
//기준 일시
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);
}//if
else
{
//어제 까지 누적 확진자 수
iBeforeDec = Convert.ToInt32(xn["decideCnt"].InnerText);
}//else
}//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);
}
}
}
[C#] [API] 컨트롤 (Control) 모서리 둥글게 만들기 :: 삽질하는 개발자... (tistory.com)
컨트롤 모서리를 둥글게 하기 위해 API 선언 후 이용
아래의 함수 내용을 보면 공공데이터 이용할 URL 및 서비스키(인증키 앞서 말한 Encoding 일반인증키 사용)
조회 시작할 날짜와 끝 날짜를 입력 할 수 있게 되어 있습니다.
현재 날짜와 하루 전 날짜 데이터를 불러 오는 이유는 확진자 수가 누적 확진자 수 로 불러 오기 때문에
현재 누적 확진자 수 - 하루 전 누적 확진자 수 를 구하면 현재 확진자 수가 나오기 때문
공공데이터를 이용해 코로나 확진자 현황 예제를 만들어 봤으며
코로나 집계에 관련된 버그라 소스코드 작성 하시는 분들이 테스트 해 보시고 맞게 코드를 최적화 하시면
되겠습니다. (일요일 같은 주말에 테스트 해보시길...)
[C#] [공공데이터] 가입 및 활용 신청... (1) :: 삽질하는 개발자... (tistory.com)
반응형
'C# Programming' 카테고리의 다른 글
[C#] [공공데이터] 환율 정보 가져 오기 예제... (0) | 2021.10.19 |
---|---|
[C#] [공공데이터] 한국 수출입 은행 Open API 사용하기전 가입 신청... (0) | 2021.10.15 |
[C#] [공공데이터] 가입 및 활용 신청... (1) (0) | 2021.09.13 |
[C#] String Byte Char 변환 예제 (0) | 2021.08.07 |
[C#] [Control] Listview - Column Auto Size (컬럼 사이즈 자동 조절) 예제 (0) | 2021.06.30 |