במדריך הזה מוסבר איך להשתמש בשיטה 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באמצעות קריאה לאחת מהשיטות הבאות: - מבצעים קריאה ל-
downloadmethod ב-Mediaresource ומציינים את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. אפשר לאחזר את הערך הזה באחת מהדרכים הבאות:-
getmethod on theAttachmentresource. -
getmethod on theMessageresource. -
listmethod on theMessageresource.
-
בספריית העבודה, מפתחים ומריצים את הדוגמה:
python3 chat_media_and_attachment_download.py
אם הפעולה בוצעה ללא שגיאות, הפונקציה הזו מחזירה את תוכן הקובץ כבייטים.
כדי להוריד את תוכן הקובץ, בוחרים באחת מהשיטות הבאות:
מומלץ להשתמש במחלקה
MediaIoBaseDownloadב-Python, שמכילה שיטות להורדת הקובץ בקטעים ולשמירת התוכן בזרם פלט.אם אתם צריכים לבצע את בקשת ה-HTTP באופן ידני, צריך לקרוא לשיטה
downloadולציין את החלק בקובץ שרוצים להוריד באמצעות טווח בייטים עם הכותרתRange– לדוגמה:Range: bytes=500-999.
נושאים קשורים
- אם ההודעה היא קובץ ב-Drive, צריך להשתמש ב-Drive API כדי לקבל גישה לקובץ.
- העלאת מדיה כקובץ מצורף
- הורדת מדיה כקובץ מצורף
- אחזור מטא-נתונים של קובץ מצורף להודעה