Dosya ekinden medya indirme

Bu rehberde, Google Chat'teki bir mesajdan medya (dosya) indirmek için Google Chat API'nin Media kaynağında 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, bir istek gövdesi içerir. Bu istek gövdesi, tüm ekler de dahil olmak üzere etkileşim etkinliğini temsil eden JSON yüküdür. Ekteki veriler, ekin yüklenen içerik (yerel bir dosya) veya Drive'da depolanan bir dosya olmasına bağlı olarak farklılık gösterir. Media kaynağı, Google Chat'e yüklenen resim, video ve dokümanlar gibi bir dosyayı temsil eder. Attachment kaynağı, bir mesaja ekli 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 etkinleştirildiği ve yapılandırıldığı bir Google Cloud projesi Adımlar için Google Chat uygulaması oluşturma başlıklı makaleyi inceleyin.
  • Chat uygulaması için yetkilendirme yapılandırıldı. Medyanın indirilmesi şunları destekler:

Dosya ekinden indirme

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

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

Python

  1. Çalışma dizininizde chat_media_and_attachment_download.py adlı bir dosya oluşturun.
  2. Aşağıdaki kodu chat_media_and_attachment_download.py bölümüne 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 kullanın. Bu sayede aşağıdaki yöntemlerden birini alabilirsiniz:

  4. Çalışma dizininizde örneği derleyin 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:

  • Python'da, dosyayı bölümler halinde indirme ve içerikleri bir çıkış akışına kaydetme yöntemlerini içeren 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ığı içeren bir bayt aralığı kullanarak (örneğin, Range: bytes=500-999) dosyanın indirmek istediğiniz bölümünü belirtin.