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. Media
Kaynak, Google Chat'e yüklenen resim, video ve doküman gibi dosyaları temsil eder.
Attachment
kaynağı, bir iletiye eklenmiş bir 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.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 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.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
alın: download
yönteminiMedia
kaynağında ç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, bir iletiye eklenmiş dosya indirilmektedir:
Python
- Çalışma dizininizde
chat_media_and_attachment_download.py
adlı 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_NAME
yerineattachmentDataRef.resourceName
değerini girin. Bu değeri aşağıdaki yöntemlerden biriyle alabilirsiniz:Ç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
MediaIoBaseDownload
sınıfını kullanmanızı öneririz.HTTP isteğini manuel olarak yapmanız gerekiyorsa
download
yö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