Bu kılavuzda, download
yönteminin Media
kaynağında nasıl kullanılacağı açıklanmaktadır.
Google Chat API'yi kullanarak Google Chat'teki bir mesajdan medya (dosya) indirme
Kullanıcı, uygulamanıza mesaj gönderdiğinde Google Chat bir mesaj gönderir.
MESSAGE
etkileşim etkinliği.
Uygulamanızın aldığı etkileşim etkinliği, bir istek gövdesini içerir. Bu istek metni,
Etkileşim etkinliğini temsil eden JSON yükü (tüm ekler dahil). İlgili içeriği oluşturmak için kullanılan
ekteki verilerin farklı olup olmadığına bağlı olarak
yüklenen içerik (yerel dosya) veya Drive'da depolanan bir dosyadır. İlgili içeriği oluşturmak için kullanılan
Media
kaynak
Google Chat'e yüklenen resim, video ve doküman gibi bir dosyayı temsil eder.
İlgili içeriği oluşturmak için kullanılan
Attachment
kaynak
bir iletiye ekli medya örneğini (dosya) temsil eder. Attachment
kaynak, ek hakkındaki meta verileri içerir.
kaydedilmektedir.
Ön koşullar
Python
- Python 3.6 veya sonraki sürümler
- pip paket yönetim aracı
Python için en yeni Google istemci kitaplıkları. Bu uygulamaları 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 bkz. Google Chat uygulaması oluşturun.
Chat uygulaması için yetkilendirme yapılandırıldı. Medya indirilmesi şunları destekler:
- Kullanıcı kimlik doğrulaması
chat.messages.readonly
veyachat.messages
yetkilendirmesi ile kapsam. - Uygulama kimlik doğrulaması
chat.bot
yetkilendirme kapsamıyla kullanılabilir.
- Kullanıcı kimlik doğrulaması
Dosya ekinden indirme
Dosya ekinden medya indirmek için istek:
- Kullanıcı kimlik doğrulaması ile
chat.messages.readonly
veyachat.messages
yetkilendirme kapsamı. Entegre uygulama kimlik doğrulaması,chat.bot
yetkilendirme kapsamını belirtin. - Aşağıdaki Google Chat yöntemlerini çağırın:
- Aşağıdaki yöntemlerden birini çağırarak
attachmentDataRef
özelliğini alın:get
yöntemi uygulamasındaAttachment
kaynak.get
yöntemi veyalist
yöntemi uygulamasındaMessage
kaynak.
download
yöntemini çağırın uygulamasındaMedia
kaynak ve belirtin önceden alınanattachmentDataRef.resourceName
media.download.resourceName
.
- Aşağıdaki yöntemlerden birini çağırarak
Aşağıdaki örnekte, bir iletiye ekli bir dosya indirilir:
Python
- Çalışma dizininizde şu ada sahip bir dosya oluşturun:
chat_media_and_attachment_download.py
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
öğesini şununla değiştirin:attachmentDataRef.resourceName
şu yöntemleri kullanabilirsiniz:Ç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:
Şunu kullanmanızı öneririz: Python'da indirme yöntemleri içeren
MediaIoBaseDownload
sınıfı ve içeriği bir çıkış akışına kaydedin.HTTP isteğini manuel olarak yapmanız gerekiyorsa
download
yöntemini çağırın ve dosyanın indirmek istediğiniz bölümünü bayt aralık,Range
başlığıyla belirtilir (örneğin,Range: bytes=500-999
).
İlgili konular
- İleti bir Drive dosyasıysa Dosyaya erişmek için Drive API'sini kullanın.
- Medyayı dosya eki olarak yükleme
- Medyayı dosya eki olarak indirme
- Mesaj ekleri hakkında meta veri alma