API 오류가 납니다 ㅠ

VBA
작성자
뉴비엑셀러
작성일
2023-03-03 19:27
조회
91
엑셀버전 : 엑셀2016

운영체제 : 윈도우10

#If VBA7 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
#Else
    Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As Long)
#End If
 
Function getSolCalInfo(y1 As Integer, m1 As Integer, d1 As Integer, n As String) As Date
 
    Dim OHTTP As WinHttpRequest
    Dim s_URL, C_Key As String
    Dim OXML As DOMDocument60
    Dim NodeList As IXMLDOMNodeList
    Dim NodeCell As IXMLDOMNode
    Dim NodeChild As IXMLDOMNode
    Dim y2 As Integer, m2 As Integer, d2 As Integer
    Dim tryCnt As Integer
 
    C_Key = [인증키]
 
    s_URL = "http://apis.data.go.kr/B090041/openapi/service/LrsrCldInfoService/getSolCalInfo?" & _
            "lunYear=" & y1 & _
            "&lunMonth=" & m1 & _
            "&lunDay=" & d1 & _
            "&ServiceKey="
 
    Set OHTTP = New WinHttpRequest
 
        OHTTP.Open "Get", s_URL & C_Key
        OHTTP.send
 
        If OHTTP.Status = 200 Then
 
            Set OXML = New DOMDocument60
 
            With OXML
                .LoadXML (OHTTP.responseText)
                Set NodeCell = .SelectSingleNode("response/body/items/item")
            End With
 
            If NodeCell Is Nothing Then
                Debug.Print n & " " & DateSerial(y1, m1, d1)
            Else
                With NodeCell
                    y2 = .SelectSingleNode("solYear").Text
                    m2 = .SelectSingleNode("solMonth").Text
                    d2 = .SelectSingleNode("solDay").Text
                End With
            End If
 
        End If
 
        getSolCalInfo = DateSerial(y2, m2, d2)
 
End Function

안녕하십니까.
한국천문연구원에서 제공하는 오픈API로 음력 날짜를 양력 날짜로 변경해서 돌려주는 코드를 작성해봤는데요.
작동이 잘 되다가 안되다 하는 이유를 찾지 못해서 질문드립니다.

[출처] Excel VBA로 Open API 정보 가져오기 (국립중앙도서관 서지정보)|작성자 잔마왕
'https://blog.naver.com/550sn/222226473357 << 여기 블로그 참고해서 만들었고

 

<< 오류는 이런식으로 resultCode는 00 정상으로 오는데 items 내부에 있어야하는 데이터가 하나도 안들어 있습니다..

혹시 뭐가 문제인지 아시는분 계시면 답변 부탁드립니다 ㅠ

 

https://www.data.go.kr/data/15012679/openapi.do << 오픈API제공 url입니다.

