Dosya ekinden medya indirme

Bu kılavuzda, Google Chat API'nin Media kaynağındaki download yönteminin, Google Chat'teki bir mesajdan medya (dosya) indirmek için nasıl kullanılacağı açıklanmaktadır.

Kullanıcı uygulamanıza mesaj gönderdiğinde Google Chat bir MESSAGEetkileşim etkinliği gönderir. Uygulamanız tarafından alınan etkileşim etkinliği, ekleriyle birlikte etkileşim etkinliğini temsil eden JSON yüküdür. Eki, yüklenen içerik (yerel dosya) mi yoksa Drive'da depolanan bir dosya mı olduğuna bağlı olarak farklı veriler içerir. Media kaynağı, Google Chat'e yüklenen bir dosyayı (ör. resim, video ve doküman) temsil eder. Attachment kaynağı, bir iletiye eklenen medya örneğini (dosya) temsil eder. Attachment kaynağı, ekteki meta verileri (ör. kaydedildiği yer) içerir.

Ön koşullar

Python

Dosya ekinden indirme

Bir dosya ekinden medya indirmek için isteğinizde aşağıdakileri iletin:

Aşağıdaki örnekte, bir iletiye ekli dosya indirilmektedir:

Python

  1. Çalışma dizininizde chat_media_and_attachment_download.py adlı bir dosya oluşturun.
  2. chat_media_and_attachment_download.py dosyasına aşağıdaki kodu ekleyin:

    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. Kodda RESOURCE_NAME değerini attachmentDataRef.resourceName ile değiştirin. attachmentDataRef.resourceName değerini aşağıdaki yöntemlerden biriyle alabilirsiniz:

  4. Çalışma dizininizde örneği derleyip çalıştırın:

    python3 chat_media_and_attachment_download.py

Başarılı olursa bu yöntem, dosya içeriğini bayt olarak döndürür.

Dosya içeriğini indirmek için aşağıdaki yöntemlerden birini seçin:

  • Dosyayı bölümler halinde indirip içeriği bir çıkış akışına kaydetme yöntemleri içeren Python'daki MediaIoBaseDownload sınıfını kullanmanızı öneririz.

  • HTTP isteğini manuel olarak yapmanız gerekiyorsa download yöntemini çağırın ve Range başlığıyla bir bayt aralığı kullanarak dosyanın indirmek istediğiniz bölümünü belirtin (ör. Range: bytes=500-999).