본문 바로가기
C#

[C#] 공공 데이터 오픈 API 사용(제대 군인 채용 정보 얻기)

by Jcoder 2021. 1. 2.

제대 군인 채용 정보 얻기 초기화면
제대 군인 채용 정보 얻기 결과 1
제대 군인 채용 정보 얻기 결과 2

 

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

 

공공데이터 포털

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

www.data.go.kr

국가보훈처 보훈대상자 취업정보 : 오픈API 상세 | 공공데이터포털 (data.go.kr)

 

공공데이터 포털

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

www.data.go.kr

국가보훈처 오픈 API : 국가보훈처 (mpva.go.kr)

 

국가보훈처

category string 직종을 아래 코드로 분류합니다. (입력이 없을 시 직종전체) 군관련직위 = '1' 사무관리,경영,회계,금융 = '2' 교육,교사,강사 = '3' 법률,경찰,보안,경비 = '4' 보건,의료,사회,복지 = '5' 문

www.mpva.go.kr

요청 Url, Parameter
응답 데이터 형식

 

1. NET 5

2. HttpClient, XML

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace jobsearchxml
{
   public partial class Form1 : Form
   {
      DataTable dataTable = null;

      public Form1()
      {
         InitializeComponent();

         button1.Click += btn_SearchAsync;

         dataTable = new DataTable();
         dataTable.Columns.Add("순서", typeof(int));
         dataTable.Columns.Add("회사명", typeof(string));
         dataTable.Columns.Add("바로가기", typeof(string));
         dataTable.Columns.Add("공고", typeof(string));
         dataTable.Columns.Add("지역", typeof(string));
         dataTable.Columns.Add("급여", typeof(string));
         dataTable.Columns.Add("등록일자", typeof(string));
         dataTable.Columns.Add("마감일자", typeof(string));
         dataGridView1.DataSource = dataTable;
      }

      private async void btn_SearchAsync(object sender, EventArgs e)
      {
         textBox1.Clear();
         dataTable.Rows.Clear();
         using (var httpClient = new HttpClient())
         {
            string requestUrl = "https://vnet.go.kr/empn/jobsearchxml.do?" + Category + "&" + Jobtype + "&" + Location;
            textBox1.Text += requestUrl + Environment.NewLine;
            // 비동기 요청
            var responsestream = await httpClient.GetStreamAsync(requestUrl);

            // 응답 데이터 스트림 -> XmlDocumnet
            XmlDocument document = new XmlDocument();
            using (Stream stream = responsestream)
            {
               document.Load(stream);
            }

            // 총 카운트
            int listCnt = 0;
            XmlNode listCntNode = document.SelectSingleNode("/root/total_count");
            listCnt = Convert.ToInt32(listCntNode.InnerText);
            textBox1.Text += listCnt.ToString();

            // 카운트가 0 이상일 때만
            if (listCnt > 0)
            {
               // xml 파싱 후 DataGridView에 추가
               XmlNodeList xmlNodeList = document.GetElementsByTagName("item");
               int idx = 1;
               foreach (XmlNode xmlitem in xmlNodeList)
               {
                  dataTable.Rows.Add(idx, xmlitem["company"].InnerText, xmlitem["link"].InnerText, xmlitem["contents"].InnerText, xmlitem["area"].InnerText, xmlitem["pay"].InnerText, xmlitem["regdate"].InnerText, xmlitem["enddate"].InnerText);
                  idx++;
               }
            }
         }
      }

      private void Form1_Load(object sender, EventArgs e)
      {
         // 직종 추가
         comboBox1.Items.Clear();
         comboBox1.Items.Add("전체");
         comboBox1.Items.Add("군관련직위");
         comboBox1.Items.Add("사무관리,경영,회계,금융");
         comboBox1.Items.Add("교육,교사,강사");
         comboBox1.Items.Add("법률,경찰,보안,경비");
         comboBox1.Items.Add("보건,의료,사회,복지");
         comboBox1.Items.Add("문화,예술,방송,디자인");
         comboBox1.Items.Add("운정,운송,여행,영업판매");
         comboBox1.Items.Add("건설,건축,토목,시설관리");
         comboBox1.Items.Add("기계,재료,화학,섬유");
         comboBox1.Items.Add("전기,전자,항공,조선");
         comboBox1.Items.Add("IT,전산,정보통신");
         comboBox1.Items.Add("음식,식품,단순노무,해외일자리");
         comboBox1.SelectedIndex = 0;

         // 일자리 추가
         comboBox2.Items.Clear();
         comboBox2.Items.Add("전체");
         comboBox2.Items.Add("군관련직위");
         comboBox2.Items.Add("민간부문");
         comboBox2.Items.Add("공공부문");
         comboBox2.Items.Add("사회적");
         comboBox2.SelectedIndex = 0;

         // 근무지 추가
         comboBox3.Items.Clear();
         comboBox3.Items.Add("전체");
         comboBox3.Items.Add("서울");
         comboBox3.Items.Add("경기");
         comboBox3.Items.Add("인천");
         comboBox3.Items.Add("부산");
         comboBox3.Items.Add("대구");
         comboBox3.Items.Add("광주");
         comboBox3.Items.Add("대전");
         comboBox3.Items.Add("울산");
         comboBox3.Items.Add("세종");
         comboBox3.Items.Add("강원");
         comboBox3.Items.Add("경남");
         comboBox3.Items.Add("경북");
         comboBox3.Items.Add("전남");
         comboBox3.Items.Add("전북");
         comboBox3.Items.Add("충남");
         comboBox3.Items.Add("충북");
         comboBox3.Items.Add("제주");
         comboBox3.Items.Add("해외");
         comboBox3.SelectedIndex = 0;
      }

      private string Category
      {
         get
         {
            string result = "category=";
            /*
               군관련직위 = '1'
               사무관리,경영,회계,금융 = '2'
               교육,교사,강사 = '3'
               법률,경찰,보안,경비 = '4'
               보건,의료,사회,복지 = '5'
               문화,예술,방송,디자인 = '6'
               운정,운송,여행,영업판매 = '7'
               건설,건축,토목,시설관리 = '8'
               기계,재료,화학,섬유 = '9'
               전기,전자,항공,조선 = '10'
               IT,전산,정보통신 = '11'
               음식,식품,단순노무,해외일자리 = '12'
             */
            switch (comboBox1.SelectedIndex)
            {
               case 0:
                  result = string.Empty;
                  break;
               default:
                  result += comboBox1.SelectedIndex.ToString();
                  break;
            }
            return result;
         }
      }

      private string Jobtype
      {
         get
         {
            string result = "jobtype=";
            /*
               군관련직위일자리 = '1'
               민간부문일자리 = '2'
               공공부문일자리 = '3'
               사회적일자리 = '4'
               입력이 없을 시 전체직종
             */
            switch (comboBox2.SelectedIndex)
            {
               case 0:
                  result = string.Empty;
                  break;
               default:
                  result += comboBox2.SelectedIndex.ToString();
                  break;
            }
            return result;
         }
      }

      private string Location
      {
         get
         {
            string result = "location=";
            /*
               서울 = '1'
               경기 = '2'
               인천 = '3'
               부산 = '4'
               대구 = '5'
               광주 = '6'
               대전 = '7'
               울산 = '8'
               세종 = '9'
               강원 = '10'
               경남 = '11'
               경북 = '12'
               전남 = '13'
               전북 = '14'
               충남 = '15'
               충북 = '16'
               제주 = '17'
               해외 = '18'
               입력이 없을 시 전체직종
             */
            switch (comboBox3.SelectedIndex)
            {
               case 0:
                  result = string.Empty;
                  break;
               default:
                  result += comboBox3.SelectedIndex.ToString();
                  break;
            }
            return result;
         }
      }
   }
}

'C#' 카테고리의 다른 글

[C#] PDF 읽기  (0) 2021.02.27
[C#] CPU, RAM, HDD 사용량 및 OS Version, Last boottime 확인  (0) 2021.02.10
[C#] 카카오페이지 크롤링  (0) 2021.01.01
[C#] gRPC 와 LiteDB 사용  (0) 2020.12.15
[C#] TCP Listener을 이용한 비동기  (2) 2020.12.04