คำแนะนำนี้จะอธิบายวิธีใช้เมธอด download
ในทรัพยากร Media
ของ Google Chat API เพื่อดาวน์โหลดสื่อ (ไฟล์) จากข้อความใน Google Chat
เมื่อผู้ใช้ส่งข้อความไปยังแอปของคุณ Google Chat จะส่งเหตุการณ์การโต้ตอบ MESSAGE
เหตุการณ์การโต้ตอบที่แอปของคุณได้รับจะมีเนื้อหาคําขอ ซึ่งก็คือเพย์โหลด JSON ที่แสดงถึงเหตุการณ์การโต้ตอบ รวมถึงไฟล์แนบต่างๆ ด้วย ข้อมูลในไฟล์แนบจะแตกต่างกันไปตามไฟล์แนบที่เป็นเนื้อหาที่อัปโหลด (ไฟล์ในเครื่อง) หรือเป็นไฟล์ที่เก็บไว้ในไดรฟ์ แหล่งข้อมูล 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 แล้ว การดาวน์โหลดสื่อรองรับทั้ง 2 อย่างต่อไปนี้
- การตรวจสอบสิทธิ์ผู้ใช้ด้วยขอบเขตการให้สิทธิ์
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 API เพื่อรับสิทธิ์เข้าถึงไฟล์
- อัปโหลดสื่อเป็นไฟล์แนบ
- ดาวน์โหลดสื่อเป็นไฟล์แนบ
- รับข้อมูลเมตาเกี่ยวกับไฟล์แนบของข้อความ