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:
chat.messages.readonly
veyachat.messages
yetkilendirme kapsamıyla kullanıcı kimlik doğrulaması.chat.bot
yetkilendirme kapsamıyla uygulama kimlik doğrulaması.
Dosya ekinden indirme
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ı ilechat.bot
yetkilendirme kapsamını belirtin. - Aşağıdaki Google Chat yöntemlerini çağırın:
- Aşağıdaki yöntemlerden birini çağırarak
attachmentDataRef
depolama alanını alın: Media
kaynağındadownload
yöntemini çağırın ve daha önce alınanattachmentDataRef.resourceName
yönteminimedia.download.resourceName
olarak belirtin.
- Aşağıdaki yöntemlerden birini çağırarak
Aşağıdaki örnekte, bir iletiye ekli bir dosya indirilir:
Python
- Çalışma dizininizde
chat_media_and_attachment_download.py
adlı bir dosya oluşturun. 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()
Kodda
RESOURCE_NAME
yerineattachmentDataRef.resourceName
kullanın. Bu sayede aşağıdaki yöntemlerden birini alabilirsiniz:Ç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 veRange
başlığı içeren bir bayt aralığı kullanarak (örneğin,Range: bytes=500-999
) dosyanın indirmek istediğiniz bölümünü belirtin.
İ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 ekleri hakkında meta veri alma