스크랩
공유
전체 6

  • 2023-03-04 12:15

    @뉴비엑셀러 님 Late Binding으로 수정하고, 윤달을 감안하여 수정한 내용은 아래와 같습니다.

    =getSolCalInfo(2023, 2, 15)

    음력 윤달인 날짜는 아래처럼 사용합니다.

    =getSolCalInfo(2023, 2, 15, "윤")

     

    Option Explicit
    
    #If VBA7 Then
        Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
    #Else
        Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As Long)
    #End If
     
    Function getSolCalInfo(y1 As Integer, m1 As Integer, d1 As Integer, Optional n As String) As Variant
     
        Dim OHTTP As Object, OXML As Object, NodeCell As Object, NodeChild As Object
        Dim s_URL As String, C_Key As String
        Dim y2 As Integer, m2 As Integer, d2 As Integer
     
        C_Key = [인증키]
     
        s_URL = "http://apis.data.go.kr/B090041/openapi/service/LrsrCldInfoService/getSolCalInfo?" & _
                "lunYear=" & y1 & _
                "&lunMonth=" & Format(m1, "00") & _
                "&lunDay=" & Format(d1, "00") & _
                "&ServiceKey="
     
        Set OHTTP = CreateObject("WINHTTP.WinHTTPRequest.5.1")
     
        OHTTP.Open "Get", s_URL & C_Key
        OHTTP.send
    
        If OHTTP.Status = 200 Then
    
            Set OXML = CreateObject("MSXML2.DOMDocument.6.0")
    
            With OXML
                .LoadXML (OHTTP.responseText)
                Set NodeCell = .SelectSingleNode("response/body/items")
                If NodeCell Is Nothing Then
                    getSolCalInfo = CVErr(xlErrNA)
                    Debug.Print DateSerial(y1, m1, d1) & n & ":ResponseText 오류"
                    Exit Function
                End If
            End With
            
            If InStr(1, n, "윤", vbTextCompare) = 0 Then
                Set NodeChild = NodeCell.FirstChild
            Else
                If NodeCell.ChildNodes.Length > 1 Then
                    Set NodeChild = NodeCell.LastChild
                Else
                    getSolCalInfo = CVErr(xlErrNA)
                    Debug.Print DateSerial(y1, m1, d1) & n & ":윤달 아님"
                    Exit Function
                End If
            End If
            With NodeChild
                y2 = .SelectSingleNode("solYear").Text
                m2 = .SelectSingleNode("solMonth").Text
                d2 = .SelectSingleNode("solDay").Text
                getSolCalInfo = DateSerial(y2, m2, d2)
            End With
        Else
            Debug.Print DateSerial(y1, m1, d1) & n & ": Response Not OK "
            getSolCalInfo = CVErr(xlErrValue)
        End If
    
    End Function
    

     

    첨부파일 : 음력을양력으로샘플.xlsm


  • 2023-03-03 19:55

    @뉴비엑셀러 님 API문서를 읽어 보시고

    입력할 자리수를 확인해 보세요

    연도 4자리 월일은 각각 2자리 입니다


    • 2023-03-03 23:01

      @원조백수 님 데이터는 맞게 넣었는데요 ㅠㅠ

      y1=2022, m1=12, d1=22 넣은건 정상적으로 받아오는데 다음에 넣은 y1=2022, m1=09, d1=20은 저렇게 비어서 오네요 ㅠ

      근데 이것도 될때 있고 안될때 있고 그럽니다 ㅠㅠ


      • 2023-03-04 11:32
        채택된 답변

        @뉴비엑셀러 님 m1, d1이 interger인데, 거기에 09를 배치하면 9가 되지 않을까요?

        아래처럼 수정해 보세요.

            s_URL = "http://apis.data.go.kr/B090041/openapi/service/LrsrCldInfoService/getSolCalInfo?" & _
                    "lunYear=" & y1 & _
                    "&lunMonth=" & Format(m1, "00") & _
                    "&lunDay=" & Format(d1, "00") & _
                    "&ServiceKey="

         


        • 2023-03-06 12:13

          @원조백수 님 그러네요..integer면 0이 사라지는데 그걸 생각 못하고 한참을 헤맸네요 ㅠㅠㅠ 감사합니다.


  • 2023-03-06 17:11

    @뉴비엑셀러 님 무언가..따라갈 수 없는 영역이다...


