본문 바로가기
카테고리 없음

Gemini API를 활용한 Excel VBA를 통한 자동 텍스트 처리

by 퍼포먼스마케팅코더 2024. 1. 29.
반응형

서론

Gemini API를 사용하여 텍스트에 대한 HTTP 요청을 보내고 응답을 처리하는 Excel VBA 함수의 구현에 대해 알아보겠습니다. 이 기능은 데이터를 자동으로 처리하고, 결과를 신속하게 분석하는데 유용합니다.

GeminiAPI 함수

이 함수는 주어진 텍스트를 사용하여 HTTP 요청을 보내고, Gemini API로부터 응답을 받아 반환합니다. 본 함수는 텍스트 데이터를 API에 전송하고, 처리된 결과를 받아올 때 중요합니다.

Function GeminiAPI(ByVal cell As Range) As String
    ' 변수 선언
    Dim HttpReq As Object, ApiUrl As String, ContentType As String, PostData As String, ResponseText As String

    ' 처리할 텍스트 추출
    text2 = cell.text

    ' HTTP 객체 생성
    Set HttpReq = CreateObject("MSXML2.XMLHTTP")

    ' API URL 및 컨텐트 타입 설정
    ApiUrl = "https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=API_KEY"
    ContentType = "application/json"

    ' 요청 데이터 구성
    PostData = "{""contents"":[{""parts"":[{""text"":""" & text2 & """}]}]}"

    ' HTTP 요청 및 응답 처리
    On Error GoTo ErrorHandler
    With HttpReq
        .Open "POST", ApiUrl, False
        .setRequestHeader "Content-Type", ContentType
        .send PostData

        ' 응답 확인 및 추출
        If .Status = 200 Then
            ResponseText = ExtractText(.ResponseText)
        Else
            ResponseText = "Error: " & .Status & " - " & .StatusText
        End If
    End With
    GeminiAPI = ResponseText
    Exit Function

ErrorHandler:
    GeminiAPI = "HTTP Request Error at Line " & Erl & ": " & Err.Description
End Function

ExtractText 함수

이 함수는 HTTP 응답으로부터 필요한 텍스트를 추출합니다. 응답 데이터에서 원하는 정보만을 선별하여 반환하는 중요한 역할을 합니다.

Function ExtractText(ResponseText As String) As String
    Dim TextStart As Long, TextEnd As Long

    ' "text" 키워드 위치 찾기
    TextStart = InStr(ResponseText, """text"": """)

    ' 시작 및 끝 위치 계산
    If TextStart > 0 Then
        TextStart = TextStart + 8
        TextEnd = InStr(TextStart, ResponseText, """")
        If TextEnd > TextStart Then
            ExtractText = Mid(ResponseText, TextStart, TextEnd - TextStart)
        Else
            ExtractText = "Error: Text end not found."
        End If
    Else
        ExtractText = "Error: Text key not found."
    End If

    On Error GoTo ErrorHandler
    Exit Function

ErrorHandler:
    ExtractText = "Error: " & Err.Description
End Function

전체 코드

이 코드는 Gemini API를 사용하여 텍스트에 대한 HTTP 요청을 보내고 응답을 처리하는 두 개의 함수로 구성되어 있습니다. GeminiAPI 함수는 주어진 텍스트를 사용하여 HTTP 요청을 보내고 응답을 반환합니다.

Function GeminiAPI(ByVal cell As Range) As String
    ' 변수 선언
    Dim HttpReq As Object, ApiUrl As String, ContentType As String, PostData As String, ResponseText As String

    text2 = cell.text

    ' HTTP 객체 생성
    Set HttpReq = CreateObject("MSXML2.XMLHTTP")

    ' API URL 및 컨텐트 타입 상수 정의
    ApiUrl = "https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=YOUR_API_KEY"
    ContentType = "application/json"

    ' PostData 구성
    PostData = "{""contents"":[{""parts"":[{""text"":""" & text2 & """}]}]}"

    ' HTTP 요청 및 오류 처리
    On Error GoTo ErrorHandler
    With HttpReq
        .Open "POST", ApiUrl, False
        .setRequestHeader "Content-Type", ContentType
        .send PostData

        ' HTTP 상태 코드 검증
        If .Status = 200 Then
            ResponseText = ExtractText(.ResponseText)
        Else
            ResponseText = "Error: " & .Status & " - " & .StatusText
        End If
    End With
    GeminiAPI = ResponseText
    Exit Function

ErrorHandler:
    ' 오류 처리
    GeminiAPI = "HTTP Request Error at Line " & Erl & ": " & Err.Description
End Function

' ExtractText 함수는 HTTP 응답으로부터 필요한 텍스트를 추출합니다.
Function ExtractText(ResponseText As String) As String
    Dim TextStart As Long, TextEnd As Long

    ' "text" 키의 시작 위치를 찾음
    TextStart = InStr(ResponseText, """text"": """)

    ' 키워드의 시작 및 끝 위치를 찾음
    If TextStart > 0 Then
        TextStart = TextStart + 8 ' "text": " 이후의 위치
        TextEnd = InStr(TextStart, ResponseText, """") ' 종료 따옴표 위치
        If TextEnd > TextStart Then
            ExtractText = Mid(ResponseText, TextStart, TextEnd - TextStart)
        Else
            ExtractText = "Error: Text end not found."
        End If
    Else
        ExtractText = "Error: Text key not found."
    End If

    ' 오류 처리
    On Error GoTo ErrorHandler
    Exit Function

ErrorHandler:
    ExtractText = "Error: " & Err.Description
End Function
반응형

댓글