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 MESSAGE
etkileş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
- Google Chat'e erişimi olan bir Business veya Enterprise Google Workspace hesabı
- Ortamınızı ayarlayın:
- Google Cloud projesi oluşturun.
- OAuth izin ekranını yapılandırın.
- Chat uygulamanız için bir ad, simge ve açıklamayla Google Chat API'yi etkinleştirip yapılandırın.
- Python Google API İstemci Kitaplığı'nı yükleyin.
- Google Chat API isteğinizde kimliğinizi doğrulama yönteminize göre erişim kimlik bilgileri oluşturun:
- Chat kullanıcısı olarak kimlik doğrulamak için OAuth istemci kimliği kimlik bilgilerini oluşturun ve kimlik bilgilerini yerel dizininize
client_secrets.json
adlı bir JSON dosyası olarak kaydedin. - Chat uygulaması olarak kimlik doğrulamak için hizmet hesabı kimlik bilgileri oluşturun ve kimlik bilgilerini
credentials.json
adlı bir JSON dosyası olarak kaydedin.
- Chat kullanıcısı olarak kimlik doğrulamak için OAuth istemci kimliği kimlik bilgilerini oluşturun ve kimlik bilgilerini yerel dizininize
- Kullanıcı olarak mı yoksa Chat uygulaması olarak mı kimlik doğrulama yapmak istediğinize bağlı olarak bir yetkilendirme kapsamı seçin.
Dosya ekinden indirme
Bir dosya ekinden medya indirmek için isteğinizde aşağıdakileri iletin:
- Kullanıcı kimlik doğrulaması ile
chat.messages.readonly
veyachat.messages
yetkilendirme kapsamını belirtin. Uygulama kimlik doğrulamasındachat.bot
yetkilendirme kapsamını belirtin. - Aşağıdaki Google Chat yöntemlerini çağırın:
- Aşağıdaki yöntemlerden birini çağırarak
attachmentDataRef
değerini alın: Media
kaynağındadownload
yöntemini çağırın ve daha önce alınanattachmentDataRef.resourceName
öğesinimedia.download.resourceName
olarak belirtin.
- Aşağıdaki yöntemlerden birini çağırarak
Aşağıdaki örnekte, bir iletiye ekli dosya indirilmektedir:
Python
- Çalışma dizininizde
chat_media_and_attachment_download.py
adlı bir dosya oluşturun. 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()
Kodda
RESOURCE_NAME
değeriniattachmentDataRef.resourceName
ile değiştirin.attachmentDataRef.resourceName
değerini aşağıdaki yöntemlerden biriyle alabilirsiniz:Ç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 veRange
başlığıyla bir bayt aralığı kullanarak dosyanın indirmek istediğiniz bölümünü belirtin (ör.Range: bytes=500-999
).
İlgili konular
- İleti bir Drive dosyasıysa dosyaya erişmek için Drive API'yi kullanın.
- Medyayı dosya eki olarak yükleme
- Medyayı dosya eki olarak indirme
- Mesaj eki ile ilgili meta verileri alma