첨부파일에서 미디어 다운로드

이 가이드에서는 Google Chat API의 Media 리소스에서 download 메서드를 사용하여 Google Chat의 메시지에서 미디어 (파일)를 다운로드하는 방법을 설명합니다.

사용자가 앱에 메시지를 보내면 Google Chat에서 MESSAGE 상호작용 이벤트를 전달합니다. 앱에서 수신하는 상호작용 이벤트에는 첨부파일을 포함하여 상호작용 이벤트를 나타내는 JSON 페이로드인 요청 본문이 포함됩니다. 첨부파일의 데이터는 첨부파일이 업로드된 콘텐츠 (로컬 파일)인지 아니면 Drive에 저장된 파일인지에 따라 다릅니다. Media 리소스는 이미지, 동영상, 문서와 같이 Google Chat에 업로드된 파일을 나타냅니다. Attachment 리소스는 메시지에 첨부된 미디어(파일)의 인스턴스를 나타냅니다. Attachment 리소스에는 저장 위치와 같은 첨부파일에 관한 메타데이터가 포함됩니다.

기본 요건

Python

첨부파일에서 다운로드

파일 첨부파일에서 미디어를 다운로드하려면 요청에 다음을 전달합니다.

다음 예에서는 메일에 첨부된 파일을 다운로드합니다.

Python

  1. 작업 디렉터리에 chat_media_and_attachment_download.py라는 파일을 만듭니다.
  2. 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(
                    'client_secrets.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()
    
  3. 코드에서 RESOURCE_NAMEattachmentDataRef.resourceName로 바꿉니다. attachmentDataRef.resourceName는 다음 방법 중 하나로 검색할 수 있습니다.

  4. 작업 디렉터리에서 샘플을 빌드하고 실행합니다.

    python3 chat_media_and_attachment_download.py

이 메서드는 성공하면 파일 콘텐츠를 바이트로 반환합니다.

파일 콘텐츠를 다운로드하려면 다음 접근 방식 중 하나를 선택하세요.

  • 섹션별로 파일을 다운로드하고 콘텐츠를 출력 스트림에 저장하는 메서드가 포함된 Python의 MediaIoBaseDownload 클래스를 사용하는 것이 좋습니다.

  • HTTP 요청을 수동으로 실행해야 하는 경우 download 메서드를 호출하고 Range 헤더와 함께 바이트 범위(예: Range: bytes=500-999)를 사용하여 다운로드할 파일의 일부를 지정합니다.