Lala's tower

엑셀과 웹API와의 만남 1

엑셀과 웹API와의 만남 1

2024-06-04 23:10:00

엑셀과 웹API가 만나면 놀라운 시너지가 발생합니다. 엑셀의 매크로 기능으로 웹API를 호출한 결과를 저장할 수 있습니다. 웹API 중 이름으로 성별을 추정해주는 무료API(횟수 제한은 있음)를 사용하여 실습을 해보겠습니다.

엑셀과 웹API 실습 실행 결과

엑셀과 웹API를 위한 매크로 기능

자동화하려면 매크로 기능 활용이 중요합니다. 매크로의 기능 중에도 웹 API를 호출 가능하다는 것을 아시는지요? 이것을 활용하면 놀라운 시너지가 발생합니다. 오늘은 그 시작으로 가볍게 이름으로 나이를 자동 추출해보겠습니다.

파이썬코드를 이용한 이름으로 나이 판단하는 설명은 아래 링크의 글을 참고하시면 됩니다.

이름으로 성별,나이,나라 판단하는 Open API 파이썬 예제

위 링크의 API를 활용하여 VBA스크립트를 작성해야 합니다.
아래 코드를 엑셀에서 Alt+F11을 눌러 VBA편집기를 실행합니다.
메뉴/삽입/모듈을 선택합니다.
아래 코드를 복붙하고 VBA편집기는 닫습니다.
엑셀에 돌아와서 A열에 이름을 세로로 기입합니다.
Alt+F8을 눌러 매크로 실행 창을 열고 GetGender를 선택, 실행합니다.

B열에 성별이 기입되는 것이 보이시면 성공~!

이제 시작입니다.
이것을 응용하면 엑셀과 웹API로 많은 것이 가능해집니다.
DART API를 이용한 재무제표 자동생성, 챗GPT API를 이용한 문장 생성, 이미지 인식... 틈 나는대로 하나씩 정리해보겠습니다.

Sub GetGender()
    Dim http As Object
    Dim url As String
    Dim params As String
    Dim response As String
    Dim data As String
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim name As String
    Dim gender As String
    
    ' Create XMLHTTP object 엑셀과 웹API
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    ' Set the base URL of the API
    url = "https://api.genderize.io/"

    ' Reference the active worksheet
    Set ws = ThisWorkbook.Sheets(1)

    ' Find the last row with data in column A
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' Loop through each name in column A
    For i = 1 To lastRow
        name = ws.Cells(i, 1).Value
        
        ' Construct the request URL with parameters
        params = "name=" & name

        ' Open the connection
        http.Open "GET", url & "?" & params, False

        ' Send the request
        http.Send

        ' Get the response text
        response = http.responseText

        ' Parse the JSON response (simple parsing for demonstration)
        If InStr(response, """gender"":") > 0 Then
            gender = Mid(response, InStr(response, """gender"":""") + 10)
            gender = Left(gender, InStr(gender, """") - 1)
        Else
            gender = "Unknown"
        End If
        
        ' Write the result in the column next to the name
        ws.Cells(i, 2).Value = gender
    Next i
    
    ' Clean up
    Set http = Nothing

    MsgBox "Gender lookup completed!"
End Sub

Visual Basic for Applications