전체 10,226
번호 카테고리 제목 작성자 작성일 추천 조회
알림
23년 마지막, "엑셀 기초반" 챌린지! - 3주 완성 특별 스터디 모집 (~3/17(금) 까지) (39)
오빠두엑셀 | 2023.03.11 | 추천 34 | 조회 4508
오빠두엑셀 2023.03.11 34 4508
공지사항 공지사항
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (149)
오빠두엑셀 | 2021.10.28 | 추천 188 | 조회 10768
오빠두엑셀 2021.10.28 188 10768
53640 문서서식
New 날짜 입력과 표시가 안되는군요 첨부파일
zion | 03:42 | 추천 0 | 조회 17
zion 03:42 - 17
53637 기능/도구
New 숨기기 취소 안됨
Jose | 01:18 | 추천 0 | 조회 14
Jose 01:18 - 14
53633 기능/도구
New 증감 셀서식이 적용된 숫자셀과 문자셀을 &로 합칠 수 있나요?
마르티즈 | 2023.03.27 | 추천 0 | 조회 21
마르티즈 2023.03.27 - 21
53628 문서서식
New 테두리 선 -기본색을 회색으로 바꿀 수는 없을까요? 첨부파일
cynicalH | 2023.03.27 | 추천 0 | 조회 25
cynicalH 2023.03.27 - 25
53620 함수/공식
New 다중 함수 문의 엑셀파일첨부파일 (2)
부자되자 | 2023.03.27 | 추천 0 | 조회 26
부자되자 2023.03.27 - 26
53612 구글시트
New IMPORTRANGE 함수로 동일페이지 다수 탭의 데이터 가져오기 (1)
허허 | 2023.03.27 | 추천 0 | 조회 28
허허 2023.03.27 - 28
53604 함수/공식
New countifs 정렬 시 걸려있는 참조셀이 뒤죽박죽이 됩니다. 엑셀파일첨부파일 (2)
희상 | 2023.03.27 | 추천 0 | 조회 30
희상 2023.03.27 - 30
53599 피벗테이블
New 달성율을 피벗테이블로 추출하기 첨부파일
ybt | 2023.03.27 | 추천 0 | 조회 26
ybt 2023.03.27 - 26
53598 함수/공식
New 특정 셀이 특정 값일 경우 범위내 셀에서 몇번째 셀부터 마지막까지의 셀 합계를 구하는 수식 문의 엑셀파일 (2)
오준범 | 2023.03.27 | 추천 0 | 조회 25
오준범 2023.03.27 - 25
53594 VBA
New 선택한 영역에 원하는 날짜 자동으로 넣는 매크로
뚜루루루뚜 | 2023.03.27 | 추천 0 | 조회 26
뚜루루루뚜 2023.03.27 - 26
53592 함수/공식
New 엑셀빈칸채우기(아래값) 엑셀파일 (2) 답변완료
chloe75 | 2023.03.27 | 추천 0 | 조회 37
chloe75 2023.03.27 - 37
53587 함수/공식
New 특정 조건의 수 분리하기 엑셀파일
엑셀초보랍니다 | 2023.03.27 | 추천 0 | 조회 37
엑셀초보랍니다 2023.03.27 - 37
53583 함수/공식
New 문자 자동완성 문의입니다. 엑셀파일 (2)
안녕 | 2023.03.27 | 추천 0 | 조회 32
안녕 2023.03.27 - 32
53581 VBA
New 재고관리 프로그램 달력 매크로 드랍다운 추가 엑셀파일첨부파일
kans**** | 2023.03.27 | 추천 0 | 조회 39
kans**** 2023.03.27 - 39
53580 차트/그래프
New y축 그림에 %를 넣고 싶습니다 엑셀파일 (1)
ch**** | 2023.03.27 | 추천 0 | 조회 37
ch**** 2023.03.27 - 37
53573 함수/공식
New max함수, if함수 사용하여 2가지 조건에 맞는 최대/최소값 나타내주고 싶습니다. (첨부파일 있음) 엑셀파일 (2)
프리한하루 | 2023.03.27 | 추천 0 | 조회 32
프리한하루 2023.03.27 - 32
53571 함수/공식
New if함수와v룩업함수 적용 엑셀파일 (1)
이유진 | 2023.03.27 | 추천 0 | 조회 32
이유진 2023.03.27 - 32
53569 함수/공식
New 셀 내용 변경 시 서식 등으로 표시할 수 있는 함수 있을까요? (VBA 제외)
맨체스터 | 2023.03.27 | 추천 0 | 조회 25
맨체스터 2023.03.27 - 25
53566 기능/도구
New Mac Office excel 사용 단축키 첨부파일
랄라라 | 2023.03.27 | 추천 0 | 조회 16
랄라라 2023.03.27 - 16
53563 함수/공식
New FILTER 함수 사용법 엑셀파일첨부파일 (4) 답변완료
만식이 | 2023.03.27 | 추천 0 | 조회 36
만식이 2023.03.27 - 36
53562 함수/공식
New 엑셀 초보자 입니다. 함수를 어떻게 적용해야 할까요? 첨부파일 (5)
jjan**** | 2023.03.27 | 추천 0 | 조회 37
jjan**** 2023.03.27 - 37
53559 파워쿼리/피벗
New [파워쿼리] 연도, 월로 분할하고 싶은데 도와주세요~ 첨부파일 (1)
wisejo**** | 2023.03.27 | 추천 0 | 조회 32
wisejo**** 2023.03.27 - 32
53557 피벗테이블
New 피벗 차트 막대그래프 색상 년도별 변경 가능 여부 엑셀파일첨부파일 (2) 답변완료
명곰 | 2023.03.27 | 추천 0 | 조회 37
명곰 2023.03.27 - 37
53551 VBA
New 파일로 저장할 때 경로 변경 (2) 답변완료
fabikim | 2023.03.27 | 추천 0 | 조회 23
fabikim 2023.03.27 - 23
53543 함수/공식
New 매크로 대신 함수로 자료찾기 만들고자 합니다. 엑셀파일
느림보팬더 | 2023.03.27 | 추천 0 | 조회 54
느림보팬더 2023.03.27 - 54
53500 함수/공식
New (제발도와주세요) 업체와 저희 업체에서 사용 하는 발주#가 중복이여도 불러오게 하고싶어요(중첩함수필요해보임) 엑셀파일첨부파일 (1)
govl77 | 2023.03.26 | 추천 0 | 조회 52
govl77 2023.03.26 - 52
53490 함수/공식
New 함수사용법에 대한 문의 (5)
광개토태왕 | 2023.03.26 | 추천 0 | 조회 41
광개토태왕 2023.03.26 - 41
53450 VBA
New Private Sub Workbook_Open() 자동 실행이 안됩니다 엑셀파일 (2) 답변완료
니모앤칩스 | 2023.03.25 | 추천 0 | 조회 35
니모앤칩스 2023.03.25 - 35
53447 함수/공식
New 데이터 세로 쌓기를 위해서 일정량의 데이터를 반복해서 아래로 붙여 넣을 때 쓸 수 있는 팁을 좀 알려 주세요 (3)
절륜 | 2023.03.25 | 추천 0 | 조회 49
절륜 2023.03.25 - 49
53434 함수/공식
New 데이터 유효성 검사에서 바이트수 제한하는 법 문의드립니다. (4) 답변완료
달맞이꽃 | 2023.03.25 | 추천 0 | 조회 39
달맞이꽃 2023.03.25 - 39