מדריך זה מסביר איך משתמשים בשיטה download
במשאב Media
של Google Chat API כדי להוריד מדיה (קובץ) מהודעה ב-Google Chat.
כשהמשתמש שולח הודעה לאפליקציה, יישלח אירוע אינטראקציה של MESSAGE
מ-Google Chat.
אירוע האינטראקציה שהאפליקציה מקבלת כולל גוף בקשה, שהוא המטען הייעודי (payload) של JSON שמייצג את אירוע האינטראקציה, כולל קבצים מצורפים. הנתונים שבקובץ המצורף משתנים בהתאם לסוג הקובץ שהועלה (קובץ מקומי) או קובץ שמאוחסן ב-Drive. המשאב Media
מייצג קובץ שהועלה ל-Google Chat, כמו תמונות, סרטונים ומסמכים.
המשאב Attachment
מייצג מופע של מדיה (קובץ) שמצורף להודעה. המשאב Attachment
כולל את המטא-נתונים של הקובץ המצורף, למשל איפה הוא נשמר.
דרישות מוקדמות
Python
- Python 3.6 ואילך
- הכלי pip לניהול חבילות
ספריות הלקוח העדכניות של Google ל-Python. כדי להתקין או לעדכן אותן, מריצים את הפקודה הבאה בממשק שורת הפקודה:
pip3 install --upgrade google-api-python-client google-auth-oauthlib
- פרויקט ב-Google Cloud עם ממשק Google Chat API פעיל ומוגדר. במאמר איך יוצרים אפליקציה ל-Google Chat מוסבר איך עושים זאת.
ההרשאות שהוגדרו לאפליקציית Chat. בהורדה של קובצי מדיה אפשר:
- אימות משתמשים באמצעות היקף ההרשאה
chat.messages.readonly
אוchat.messages
. - אימות אפליקציות עם היקף ההרשאה
chat.bot
.
- אימות משתמשים באמצעות היקף ההרשאה
הורדה מקובץ מצורף
כדי להוריד מדיה מקובץ מצורף, מעבירים את הפרטים הבאים בבקשה:
- באמצעות אימות משתמשים, מציינים את היקף ההרשאה
chat.messages.readonly
אוchat.messages
. באמצעות אימות אפליקציות, מציינים את היקף ההרשאהchat.bot
. - מפעילים את השיטות הבאות ב-Google Chat:
- משיגים את
attachmentDataRef
באמצעות אחת מהשיטות הבאות: - קוראים לשיטה
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( '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()
בקוד, מחליפים את
RESOURCE_NAME
ב-attachmentDataRef.resourceName
, שאותו אפשר לאחזר באחת מהדרכים הבאות:בספריית העבודה, יוצרים ומריצים את הדוגמה:
python3 chat_media_and_attachment_download.py
אם הפעולה מצליחה, השיטה הזו מחזירה את תוכן הקובץ כבייטים.
כדי להוריד את תוכן הקובץ, בוחרים באחת מהשיטות הבאות:
מומלץ להשתמש במחלקה
MediaIoBaseDownload
ב-Python, שמכילה שיטות להורדת הקובץ בקטעים ולשמירת התוכן בזרם פלט.אם חייבים לשלוח את בקשת ה-HTTP באופן ידני, צריך להפעיל את השיטה
download
ולציין את החלק של הקובץ שרוצים להוריד באמצעות טווח בייטים עם הכותרתRange
– לדוגמה:Range: bytes=500-999
.
נושאים קשורים
- אם ההודעה היא קובץ מ-Drive, השתמשו ב-Drive API כדי לקבל גישה לקובץ.
- העלאת מדיה כקובץ מצורף
- הורדת מדיה כקובץ מצורף
- קבלת מטא-נתונים של קובץ מצורף של הודעה