Programming/VBA(Excel)

VBA 엑셀에 공공데이터 휴일정보 읽어오기

juhpark 2024. 5. 2. 21:55

 

휴일정보가 필요할때 공공데이터(www.data.go.kr)에서 API를 사용하여 데이터를 읽어오는 방법을 설명한다.

 

공공데이터 URL확인 및 API 키 생성

휴일정보를 불러오기 위한 API를 검색하고, 해당 API신청을 완료하여, 생성된 API를 발급 받는다. 

 

공공데이터 포털

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

www.data.go.kr

 

회원가입을 하고, 로그인을 한다음, 검색창에서 "공휴일" 로 검색을 하면, OPEN API가 9개 정도 검색이 된다. 그중에 "한국천문연구원_특일 정보"를 신청하면, 활용 목적 등 간단한 정보만 입력하고 나면, 신청이 완료된다.

신청이 완료되면, 발급된 API키는 2년 정도 사용이 가능한 것 같다. 

신청완료된 화면에서 상세 화면에 들어가면 해당 API주소와 파라메터,  API 키 등등 사용하기 위한 정보들을 바로 조회해 볼수 있다.

 

엑셀에서 OPEN API 데이터 조회하기

이제 엑셀 VBA에서 해당 데이터를 조회해 보자

' 변수선언
Dim oXml                As MSXML2.DOMDocument60
Dim oSeqNodes, oSeqNode As IXMLDOMNode
Dim URL                 As String
Dim strKey              As String

' 객체생성    
Set xml = CreateObject("MSXML2.XMLHTTP")
Set oXml = New MSXML2.DOMDocument60
strKey = "GvjP2ed8s5KYm5jxqG0UON5rZ30wfH%2BRZo...."  ' 본인이 발급받은 키 입력
    
URL = "http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getHoliDeInfo?"
URL = URL & "solYear=2024&solMonth=05&serviceKey=" & strKey

' URL 호출 및 결과값 획득
xml.Open "GET", URL, False
xml.send
strXml = xml.responseText

' XML 로드 및 데이터만 조회
oXml.LoadXML strXml
Set oSeqNodes = oXml.SelectNodes("//item")

' 루프를 돌면서 공휴일 데이터를 특정 위치에 저장
idx = 0
For Each oSeqNode In oSeqNodes
    DoEvents
    If oSeqNode.SelectSingleNode("isHoliday").Text = "N" Then
        GoTo Continue
    End If
    lngD = oSeqNode.SelectSingleNode("locdate").Text
    Sheets("calendar").Range("A" & idx) = DateValue(Left(lngD, 4) & "-" & Mid(lngD, 5, 2) & "-" & Right(lngD, 2))
    Sheets("calendar").Range("B" & idx) = oSeqNode.SelectSingleNode("dateName").Text
    Sheets("calendar").Range("C" & idx) = oSeqNode.SelectSingleNode("isHoliday").Text
    Sheets("calendar").Range("D" & idx) = WeekdayName(Weekday(Sheets("calendar").Range("A" & idx), vbSunday), True)
    idx = idx + 1
Continue:
Next

 

위 스크립트를 실행하면 아래와 같이 데이터를 조회해 올 수 있다. 2024년 5월 공휴일 정보만 불러온 결과다.