휴일정보가 필요할때 공공데이터(www.data.go.kr)에서 API를 사용하여 데이터를 읽어오는 방법을 설명한다.
공공데이터 URL확인 및 API 키 생성
휴일정보를 불러오기 위한 API를 검색하고, 해당 API신청을 완료하여, 생성된 API를 발급 받는다.
회원가입을 하고, 로그인을 한다음, 검색창에서 "공휴일" 로 검색을 하면, 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월 공휴일 정보만 불러온 결과다.
'Programming > VBA(Excel)' 카테고리의 다른 글
VBA로 엑셀 시트 보호하기(Protect, Unprotect) (0) | 2024.04.18 |
---|---|
엑셀 리본바의 버튼 컨트롤 상태(Pressed, Visible) 관리하기 (2) | 2024.04.10 |
엑셀의 원하는 sheet를 변수에 담기 (0) | 2023.07.12 |
엑셀의 리본바를 마음대로 변경해 보자 (0) | 2023.07.12 |
엑셀의 개발자 도구 사용해보기 (0) | 2023.07.11 |