반응형
서론
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
반응형
댓글