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ş medya örneğini (dosya) temsil eder. Attachment
kaynağı, ekle ilgili meta verileri (ör. nereye kaydedildiği) içerir.
Ön koşullar
Python
- Google Chat'e erişimi olan bir Business veya Enterprise Google Workspace hesabı.
- Ortamınızı ayarlayın:
- Google Cloud projesi oluşturun.
- OAuth kullanıcı rızası ekranını yapılandırın.
- Google Chat API'yi etkinleştirin ve yapılandırın. Chat uygulamanız için ad, simge ve açıklama ekleyin.
- Python Google API İstemci Kitaplığı'nı yükleyin.
- Google Chat API isteğinizde kimlik doğrulamayı nasıl yapmak istediğinize bağlı olarak erişim kimlik bilgileri oluşturun:
- Chat kullanıcısı olarak kimlik doğrulamak için OAuth istemci kimliği kimlik bilgileri oluşturun ve kimlik bilgilerini yerel dizininize
credentials.jsonadlı bir JSON dosyası olarak kaydedin. - Chat uygulaması olarak kimlik doğrulamak için hizmet hesabı kimlik bilgileri oluşturun ve kimlik bilgilerini
credentials.jsonadlı bir JSON dosyası olarak kaydedin.
- Chat kullanıcısı olarak kimlik doğrulamak için OAuth istemci kimliği kimlik bilgileri oluşturun ve kimlik bilgilerini yerel dizininize
- Kullanıcı veya Chat uygulaması olarak kimliğinizi doğrulamak isteyip istemediğinize bağlı olarak bir yetkilendirme kapsamı seçin.
Dosya ekinden indirme
Dosya ekinden medya indirmek için isteğinizde aşağıdakileri iletin:
- Kullanıcı kimlik doğrulaması ile
chat.messages.readonlyveyachat.messagesyetkilendirme kapsamını belirtin. Uygulama kimlik doğrulaması ilechat.botyetkilendirme kapsamını belirtin. - Aşağıdaki Google Chat yöntemlerini çağırın:
- Aşağıdaki yöntemlerden birini çağırarak
attachmentDataRefalın: downloadyönteminiMediakaynağında çağırın ve daha önce alınanattachmentDataRef.resourceNamedeğerinimedia.download.resourceNameolarak belirtin.
- Aşağıdaki yöntemlerden birini çağırarak
Aşağıdaki örnekte, bir iletiye eklenmiş dosya indirilmektedir:
Python
- Çalışma dizininizde
chat_media_and_attachment_download.pyadlı bir dosya oluşturun. 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()Kodda
RESOURCE_NAMEyerine aşağıdaki yöntemlerden biriyle alabileceğinizattachmentDataRef.resourceNamedeğerini girin:Ç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
MediaIoBaseDownloadsınıfını kullanmanızı öneririz.HTTP isteğini manuel olarak yapmanız gerekiyorsa
downloadyöntemini çağırın veRangeüstbilgisiyle bayt aralığı kullanarak dosyanın indirmek istediğiniz bölümünü belirtin. Örneğin:Range: bytes=500-999.
İlgili konular
- İleti bir Drive dosyasıysa Drive API'yi kullanarak dosyaya erişin.
- Medya dosyalarını ek olarak yükleme
- Medya dosyalarını ek olarak indirme
- İleti ekiyle ilgili meta verileri alma