이 가이드에서는 Google Chat API의 Media
리소스에서 download
메서드를 사용하여 Google Chat의 메시지에서 미디어 (파일)를 다운로드하는 방법을 설명합니다.
사용자가 앱에 메시지를 보내면 Google Chat에서 MESSAGE
상호작용 이벤트를 디스패치합니다.
앱에서 수신한 상호작용 이벤트에는 첨부파일을 비롯한 상호작용 이벤트를 나타내는 JSON 페이로드인 요청 본문이 포함됩니다. 첨부파일의 데이터는 첨부파일이 업로드된 콘텐츠 (로컬 파일)인지 아니면 Drive에 저장된 파일인지에 따라 다릅니다. Media
리소스는 이미지, 동영상, 문서와 같이 Google Chat에 업로드된 파일을 나타냅니다.
Attachment
리소스는 메시지에 첨부된 미디어(파일) 인스턴스를 나타냅니다. Attachment
리소스에는 첨부파일이 저장된 위치와 같은 첨부파일에 관한 메타데이터가 포함됩니다.
기본 요건
Python
- Google Chat에 액세스할 수 있는 Business 또는 Enterprise Google Workspace 계정
- 환경을 설정합니다.
- Google Cloud 프로젝트를 만듭니다.
- OAuth 동의 화면 구성
- Chat 앱의 이름, 아이콘, 설명으로 Google Chat API를 사용 설정하고 구성합니다.
- Python Google API 클라이언트 라이브러리를 설치합니다.
- Google Chat API 요청에서 인증하려는 방식에 따라 액세스 사용자 인증 정보를 만듭니다.
- Chat 사용자로 인증하려면 OAuth 클라이언트 ID 사용자 인증 정보를 만들고 사용자 인증 정보를
credentials.json
라는 JSON 파일로 로컬 디렉터리에 저장합니다. - Chat 앱으로 인증하려면 서비스 계정 사용자 인증 정보를 만들고 사용자 인증 정보를
credentials.json
라는 JSON 파일로 저장합니다.
- Chat 사용자로 인증하려면 OAuth 클라이언트 ID 사용자 인증 정보를 만들고 사용자 인증 정보를
- 사용자로 인증할지 아니면 Chat 앱으로 인증할지에 따라 승인 범위 선택
파일 첨부에서 다운로드
파일 첨부파일에서 미디어를 다운로드하려면 요청에 다음을 전달하세요.
- 사용자 인증을 사용하면
chat.messages.readonly
또는chat.messages
승인 범위를 지정합니다. 앱 인증을 사용하면chat.bot
승인 범위를 지정할 수 있습니다. - 다음 Google Chat 메서드를 호출합니다.
- 다음 메서드 중 하나를 호출하여
attachmentDataRef
를 가져옵니다. Media
리소스에서download
메서드를 호출하고 이전에 가져온attachmentDataRef.resourceName
를media.download.resourceName
로 지정합니다.
- 다음 메서드 중 하나를 호출하여
다음 예시에서는 메시지에 첨부된 파일을 다운로드합니다.
Python
- 작업 디렉터리에
chat_media_and_attachment_download.py
이라는 파일을 만듭니다. chat_media_and_attachment_download.py
에 다음 코드를 포함합니다.import io from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from googleapiclient.http import MediaIoBaseDownload # Define your app's authorization scopes. # When modifying these scopes, delete the file token.json, if it exists. SCOPES = ["https://www.googleapis.com/auth/chat.messages"] def main(): ''' Authenticates with Chat API via user credentials, then downloads a file attached to a message. ''' # Authenticate with Google Workspace # and get user authorization. flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server() # Build a service endpoint for Chat API. chat = build('chat', 'v1', credentials=creds) # Download media resource. request = chat.media().download_media( resourceName=RESOURCE_NAME, ) file = io.BytesIO() downloader = MediaIoBaseDownload(file, request) done = False while done is False: status, done = downloader.next_chunk() if status.total_size: print(f'Total size: {status.total_size}') print(f'Download {int(status.progress() * 100)}') if __name__ == '__main__': main()
코드에서
RESOURCE_NAME
를attachmentDataRef.resourceName
로 바꿉니다.attachmentDataRef.resourceName
는 다음 방법 중 하나로 가져올 수 있습니다.작업 디렉터리에서 샘플을 빌드하고 실행합니다.
python3 chat_media_and_attachment_download.py
성공하면 이 메서드는 파일 콘텐츠를 바이트로 반환합니다.
파일 콘텐츠를 다운로드하려면 다음 방법 중 하나를 선택하세요.
Python에서
MediaIoBaseDownload
클래스를 사용하는 것이 좋습니다. 이 클래스에는 파일을 섹션으로 다운로드하고 콘텐츠를 출력 스트림에 저장하는 메서드가 포함되어 있습니다.HTTP 요청을 수동으로 만들어야 하는 경우
download
메서드를 호출하고Range
헤더와 함께 바이트 범위를 사용하여 다운로드할 파일 부분을 지정합니다(예:Range: bytes=500-999
).
관련 주제
- 메시지가 Drive 파일인 경우 Drive API를 사용하여 파일에 액세스합니다.
- 미디어를 파일 첨부로 업로드하기
- 미디어를 파일 첨부로 다운로드하기
- 메일 첨부파일에 관한 메타데이터 가져오기