Dosya ekinden medya indirme

Bu kılavuzda, Google Chat API'nin Media kaynağındaki download yöntemini kullanarak Google Chat'teki bir mesajdan medyayı (dosya) nasıl indireceğiniz açıklanmaktadır.

Kullanıcı uygulamanıza mesaj gönderdiğinde Google Chat, MESSAGE etkileşim etkinliği gönderir. Uygulamanızın aldığı etkileşim etkinliği, ekler de dahil olmak üzere etkileşim etkinliğini temsil eden JSON yükü olan bir istek gövdesi içerir. Ekteki veriler, ekin yüklenen içerik (yerel dosya) olup olmadığına veya Drive'da depolanan bir dosya olup olmadığına bağlı olarak farklılık gösterir. MediaKaynak, Google Chat'e yüklenen resim, video ve doküman gibi dosyaları temsil eder. Attachment kaynağı, bir iletiye eklenmiş bir medya örneğini (dosya) temsil eder. Attachment kaynağı, ekle ilgili meta verileri (ör. nereye kaydedildiği) içerir.

Ön koşullar

Python

Dosya ekinden indirme

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

Aşağıdaki örnekte, bir iletiye eklenmiş 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'ya 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(
                    '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()
    
  3. Kodda RESOURCE_NAME yerine attachmentDataRef.resourceName değerini girin. Bu değeri aşağıdaki yöntemlerden biriyle alabilirsiniz:

  4. Çalışma dizininizde örneği oluşturun ve ç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çeriklerini indirmek için aşağıdaki yaklaşımlardan birini seçin:

  • Dosyayı bölümler halinde indirmek ve içeriği bir çıkış akışına kaydetmek için yöntemler 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 üstbilgisiyle bayt aralığı kullanarak dosyanın indirmek istediğiniz bölümünü belirtin. Örneğin: Range: bytes=500-999.