Dosya ekinden medya indirme

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

Kullanıcı uygulamanıza mesaj gönderdiğinde Google Chat bir MESSAGE etkileşim etkinliği gönderir. Uygulamanızın aldığı etkileşim etkinliği, istek gövdesini içerir. Bu, ekler de dahil olmak üzere etkileşim etkinliğini temsil eden JSON yüküdür. Ekteki veriler, ekin yüklenen içerik mi (yerel dosya) yoksa Drive'da depolanan bir dosya mı olduğuna bağlı olarak farklılık gösterir. Media kaynağı, Google Chat'e yüklenen bir dosyayı (resim, video ve doküman gibi) temsil eder. Attachment kaynağı, bir mesaja eklenmiş medya örneğini (dosya) temsil eder. Attachment kaynağı, ekle ilgili meta verileri (ör. dosyanın kaydedildiği yer) içerir.

Ön koşullar

Python

  • Python 3.6 veya sonraki sürümler
  • pip paket yönetimi aracı
  • Python için en yeni Google istemci kitaplıkları. Bunları yüklemek veya güncellemek için komut satırı arayüzünüzde aşağıdaki komutu çalıştırın:

    pip3 install --upgrade google-api-python-client google-auth-oauthlib
    
  • Google Chat API'nin etkin ve yapılandırılmış olduğu bir Google Cloud projesi. Adımlar için Google Chat uygulaması oluşturma başlıklı makaleye göz atın.
  • Chat uygulaması için yetkilendirme yapılandırıldı. Medya indirme şu ikisini de destekler:

Dosya ekinden indirme

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

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

Python

  1. Çalışma dizininizde chat_media_and_attachment_download.py adında bir dosya oluşturun.
  2. chat_media_and_attachment_download.py içine şu 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 yerine attachmentDataRef.resourceName kodunu yazın. Bunu aşağıdaki yöntemlerden birini kullanarak 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 yaklaşımlardan birini seçin:

  • Python'da MediaIoBaseDownload sınıfını kullanmanızı öneririz. Bu sınıf, dosyayı bölümler halinde indirme ve içeriği bir çıkış akışına kaydetme yöntemlerini içerir.

  • 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. Örneğin: Range: bytes=500-999.