반응형

* VBNET 한국 수출입 은행 공공데이터를 이용한 대출 금리 정보 가져 오기 예제...

Main

- 사용한 컨트롤 : DateTimepicker 1개, Button 1개, Label 4개

 

전체 소스 코드

Form1.vb

 

Imports System.Runtime.InteropServices
Imports System.Net
Imports System.IO
Imports System.Net.Json


Public Class Form1

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        'AP01 : 환율, AP02 : 대출금리, AP03 : 국제금리
 
        Dim strURL As String = "https://www.koreaexim.go.kr/site/program/financial/interestJSON?authkey=" + _
                               "DhvTGvqzZYg58GZMbo0C2eBhOHnLtj10&searchdate=" + _
                               dtp.Value.ToString("yyyyMMdd") + "&data=" + _
                               "AP02"
        Dim hwr As HttpWebRequest = WebRequest.Create(strURL)
        hwr.ContentType = "application/json"

        Using hwrResult As HttpWebResponse = CType(hwr.GetResponse(), HttpWebResponse)
            Dim sr As Stream = hwrResult.GetResponseStream()

            Using srd As StreamReader = New StreamReader(sr)
                Dim strResult As String = srd.ReadToEnd()
                Dim strErr As String = ""

                If (Not StringToJson(strResult, strErr)) Then
                    MessageBox.Show(strErr, "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                End If

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

    Private Function StringToJson(ByVal strTmp As String, ByRef strErr As String) As Boolean

        If strTmp.Length < 3 Then
            strErr = "영업일이 아닙니다. 확인 후 이용해 주세요."
            Return False
        End If

        Dim jtr As JsonTextParser = New JsonTextParser()
        'string 문자열 -> json 으로 변환
        Dim jo As JsonObject = jtr.Parse(strTmp)

        Dim jac As JsonArrayCollection = CType(jo, JsonArrayCollection)
        Dim iRow As Integer = 0

        Dim joc As JsonObjectCollection

        For Each joc In jac
            iRow += 1

            If (joc("result").ToString().Contains("1")) Then

                lbl1.Text = joc("sfln_intrc_nm").ToString().Split(":")(1).Replace("""", " ").Trim()
                lbl2.Text = joc("int_r").ToString().Split(":")(1).Replace("""", " ").Trim()
            End If
        Next

        Return True

    End Function

End Class


아래의 그림과 같이 Button Click Event 를 살펴 보면

strURL 부분의 지워진 부분은 각자 한국 수출입 은행에서 받은 인증키를 입력 하면 됩니다. 



출처: https://kdsoft-zeros.tistory.com/250 [삽질하는 개발자...]

 

https://kdsoft-zeros.tistory.com/247

 

[C#] [공공데이터] 한국 수출입 은행 Open API 사용하기전 가입 신청...

https://www.koreaexim.go.kr/site/main/index001 한국수출입은행 www.koreaexim.go.kr 네이버 에서 한국 수출입 은행 으로 검색 하시면 위 화면과 같이 홈페이지에 접속 할 수 있습니다. 홈페이지에 접속 후 정..

kdsoft-zeros.tistory.com

 

https://kdsoft-zeros.tistory.com/98

 

[VBNET] Json File Write & Read 예제...

* VBNET Json 파일 읽고 쓰기 예제... (System.Net.Json.dll) 파일 참조 위 첨부된 파일을 다운 받아 dll 참조 추가를 해줍니다. 오른쪽에 솔루션 탐색기가 나타나지 않는다면, 상단 메뉴 (보기) -> (솔루션탐

kdsoft-zeros.tistory.com

 

 

* 예제 결과

 

반응형
반응형

* C# 한국 수출입 은행 공공데이터를 이용한 대출 금리 정보 가져 오기 예제...


Main

- 사용한 컨트롤 : DateTimepicker 1개, Button 1개, Label 4개

 

전체 소스 코드

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Net;
using System.Runtime.InteropServices;
using System.Net.Json;
using System.IO;

namespace CSharp_Loan
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private bool StringToJson(string strTmp, ref string strErr)
        {

            if (strTmp.Length < 3)
            {
                strErr = "영업일이 아닙니다. 확인 후 이용해 주세요.";
                return false;
            }

            JsonTextParser jtr = new JsonTextParser();
            //string 문자열 -> json 으로 변환
            JsonObject jo = jtr.Parse(strTmp);

            JsonArrayCollection jac = (JsonArrayCollection)jo;
            int iRow = 0;

            foreach (JsonObjectCollection joc in jac)
            {
                iRow += 1;
                //Display
                if (joc["result"].ToString().Contains("1"))
                {
                    lbl1.Text = joc["sfln_intrc_nm"].ToString().Split(':')[1].Replace('"', ' ').Trim();
                    lbl2.Text = joc["int_r"].ToString().Split(':')[1].Replace('"', ' ').Trim();
                }

            }

            return true;

        }


        private void button1_Click(object sender, EventArgs e)
        {
            //AP01 : 환율, AP02 : 대출금리, AP03 : 국제금리
            //ex) 2015-01-01, 20150101, (DEFAULT)현재일
            //(요청) https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=AUTHKEY1234567890&searchdate=20180102&data=AP01
            //(응답) [{"result":1,"cur_unit":"AED","ttb":"288.78","tts":"294.61","deal_bas_r":"291.7","bkpr":"291"
            //        ,"yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"291","kftc_deal_bas_r":"291.7" 
            //        ,"cur_nm":"아랍에미리트 디르함"},"result":1,"cur_unit":"ATS","ttb":"0","tts":"0"
            //        ,"deal_bas_r":"93.52","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0"
            //        ,"kftc_deal_bas_r":"93.52","cur_nm":"오스트리아 실링"},{"result":1,"cur_unit":"AUD","ttb":"827.91","tts":"844.64","deal_bas_r":"836.28","bkpr":"836","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"836","kftc_deal_bas_r":"836.28","cur_nm":"호주 달러"},{"result":1,"cur_unit":"BEF","ttb":"0","tts":"0","deal_bas_r":"31.9","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"31.9","cur_nm":"벨기에 프랑"},{"result":1,"cur_unit":"BHD","ttb":"2,811.48","tts":"2,868.27","deal_bas_r":"2,839.88","bkpr":"2,839","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"2,839","kftc_deal_bas_r":"2,839.88","cur_nm":"바레인 디나르"},{"result":1,"cur_unit":"CAD","ttb":"844.72","tts":"861.79","deal_bas_r":"853.26","bkpr":"853","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"853","kftc_deal_bas_r":"853.26","cur_nm":"캐나다 달러"},{"result":1,"cur_unit":"CHF","ttb":"1,088.44","tts":"1,110.43","deal_bas_r":"1,099.44","bkpr":"1,099","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,099","kftc_deal_bas_r":"1,099.44","cur_nm":"스위스 프랑"},{"result":1,"cur_unit":"CNH","ttb":"162.01","tts":"165.28","deal_bas_r":"163.65","bkpr":"163","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"163","kftc_deal_bas_r":"163.65","cur_nm":"위안화"},{"result":1,"cur_unit":"DEM","ttb":"0","tts":"0","deal_bas_r":"657.98","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"657.98","cur_nm":"독일 마르크"},{"result":1,"cur_unit":"DKK","ttb":"171.14","tts":"174.59","deal_bas_r":"172.87","bkpr":"172","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"172","kftc_deal_bas_r":"172.87","cur_nm":"덴마아크 크로네"},{"result":1,"cur_unit":"ESP(100)","ttb":"0","tts":"0","deal_bas_r":"773","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"773","cur_nm":"스페인 페세타"},{"result":1,"cur_unit":"EUR","ttb":"1,274.04","tts":"1,299.77","deal_bas_r":"1,286.91","bkpr":"1,286","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,286","kftc_deal_bas_r":"1,286.91","cur_nm":"유로"},{"result":1,"cur_unit":"FIM","ttb":"0","tts":"0","deal_bas_r":"216.44","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"216.44","cur_nm":"핀란드 마르카"},{"result":1,"cur_unit":"FRF","ttb":"0","tts":"0","deal_bas_r":"196.18","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"196.18","cur_nm":"프랑스 프랑"},{"result":1,"cur_unit":"GBP","ttb":"1,432.82","tts":"1,461.77","deal_bas_r":"1,447.3","bkpr":"1,447","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,447","kftc_deal_bas_r":"1,447.3","cur_nm":"영국 파운드"},{"result":1,"cur_unit":"HKD","ttb":"135.75","tts":"138.5","deal_bas_r":"137.13","bkpr":"137","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"137","kftc_deal_bas_r":"137.13","cur_nm":"홍콩 달러"},{"result":1,"cur_unit":"IDR(100)","ttb":"7.82","tts":"7.97","deal_bas_r":"7.9","bkpr":"7","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"7","kftc_deal_bas_r":"7.9","cur_nm":"인도네시아 루피아"},{"result":1,"cur_unit":"ITL(100)","ttb":"0","tts":"0","deal_bas_r":"66.46","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"66.46","cur_nm":"이태리 리라"},{"result":1,"cur_unit":"JPY(100)","ttb":"941.53","tts":"960.56","deal_bas_r":"951.05","bkpr":"951","yy_efee_r":"0.96833","ten_dd_efee_r":"0.0242","kftc_bkpr":"951","kftc_deal_bas_r":"951.05","cur_nm":"일본 옌"},{"result":1,"cur_unit":"KRW","ttb":"0","tts":"0","deal_bas_r":"1","bkpr":"1","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1","kftc_deal_bas_r":"1","cur_nm":"한국 원"},{"result":1,"cur_unit":"KWD","ttb":"3,509.87","tts":"3,580.78","deal_bas_r":"3,545.33","bkpr":"3,545","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"3,545","kftc_deal_bas_r":"3,545.33","cur_nm":"쿠웨이트 디나르"},{"result":1,"cur_unit":"MYR","ttb":"262.09","tts":"267.38","deal_bas_r":"264.74","bkpr":"264","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"264","kftc_deal_bas_r":"264.74","cur_nm":"말레이지아 링기트"},{"result":1,"cur_unit":"NLG","ttb":"0","tts":"0","deal_bas_r":"583.97","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"583.97","cur_nm":"네델란드 길더"},{"result":1,"cur_unit":"NOK","ttb":"129.44","tts":"132.05","deal_bas_r":"130.75","bkpr":"130","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"130","kftc_deal_bas_r":"130.75","cur_nm":"노르웨이 크로네"},{"result":1,"cur_unit":"NZD","ttb":"752.76","tts":"767.97","deal_bas_r":"760.37","bkpr":"760","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"760","kftc_deal_bas_r":"760.37","cur_nm":"뉴질랜드 달러"},{"result":1,"cur_unit":"SAR","ttb":"282.84","tts":"288.55","deal_bas_r":"285.7","bkpr":"285","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"285","kftc_deal_bas_r":"285.7","cur_nm":"사우디 리얄"},{"result":1,"cur_unit":"SEK","ttb":"129.3","tts":"131.91","deal_bas_r":"130.61","bkpr":"130","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"130","kftc_deal_bas_r":"130.61","cur_nm":"스웨덴 크로나"},{"result":1,"cur_unit":"SGD","ttb":"793.06","tts":"809.09","deal_bas_r":"801.08","bkpr":"801","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"801","kftc_deal_bas_r":"801.08","cur_nm":"싱가포르 달러"},{"result":1,"cur_unit":"THB","ttb":"32.57","tts":"33.22","deal_bas_r":"32.9","bkpr":"32","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"32","kftc_deal_bas_r":"32.9","cur_nm":"태국 바트"},{"result":1,"cur_unit":"USD","ttb":"1,056.23","tts":"1,077.56","deal_bas_r":"1,066.9","bkpr":"1,066","yy_efee_r":"2.69465","ten_dd_efee_r":"0.07485","kftc_bkpr":"1,071","kftc_deal_bas_r":"1,071.4","cur_nm":"미국 달러"},{"result":1,"cur_unit":"XOF","ttb":"0","tts":"0","deal_bas_r":"1.9618","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"1.9618","cur_nm":"씨에프에이 프랑(비씨에이오)"}]

            string strURL = "https://www.koreaexim.go.kr/site/program/financial/interestJSON?authkey=" +
                            "시리얼키=" +
                            dtp.Value.ToString("yyyyMMdd") + "&data=" +
                            "AP02";

            HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(strURL);
            hwr.ContentType = "application/json";
            //hwr.Method = "GET";

            using (HttpWebResponse hwrResult = hwr.GetResponse() as HttpWebResponse)
            {
                Stream sr = hwrResult.GetResponseStream();
                //JSON 파싱...
                using (StreamReader srd = new StreamReader(sr))
                {
                    string strResult = srd.ReadToEnd();
                    string strErr = "";
                    if (!StringToJson(strResult, ref strErr))
                    {
                        MessageBox.Show(strErr, "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    }
                }//using StreamReader

                sr.Close();
                hwrResult.Close();

            }//using HttpWebResponse
        }
    }
}

아래의 그림과 같이 Button Click Event 를 살펴 보면

strURL 부분의 지워진 부분은 각자 한국 수출입 은행에서 받은 인증키를 입력 하면 됩니다. 



출처: https://kdsoft-zeros.tistory.com/248 [삽질하는 개발자...]

https://kdsoft-zeros.tistory.com/247

 

[C#] [공공데이터] 한국 수출입 은행 Open API 사용하기전 가입 신청...

https://www.koreaexim.go.kr/site/main/index001 한국수출입은행 www.koreaexim.go.kr 네이버 에서 한국 수출입 은행 으로 검색 하시면 위 화면과 같이 홈페이지에 접속 할 수 있습니다. 홈페이지에 접속 후 정..

kdsoft-zeros.tistory.com

 

https://kdsoft-zeros.tistory.com/97

 


* 예제 결과

반응형
반응형

* VBNET 한국 수출입 은행 공공데이터를 이용한 환율 정보 가져 오기 예제...

 

Main

 

- 사용한 컨트롤 : DateTimepicker 1개, Button 1개, Listview 1개

 

전체 소스 코드

Form1.vb



Imports System.Net.Json
Imports System.IO
Imports System.Net

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(ByVal e As System.EventArgs)
        SetRoundControl(listView1, 15)

        MyBase.OnLoad(e)
    End Sub
    Private Sub Form1_ResizeEnd(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.ResizeEnd
        SetRoundControl(listView1, 15)
    End Sub

    Private Sub SetRoundControl(ByVal ct As Control, ByVal 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 Function StringToJson(ByVal strTmp As String, ByRef strErr As String) As Boolean

        If strTmp.Length < 3 Then
            strErr = "영업일이 아닙니다. 확인 후 이용해 주세요."
            Return False
        End If

        listView1.Items.Clear()

        Dim jtr As JsonTextParser = New JsonTextParser()
        'string 문자열 -> json 으로 변환
        Dim jo As JsonObject = jtr.Parse(strTmp)

        Dim jac As JsonArrayCollection = CType(jo, JsonArrayCollection)
        Dim iRow As Integer = 0

        Dim joc As JsonObjectCollection

        For Each joc In jac
            iRow += 1
            'Display
            JsonDataSet(iRow, joc)
        Next

        Return True

    End Function


    Private Sub JsonDataSet(ByVal iRow As Integer, ByVal joc As JsonObjectCollection)
        'success 
        If joc("result").ToString().Contains("1") Then
            Dim lvi As ListViewItem = New ListViewItem()
            lvi.Text = iRow.ToString()
            'ex) cur_nm : "미국 달러" => split(:)[1] "미국 달러" => Replace " 공백 치환으로 미국 달러 

            lvi.SubItems.Add(joc("cur_unit").ToString().Split(":")(1).Replace("""", " ").Trim())
            lvi.SubItems.Add(joc("cur_nm").ToString().Split(":")(1).Replace("""", " ").Trim())
            lvi.SubItems.Add(joc("ttb").ToString().Split(":")(1).Replace("""", " ").Trim())
            lvi.SubItems.Add(joc("tts").ToString().Split(":")(1).Replace("""", " ").Trim())
            lvi.SubItems.Add(joc("deal_bas_r").ToString().Split(":")(1).Replace("""", " ").Trim())
            lvi.SubItems.Add(joc("bkpr").ToString().Split(":")(1).Replace("""", " ").Trim())
            lvi.SubItems.Add(joc("yy_efee_r").ToString().Split(":")(1).Replace("""", " ").Trim())
            lvi.SubItems.Add(joc("kftc_deal_bas_r").ToString().Split(":")(1).Replace("""", " ").Trim())
            lvi.SubItems.Add(joc("kftc_bkpr").ToString().Split(":")(1).Replace("""", " ").Trim())

            listView1.Items.Add(lvi)
        End If

    End Sub

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        'AP01 : 환율, AP02 : 대출금리, AP03 : 국제금리
        'ex) 2015-01-01, 20150101, (DEFAULT)현재일
        '(요청) https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=AUTHKEY1234567890&searchdate=20180102&data=AP01
        '(응답) [{"result":1,"cur_unit":"AED","ttb":"288.78","tts":"294.61","deal_bas_r":"291.7","bkpr":"291"
        '        ,"yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"291","kftc_deal_bas_r":"291.7" 
        '        ,"cur_nm":"아랍에미리트 디르함"},"result":1,"cur_unit":"ATS","ttb":"0","tts":"0"
        '        ,"deal_bas_r":"93.52","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0"
        '        ,"kftc_deal_bas_r":"93.52","cur_nm":"오스트리아 실링"},{"result":1,"cur_unit":"AUD","ttb":"827.91","tts":"844.64","deal_bas_r":"836.28","bkpr":"836","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"836","kftc_deal_bas_r":"836.28","cur_nm":"호주 달러"},{"result":1,"cur_unit":"BEF","ttb":"0","tts":"0","deal_bas_r":"31.9","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"31.9","cur_nm":"벨기에 프랑"},{"result":1,"cur_unit":"BHD","ttb":"2,811.48","tts":"2,868.27","deal_bas_r":"2,839.88","bkpr":"2,839","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"2,839","kftc_deal_bas_r":"2,839.88","cur_nm":"바레인 디나르"},{"result":1,"cur_unit":"CAD","ttb":"844.72","tts":"861.79","deal_bas_r":"853.26","bkpr":"853","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"853","kftc_deal_bas_r":"853.26","cur_nm":"캐나다 달러"},{"result":1,"cur_unit":"CHF","ttb":"1,088.44","tts":"1,110.43","deal_bas_r":"1,099.44","bkpr":"1,099","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,099","kftc_deal_bas_r":"1,099.44","cur_nm":"스위스 프랑"},{"result":1,"cur_unit":"CNH","ttb":"162.01","tts":"165.28","deal_bas_r":"163.65","bkpr":"163","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"163","kftc_deal_bas_r":"163.65","cur_nm":"위안화"},{"result":1,"cur_unit":"DEM","ttb":"0","tts":"0","deal_bas_r":"657.98","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"657.98","cur_nm":"독일 마르크"},{"result":1,"cur_unit":"DKK","ttb":"171.14","tts":"174.59","deal_bas_r":"172.87","bkpr":"172","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"172","kftc_deal_bas_r":"172.87","cur_nm":"덴마아크 크로네"},{"result":1,"cur_unit":"ESP(100)","ttb":"0","tts":"0","deal_bas_r":"773","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"773","cur_nm":"스페인 페세타"},{"result":1,"cur_unit":"EUR","ttb":"1,274.04","tts":"1,299.77","deal_bas_r":"1,286.91","bkpr":"1,286","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,286","kftc_deal_bas_r":"1,286.91","cur_nm":"유로"},{"result":1,"cur_unit":"FIM","ttb":"0","tts":"0","deal_bas_r":"216.44","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"216.44","cur_nm":"핀란드 마르카"},{"result":1,"cur_unit":"FRF","ttb":"0","tts":"0","deal_bas_r":"196.18","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"196.18","cur_nm":"프랑스 프랑"},{"result":1,"cur_unit":"GBP","ttb":"1,432.82","tts":"1,461.77","deal_bas_r":"1,447.3","bkpr":"1,447","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,447","kftc_deal_bas_r":"1,447.3","cur_nm":"영국 파운드"},{"result":1,"cur_unit":"HKD","ttb":"135.75","tts":"138.5","deal_bas_r":"137.13","bkpr":"137","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"137","kftc_deal_bas_r":"137.13","cur_nm":"홍콩 달러"},{"result":1,"cur_unit":"IDR(100)","ttb":"7.82","tts":"7.97","deal_bas_r":"7.9","bkpr":"7","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"7","kftc_deal_bas_r":"7.9","cur_nm":"인도네시아 루피아"},{"result":1,"cur_unit":"ITL(100)","ttb":"0","tts":"0","deal_bas_r":"66.46","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"66.46","cur_nm":"이태리 리라"},{"result":1,"cur_unit":"JPY(100)","ttb":"941.53","tts":"960.56","deal_bas_r":"951.05","bkpr":"951","yy_efee_r":"0.96833","ten_dd_efee_r":"0.0242","kftc_bkpr":"951","kftc_deal_bas_r":"951.05","cur_nm":"일본 옌"},{"result":1,"cur_unit":"KRW","ttb":"0","tts":"0","deal_bas_r":"1","bkpr":"1","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1","kftc_deal_bas_r":"1","cur_nm":"한국 원"},{"result":1,"cur_unit":"KWD","ttb":"3,509.87","tts":"3,580.78","deal_bas_r":"3,545.33","bkpr":"3,545","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"3,545","kftc_deal_bas_r":"3,545.33","cur_nm":"쿠웨이트 디나르"},{"result":1,"cur_unit":"MYR","ttb":"262.09","tts":"267.38","deal_bas_r":"264.74","bkpr":"264","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"264","kftc_deal_bas_r":"264.74","cur_nm":"말레이지아 링기트"},{"result":1,"cur_unit":"NLG","ttb":"0","tts":"0","deal_bas_r":"583.97","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"583.97","cur_nm":"네델란드 길더"},{"result":1,"cur_unit":"NOK","ttb":"129.44","tts":"132.05","deal_bas_r":"130.75","bkpr":"130","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"130","kftc_deal_bas_r":"130.75","cur_nm":"노르웨이 크로네"},{"result":1,"cur_unit":"NZD","ttb":"752.76","tts":"767.97","deal_bas_r":"760.37","bkpr":"760","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"760","kftc_deal_bas_r":"760.37","cur_nm":"뉴질랜드 달러"},{"result":1,"cur_unit":"SAR","ttb":"282.84","tts":"288.55","deal_bas_r":"285.7","bkpr":"285","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"285","kftc_deal_bas_r":"285.7","cur_nm":"사우디 리얄"},{"result":1,"cur_unit":"SEK","ttb":"129.3","tts":"131.91","deal_bas_r":"130.61","bkpr":"130","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"130","kftc_deal_bas_r":"130.61","cur_nm":"스웨덴 크로나"},{"result":1,"cur_unit":"SGD","ttb":"793.06","tts":"809.09","deal_bas_r":"801.08","bkpr":"801","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"801","kftc_deal_bas_r":"801.08","cur_nm":"싱가포르 달러"},{"result":1,"cur_unit":"THB","ttb":"32.57","tts":"33.22","deal_bas_r":"32.9","bkpr":"32","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"32","kftc_deal_bas_r":"32.9","cur_nm":"태국 바트"},{"result":1,"cur_unit":"USD","ttb":"1,056.23","tts":"1,077.56","deal_bas_r":"1,066.9","bkpr":"1,066","yy_efee_r":"2.69465","ten_dd_efee_r":"0.07485","kftc_bkpr":"1,071","kftc_deal_bas_r":"1,071.4","cur_nm":"미국 달러"},{"result":1,"cur_unit":"XOF","ttb":"0","tts":"0","deal_bas_r":"1.9618","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"1.9618","cur_nm":"씨에프에이 프랑(비씨에이오)"}]

        Dim strURL As String = "https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=" + _
                               "DhvTGvqzZYg58GZMbo0C2eBhOHnLtj10&searchdate=" + _
                               dtp.Value.ToString("yyyyMMdd") + "&data=" + _
                               "AP01"
        Dim hwr As HttpWebRequest = WebRequest.Create(strURL)
        hwr.ContentType = "application/json"

        Using hwrResult As HttpWebResponse = CType(hwr.GetResponse(), HttpWebResponse)
            Dim sr As Stream = hwrResult.GetResponseStream()

            Using srd As StreamReader = New StreamReader(sr)
                Dim strResult As String = srd.ReadToEnd()
                Dim strErr As String = ""

                If (Not StringToJson(strResult, strErr)) Then
                    MessageBox.Show(strErr, "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                End If

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


    End Sub

    
End Class

 

아래의 그림과 같이 Button Click Event 를 살펴 보면

strURL 부분의 지워진 부분은 각자 한국 수출입 은행에서 받은 인증키를 입력 하면 됩니다. 

https://kdsoft-zeros.tistory.com/247

 

[C#] [공공데이터] 한국 수출입 은행 Open API 사용하기전 가입 신청...

https://www.koreaexim.go.kr/site/main/index001 한국수출입은행 www.koreaexim.go.kr 네이버 에서 한국 수출입 은행 으로 검색 하시면 위 화면과 같이 홈페이지에 접속 할 수 있습니다. 홈페이지에 접속 후 정..

kdsoft-zeros.tistory.com


인증키를 입력 후 한국수출입은행 응답을 보면 주석에서 보는거와 같이 Json 형태로 응답이 오게

됩니다.

 

 

https://kdsoft-zeros.tistory.com/98

 

[VBNET] Json File Write & Read 예제...

* VBNET Json 파일 읽고 쓰기 예제... (System.Net.Json.dll) 파일 참조 위 첨부된 파일을 다운 받아 dll 참조 추가를 해줍니다. 오른쪽에 솔루션 탐색기가 나타나지 않는다면, 상단 메뉴 (보기) -> (솔루션탐

kdsoft-zeros.tistory.com

 

 

* 예제 결과

 

Result

 

반응형
반응형

* C# 한국 수출입 은행 공공데이터를 이용한 환율 정보 가져 오기 예제...

 

Main

- 사용한 컨트롤 : DateTimepicker 1개, Button 1개, Listview 1개

 

전체 소스 코드

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Net;
using System.Runtime.InteropServices;
using System.Net.Json;
using System.IO;

namespace CSharp_ExchangeRate
{
    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();

            dtp.Value = DateTime.Now;
            SetRoundControl(15, listView1);
            
        }
        private void Form1_Resize(object sender, EventArgs e)
        {
            SetRoundControl(15, listView1);
        }

        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 bool StringToJson(string strTmp, ref string strErr)
        {
            
            if (strTmp.Length < 3)
            {
                strErr = "영업일이 아닙니다. 확인 후 이용해 주세요.";
                return false ;
            }

            listView1.Items.Clear();

            JsonTextParser jtr = new JsonTextParser();
            //string 문자열 -> json 으로 변환
            JsonObject jo = jtr.Parse(strTmp);              

            JsonArrayCollection jac = (JsonArrayCollection)jo;
            int iRow = 0;

            foreach (JsonObjectCollection joc in jac)
            {
                iRow += 1;
                //Display
                JsonDataSet(iRow, joc);   
            }

            return true ;

        }

        private void JsonDataSet(int iRow, JsonObjectCollection  joc)
        {
            ListViewItem lvi = new ListViewItem();
            lvi.Text = iRow.ToString();

            //success 
            if (joc["result"].ToString().Contains("1"))
            {
                //ex) cur_nm : "미국 달러" => split(:)[1] "미국 달러" => Replace " 공백 치환으로 미국 달러 
                lvi.SubItems.Add(joc["cur_unit"].ToString().Split(':')[1].Replace ('"', ' ').Trim());                       //통화 코드
                lvi.SubItems.Add(joc["cur_nm"].ToString().Split(':')[1].Replace('"', ' ').Trim());                         //국가/통화명
                lvi.SubItems.Add(joc["ttb"].ToString().Split(':')[1].Replace('"', ' ').Trim());                            //전신환(송금) 받으실 때
                lvi.SubItems.Add(joc["tts"].ToString().Split(':')[1].Replace('"', ' ').Trim());                            //전신환(송금) 보내실 때
                lvi.SubItems.Add(joc["deal_bas_r"].ToString().Split(':')[1].Replace('"', ' ').Trim());                     //매매기준율
                lvi.SubItems.Add(joc["bkpr"].ToString().Split(':')[1].Replace('"', ' ').Trim());                           //장부가격
                lvi.SubItems.Add(joc["yy_efee_r"].ToString().Split(':')[1].Replace('"', ' ').Trim());                      //년환가료율
                lvi.SubItems.Add(joc["ten_dd_efee_r"].ToString().Split(':')[1].Replace('"', ' ').Trim());                  //10일 환가료율
                lvi.SubItems.Add(joc["kftc_deal_bas_r"].ToString().Split(':')[1].Replace('"', ' ').Trim());                //서울 외국환중개 매매기준율
                lvi.SubItems.Add(joc["kftc_bkpr"].ToString().Split(':')[1].Replace('"', ' ').Trim());                      //서울 외국환중개 장부 가격

                listView1.Items.Add(lvi);
            }

        }


        private void button1_Click(object sender, EventArgs e)
        {
            //AP01 : 환율, AP02 : 대출금리, AP03 : 국제금리
            //ex) 2015-01-01, 20150101, (DEFAULT)현재일
            //(요청) https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=AUTHKEY1234567890&searchdate=20180102&data=AP01
            //(응답) [{"result":1,"cur_unit":"AED","ttb":"288.78","tts":"294.61","deal_bas_r":"291.7","bkpr":"291"
            //        ,"yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"291","kftc_deal_bas_r":"291.7" 
            //        ,"cur_nm":"아랍에미리트 디르함"},"result":1,"cur_unit":"ATS","ttb":"0","tts":"0"
            //        ,"deal_bas_r":"93.52","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0"
            //        ,"kftc_deal_bas_r":"93.52","cur_nm":"오스트리아 실링"},{"result":1,"cur_unit":"AUD","ttb":"827.91","tts":"844.64","deal_bas_r":"836.28","bkpr":"836","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"836","kftc_deal_bas_r":"836.28","cur_nm":"호주 달러"},{"result":1,"cur_unit":"BEF","ttb":"0","tts":"0","deal_bas_r":"31.9","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"31.9","cur_nm":"벨기에 프랑"},{"result":1,"cur_unit":"BHD","ttb":"2,811.48","tts":"2,868.27","deal_bas_r":"2,839.88","bkpr":"2,839","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"2,839","kftc_deal_bas_r":"2,839.88","cur_nm":"바레인 디나르"},{"result":1,"cur_unit":"CAD","ttb":"844.72","tts":"861.79","deal_bas_r":"853.26","bkpr":"853","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"853","kftc_deal_bas_r":"853.26","cur_nm":"캐나다 달러"},{"result":1,"cur_unit":"CHF","ttb":"1,088.44","tts":"1,110.43","deal_bas_r":"1,099.44","bkpr":"1,099","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,099","kftc_deal_bas_r":"1,099.44","cur_nm":"스위스 프랑"},{"result":1,"cur_unit":"CNH","ttb":"162.01","tts":"165.28","deal_bas_r":"163.65","bkpr":"163","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"163","kftc_deal_bas_r":"163.65","cur_nm":"위안화"},{"result":1,"cur_unit":"DEM","ttb":"0","tts":"0","deal_bas_r":"657.98","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"657.98","cur_nm":"독일 마르크"},{"result":1,"cur_unit":"DKK","ttb":"171.14","tts":"174.59","deal_bas_r":"172.87","bkpr":"172","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"172","kftc_deal_bas_r":"172.87","cur_nm":"덴마아크 크로네"},{"result":1,"cur_unit":"ESP(100)","ttb":"0","tts":"0","deal_bas_r":"773","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"773","cur_nm":"스페인 페세타"},{"result":1,"cur_unit":"EUR","ttb":"1,274.04","tts":"1,299.77","deal_bas_r":"1,286.91","bkpr":"1,286","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,286","kftc_deal_bas_r":"1,286.91","cur_nm":"유로"},{"result":1,"cur_unit":"FIM","ttb":"0","tts":"0","deal_bas_r":"216.44","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"216.44","cur_nm":"핀란드 마르카"},{"result":1,"cur_unit":"FRF","ttb":"0","tts":"0","deal_bas_r":"196.18","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"196.18","cur_nm":"프랑스 프랑"},{"result":1,"cur_unit":"GBP","ttb":"1,432.82","tts":"1,461.77","deal_bas_r":"1,447.3","bkpr":"1,447","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,447","kftc_deal_bas_r":"1,447.3","cur_nm":"영국 파운드"},{"result":1,"cur_unit":"HKD","ttb":"135.75","tts":"138.5","deal_bas_r":"137.13","bkpr":"137","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"137","kftc_deal_bas_r":"137.13","cur_nm":"홍콩 달러"},{"result":1,"cur_unit":"IDR(100)","ttb":"7.82","tts":"7.97","deal_bas_r":"7.9","bkpr":"7","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"7","kftc_deal_bas_r":"7.9","cur_nm":"인도네시아 루피아"},{"result":1,"cur_unit":"ITL(100)","ttb":"0","tts":"0","deal_bas_r":"66.46","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"66.46","cur_nm":"이태리 리라"},{"result":1,"cur_unit":"JPY(100)","ttb":"941.53","tts":"960.56","deal_bas_r":"951.05","bkpr":"951","yy_efee_r":"0.96833","ten_dd_efee_r":"0.0242","kftc_bkpr":"951","kftc_deal_bas_r":"951.05","cur_nm":"일본 옌"},{"result":1,"cur_unit":"KRW","ttb":"0","tts":"0","deal_bas_r":"1","bkpr":"1","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1","kftc_deal_bas_r":"1","cur_nm":"한국 원"},{"result":1,"cur_unit":"KWD","ttb":"3,509.87","tts":"3,580.78","deal_bas_r":"3,545.33","bkpr":"3,545","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"3,545","kftc_deal_bas_r":"3,545.33","cur_nm":"쿠웨이트 디나르"},{"result":1,"cur_unit":"MYR","ttb":"262.09","tts":"267.38","deal_bas_r":"264.74","bkpr":"264","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"264","kftc_deal_bas_r":"264.74","cur_nm":"말레이지아 링기트"},{"result":1,"cur_unit":"NLG","ttb":"0","tts":"0","deal_bas_r":"583.97","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"583.97","cur_nm":"네델란드 길더"},{"result":1,"cur_unit":"NOK","ttb":"129.44","tts":"132.05","deal_bas_r":"130.75","bkpr":"130","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"130","kftc_deal_bas_r":"130.75","cur_nm":"노르웨이 크로네"},{"result":1,"cur_unit":"NZD","ttb":"752.76","tts":"767.97","deal_bas_r":"760.37","bkpr":"760","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"760","kftc_deal_bas_r":"760.37","cur_nm":"뉴질랜드 달러"},{"result":1,"cur_unit":"SAR","ttb":"282.84","tts":"288.55","deal_bas_r":"285.7","bkpr":"285","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"285","kftc_deal_bas_r":"285.7","cur_nm":"사우디 리얄"},{"result":1,"cur_unit":"SEK","ttb":"129.3","tts":"131.91","deal_bas_r":"130.61","bkpr":"130","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"130","kftc_deal_bas_r":"130.61","cur_nm":"스웨덴 크로나"},{"result":1,"cur_unit":"SGD","ttb":"793.06","tts":"809.09","deal_bas_r":"801.08","bkpr":"801","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"801","kftc_deal_bas_r":"801.08","cur_nm":"싱가포르 달러"},{"result":1,"cur_unit":"THB","ttb":"32.57","tts":"33.22","deal_bas_r":"32.9","bkpr":"32","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"32","kftc_deal_bas_r":"32.9","cur_nm":"태국 바트"},{"result":1,"cur_unit":"USD","ttb":"1,056.23","tts":"1,077.56","deal_bas_r":"1,066.9","bkpr":"1,066","yy_efee_r":"2.69465","ten_dd_efee_r":"0.07485","kftc_bkpr":"1,071","kftc_deal_bas_r":"1,071.4","cur_nm":"미국 달러"},{"result":1,"cur_unit":"XOF","ttb":"0","tts":"0","deal_bas_r":"1.9618","bkpr":"0","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"0","kftc_deal_bas_r":"1.9618","cur_nm":"씨에프에이 프랑(비씨에이오)"}]

            string strURL = "https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=" +  
                            "SerialKey Input&searchdate=" + 
                            dtp.Value.ToString("yyyyMMdd") + "&data=" + 
                            "AP01";

            HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(strURL);
            hwr.ContentType = "application/json";
            //hwr.Method = "GET";

            using (HttpWebResponse hwrResult = hwr.GetResponse() as HttpWebResponse)
            {
                Stream sr = hwrResult.GetResponseStream();
                //JSON 파싱...
                using (StreamReader srd = new StreamReader(sr))
                {
                    string strResult = srd.ReadToEnd();
                    string strErr = "";
                    if (!StringToJson(strResult, ref strErr))
                    {
                        MessageBox.Show(strErr, "확 인" , MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    }
                }//using StreamReader

                sr.Close();
                hwrResult.Close();

            }//using HttpWebResponse

        }

        
    }
}

아래의 그림과 같이 Button Click Event 를 살펴 보면

strURL 부분의 지워진 부분은 각자 한국 수출입 은행에서 받은 인증키를 입력 하면 됩니다. 

https://kdsoft-zeros.tistory.com/247

 

[C#] [공공데이터] 한국 수출입 은행 Open API 사용하기전 가입 신청...

https://www.koreaexim.go.kr/site/main/index001 한국수출입은행 www.koreaexim.go.kr 네이버 에서 한국 수출입 은행 으로 검색 하시면 위 화면과 같이 홈페이지에 접속 할 수 있습니다. 홈페이지에 접속 후 정..

kdsoft-zeros.tistory.com

인증키를 입력 후 한국수출입은행 응답을 보면 주석에서 보는거와 같이 Json 형태로 응답이 오게

됩니다.

 

https://kdsoft-zeros.tistory.com/97

 

[C#] Json File Write & Read 예제

* C# Json 파일 읽기 쓰기 예제... (System.Net.Json.dll) 파일 참조 위 첨부된 파일을 다운 받아 dll 참조 추가를 해줍니다. 오른쪽에 솔루션 탐색기가 나타나지 않는다면, 상단 메뉴 (보기) -> (솔루션탐색

kdsoft-zeros.tistory.com

 

 

* 예제 결과

 

Result

 

반응형
반응형

https://www.koreaexim.go.kr/site/main/index001

 

한국수출입은행

 

www.koreaexim.go.kr

 

 

네이버 에서 한국 수출입 은행 으로 검색 하시면 위 화면과 같이 홈페이지에 접속 할 수 있습니다.

홈페이지에 접속 후 정보공개 -> Open API 메뉴 클릭

 

현재 환율 API 를 클릭 해서 따라 들어 가게 되면 아래의 화면과 같이 인증키 발급 신청 화면을 볼 수

있습니다. 인증키 발급 신청을 먼저 하신 뒤에 인증키를 받은 후 잘 보관 및 입력 해 두었다가 나중에

환율 정보를 가져 올 때 사용.

 

 

반응형
반응형

*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

 

반응형
반응형

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

 

Main

- 사용한 컨트롤 : 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)

 

[C#] [API] 컨트롤 (Control) 모서리 둥글게 만들기

* C# API 이용 컨트롤 (Control) 모서리 둥글게 만들기 예제... 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Draw..

kdsoft-zeros.tistory.com

 

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

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

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

 

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

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

 

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

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

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

 

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

 

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

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

kdsoft-zeros.tistory.com

 

반응형
반응형

 

* 공공데이터를 활용 하여 코로나 확진자 및 현황을 알아 보겠습니다. 먼저 앞서 작업을 해야 될 부분이 있습니다.

공공데이터포털 (data.go.kr)

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

공공데이터 포털 사이트에 가셔서 회원가입을 먼저 해야 진행 할 수 있는데요 

 

오른쪽 상단에 보시면 회원 가입을 클릭 하셔서 진행 하시면 될 거 같습니다.

회원 가입이 되고 로그인을 하시면 위와 같은 메인 화면에서 "코로나" 라고 검색 하시면 됩니다. 

그럼 아래의 그림과 같이 

 

 

스크롤을 내리셔서 오픈 API 로 이동 합니다.

공공데이터활용지원센터_ 보건복지부 코로나19 감염 현황 이라는 메뉴를 클릭 하셔서 들어 가시게 되면

 

오른쪽에 활용 신청을 할 수 있습니다.

 

 

그 다음 진행 해야 될 부분은 인증키를 발급 받으셔야 되는데 처음과 같은 메인 화면에서

로그인 -> 마이페이지 로 이동 하시면 위 그림과 같이 왼쪽 메뉴에 오픈API 를 클릭 하셔서 

인증키 발급 현황으로 가시면 됩니다. 처음 회원 가입을 했다면 당연히 인증키가 없기 때문에

발급 하시면 바로 인증키가 생성 되게 됩니다.

 

두번째로 인증키를 발급 받으셨다면 아까처럼 활용 신청이 완료 되면 위 그림과 같이 빨간색 테두리에

감염 현황 이라고 메뉴가 뜨게 됩니다. 클릭 하셔서 들어 가시면 아래의 그림과 같이 상세보기로 들어 가게

됩니다.

 

 

상세 보기에서 인증키 발급을 완료 하셨으면 빨간색 테두리에 일반 인증키 두 개가 같이 뜨게 됩니다.

우리는 Encoding 인증키를 사용 하여 코로나 감염 현황을 가져 올 것이기 때문에 Decoding은 잠시 놔 주면

되겠습니다.

 

* 인증키 발급이 완료 된 후 2~3 시간 경과 후 사용이 가능 합니다.

 

여기까지 완료 하셨다면 준비 과정은 끝났습니다. 위 그림과 같이 상세 보기 -> 기본 정보 -> 상세 설명 을 클릭 하여

보면 아래의 그림과 같이 요청 변수 출력 결과 등등 필드명들을 상세히 볼 수 있습니다.

 

 

[C#] [공공데이터] 코로나 확진자 현황 :: 삽질하는 개발자... (tistory.com)

 

[C#] [공공데이터] 코로나 확진자 현황

*C# 공공데이터를 이용한 코로나 확진자 현황... - 사용한 컨트롤 : Label 17 개 , Panel 7 개 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using S..

kdsoft-zeros.tistory.com

 

반응형

+ Recent posts