במדריך הזה מוסבר איך להשתמש בשיטה download
במשאב Media
של Google Chat API כדי להוריד מדיה (קובץ) מהודעה ב-Google Chat.
כשהמשתמש שולח הודעה לאפליקציה, מערכת Google Chat שולחת אירוע אינטראקציה MESSAGE
.
אירוע האינטראקציה שמתקבל באפליקציה כולל גוף בקשה, שהוא מטען ייעודי (payload) בפורמט JSON שמייצג את אירוע האינטראקציה, כולל קבצים מצורפים. הנתונים בקובץ המצורף שונים בהתאם לסוג הקובץ המצורף: תוכן שהועלה (קובץ מקומי) או קובץ ששמור ב-Drive. המשאב Media
מייצג קובץ שהועלה ל-Google Chat, כמו תמונות, סרטונים ומסמכים.
המשאב Attachment
מייצג מכונה של מדיה – קובץ – שמצורפת להודעה. Attachment
המשאב כולל את המטא-נתונים של הקובץ המצורף, כמו המיקום שבו הוא נשמר.
דרישות מוקדמות
Python
- חשבון Google Workspace במהדורת Business או Enterprise עם גישה ל-Google Chat.
- מגדירים את הסביבה:
- יוצרים פרויקט ב-Google Cloud.
- מגדירים את מסך ההסכמה של OAuth.
- מפעילים ומגדירים את Google Chat API עם שם, סמל ותיאור לאפליקציית Chat.
- מתקינים את ספריית הלקוח של Google API ל-Python.
- יוצרים פרטי גישה בהתאם לאופן שבו רוצים לבצע אימות בבקשה של Google Chat API:
- כדי לבצע אימות כמשתמש ב-Chat, יוצרים פרטי כניסה של מזהה לקוח OAuth ושומרים אותם כקובץ JSON בשם
credentials.json
בספרייה המקומית. - כדי לבצע אימות כאפליקציית Chat, יוצרים פרטי כניסה לחשבון שירות ושומרים אותם כקובץ JSON בשם
credentials.json
.
- כדי לבצע אימות כמשתמש ב-Chat, יוצרים פרטי כניסה של מזהה לקוח OAuth ושומרים אותם כקובץ JSON בשם
- בוחרים היקף הרשאה בהתאם לאופן שבו רוצים לבצע אימות – כמשתמש או כאפליקציית Chat.
הורדה מקובץ מצורף
כדי להוריד מדיה מקובץ מצורף, צריך להעביר את הפרטים הבאים בבקשה:
- באימות משתמשים, מציינים את היקף ההרשאה
chat.messages.readonly
אוchat.messages
. באימות אפליקציות, מציינים את היקף ההרשאהchat.bot
. - מפעילים את הפונקציות הבאות ב-Google Chat:
- כדי לקבל את
attachmentDataRef
, מתקשרים לאחת מהשיטות הבאות:- השיטה
get
במשאבAttachment
. - השיטה
get
או השיטהlist
במשאבMessage
.
- השיטה
- מתקשרים אל השיטה
download
במשאבMedia
ומציינים אתattachmentDataRef.resourceName
שאוחזר קודם בתורmedia.download.resourceName
.
- כדי לקבל את
בדוגמה הבאה מוסבר איך מורידים קובץ שמצורף להודעה:
Python
- בספריית העבודה, יוצרים קובץ בשם
chat_media_and_attachment_download.py
. מוסיפים את הקוד הבא אל
chat_media_and_attachment_download.py
: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()
בקוד, מחליפים את
RESOURCE_NAME
ב-attachmentDataRef.resourceName
. אפשר לאחזר את הערך הזה באחת מהדרכים הבאות:בספריית העבודה, מבצעים build ומריצים את הדוגמה:
python3 chat_media_and_attachment_download.py
אם הפעולה בוצעה ללא שגיאות, השיטה הזו מחזירה את תוכן הקובץ כבייטים.
כדי להוריד את תוכן הקובץ, בוחרים באחת מהשיטות הבאות:
מומלץ להשתמש במחלקה
MediaIoBaseDownload
ב-Python, שמכילה שיטות להורדת הקובץ בקטעים ולשמירת התוכן בזרם פלט.אם אתם צריכים לבצע את בקשת ה-HTTP באופן ידני, צריך לקרוא לשיטה
download
ולציין את החלק בקובץ שרוצים להוריד באמצעות טווח בייטים עם הכותרתRange
– לדוגמה:Range: bytes=500-999
.
נושאים קשורים
- אם ההודעה היא קובץ ב-Drive, צריך להשתמש ב-Drive API כדי לקבל גישה לקובץ.
- העלאת מדיה כקובץ מצורף
- הורדת מדיה כקובץ מצורף
- אחזור מטא-נתונים של קובץ מצורף להודעה