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:
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
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ı 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
edinin: Media
kaynağındadownload
yöntemini çağırın ve daha önce alınanattachmentDataRef.resourceName
değerinimedia.download.resourceName
olarak belirtin.
- Aşağıdaki yöntemlerden birini çağırarak
Aşağıdaki örnekte iletiye ekli bir dosya indirilir:
Python
- Çalışma dizininizde
chat_media_and_attachment_download.py
adında bir dosya oluşturun. 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()
Kodda,
RESOURCE_NAME
yerineattachmentDataRef.resourceName
kodunu yazın. Bunu aşağıdaki yöntemlerden birini kullanarak 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 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 veRange
başlığıyla bir bayt aralığı kullanarak dosyanın indirmek istediğiniz bölümünü belirtin. Örneğin:Range: bytes=500-999
.
İlgili konular
- Mesaj 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
- Bir mesaj ekiyle ilgili meta verileri alma