คู่มือสำหรับนักพัฒนาซอฟต์แวร์: Python

YouTube Data API ช่วยให้แอปพลิเคชันไคลเอ็นต์ดึงข้อมูลและอัปเดตเนื้อหา YouTube ในรูปแบบฟีด Google Data API ได้ แอปพลิเคชันไคลเอ็นต์สามารถใช้ฟีด YouTube Data API เพื่อดึงข้อมูล ค้นหา และอัปเดตวิดีโอ ความคิดเห็น การตอบกลับ เพลย์ลิสต์ โปรไฟล์ผู้ใช้ และรายชื่อติดต่อของผู้ใช้ รวมถึงค้นหาวิดีโอที่ตรงกับเกณฑ์ที่กำหนด

นอกจากจะให้ข้อมูลเบื้องต้นเกี่ยวกับความสามารถของ YouTube Data API แล้ว เอกสารนี้ยังมีตัวอย่างการโต้ตอบกับ API โดยใช้ไลบรารีของไคลเอ็นต์ Python ด้วย หากต้องการใช้ไลบรารีของไคลเอ็นต์ Python คุณจะต้องมี Python 2.0 ขึ้นไปและโมดูล Element Tree, httplib และ urllib ดูรายละเอียดเพิ่มเติมได้ที่โมดูล Dependency

หากต้องการความช่วยเหลือในการตั้งค่าไลบรารีไคลเอ็นต์ Python โปรดดูคู่มือการเริ่มต้นใช้งาน หากต้องการทำความเข้าใจเพิ่มเติมเกี่ยวกับโปรโตคอลพื้นฐานที่ไลบรารีไคลเอ็นต์ Python ใช้เพื่อโต้ตอบกับ YouTube โปรดดูหน้าโปรโตคอลในคู่มือสำหรับนักพัฒนาซอฟต์แวร์

เกี่ยวกับเอกสารนี้

ผู้ชม

เอกสารนี้มีไว้สำหรับโปรแกรมเมอร์ที่ต้องการเขียนแอปพลิเคชันไคลเอ็นต์ที่โต้ตอบกับ YouTube ได้โดยใช้ไลบรารีไคลเอ็นต์ Python ซึ่งแสดงชุดตัวอย่างการโต้ตอบพื้นฐานของ Data API

ดูข้อมูลอ้างอิงเกี่ยวกับ YouTube Data API ได้ที่คู่มืออ้างอิง

เอกสารนี้ถือว่าคุณเข้าใจแนวคิดทั่วไปที่อยู่เบื้องหลังโปรโตคอล Google Data API และคุณทราบวิธีเขียนโปรแกรมใน Python

ดูข้อมูลอ้างอิงเกี่ยวกับคลาสและเมธอด Python ได้ที่ pyDocs (สําหรับคลาสบริการและคลาสข้อมูล) ที่รวมอยู่ในซอร์สโค้ด

โครงสร้างเอกสาร

เอกสารนี้ประกอบด้วยส่วนต่อไปนี้

  • ส่วนการตรวจสอบสิทธิ์จะอธิบายวิธีการตรวจสอบสิทธิ์ 2 วิธีที่แตกต่างกันสำหรับเชื่อมโยงการดำเนินการของ API กับบัญชีผู้ใช้ที่เฉพาะเจาะจง ส่วนนี้ยังอธิบายความแตกต่างระหว่างการตรวจสอบสิทธิ์สําหรับ YouTube Data API กับ Google Data API อื่นๆ ด้วย ตลอดทั้งเอกสารนี้ คำอธิบายฟังก์ชัน API ที่เฉพาะเจาะจงจะระบุอย่างชัดเจนว่าฟังก์ชันดังกล่าวกำหนดให้ต้องตรวจสอบสิทธิ์ผู้ใช้หรือไม่ โดยทั่วไปแล้ว คำขอทั้งหมดที่แก้ไขข้อมูลวิดีโอหรือฟีดจะต้องได้รับการตรวจสอบสิทธิ์ คำขอแบบอ่านอย่างเดียวสำหรับวิดีโอสาธารณะไม่จำเป็นต้องมีการตรวจสอบสิทธิ์

  • ส่วนการทำความเข้าใจฟีดและรายการวิดีโอมีตัวอย่างการตอบกลับของ API และอธิบายวิธีดึงข้อมูลเกี่ยวกับวิดีโอรายการเดียวจากรายการวิดีโอหรือชุดผลการค้นหา ส่วนนี้ยังอธิบายวิธีเข้าถึงข้อมูลเมตาเกี่ยวกับรายการวิดีโอที่เฉพาะเจาะจงด้วย สุดท้าย ส่วนนี้จะอธิบายกลไกการอัปเดตรายการวิดีโอแต่ละรายการ

  • ส่วนการดึงข้อมูลและการค้นหาวิดีโอจะอธิบายวิธีดึงข้อมูลรายการวิดีโอที่เฉพาะเจาะจง เช่น ฟีดมาตรฐานของวิดีโอยอดนิยมบน YouTube รายการวิดีโออื่นๆ ได้แก่ วิดีโอที่อัปโหลดโดยผู้ใช้ที่เฉพาะเจาะจงและรายการวิดีโอที่เกี่ยวข้องกับวิดีโอหนึ่งๆ ส่วนนี้ยังอธิบายวิธีใช้ API เพื่ออนุญาตให้ผู้ใช้ค้นหาคลังวิดีโอของ YouTube ตามข้อความค้นหาหรือหมวดหมู่ที่เฉพาะเจาะจง

  • ส่วนการอัปโหลดวิดีโอจะอธิบายสั้นๆ 2 วิธีที่คุณอนุญาตให้ผู้ใช้อัปโหลดวิดีโอไปยัง YouTube จากแอปพลิเคชันได้ นอกจากนี้ ส่วนนี้ยังอธิบายวิธีอัปโหลดวิดีโอเพื่อตอบกลับวิดีโออื่นๆ ด้วย

  • ส่วนการอัปเดตและการลบวิดีโอจะอธิบายวิธีใช้ API เพื่ออัปเดตข้อมูลเกี่ยวกับวิดีโอ YouTube รวมถึงอธิบายวิธีนำวิดีโอออกโดยใช้ API ด้วย

  • ส่วนการใช้ฟีเจอร์ชุมชนจะอธิบายฟังก์ชัน API ที่ช่วยให้ผู้ใช้โต้ตอบกับวิดีโอ YouTube ได้ ฟังก์ชันเหล่านี้อธิบายคำขอโพสต์การให้คะแนน ความคิดเห็น หรือการร้องเรียนในวิดีโอที่มีอยู่ นอกจากนี้ คุณยังใช้ API เพื่อดึงข้อมูลรายการความคิดเห็นของวิดีโอได้ด้วย

  • ส่วนการบันทึกและรวบรวมวิดีโอจะอธิบายวิธีใช้ API เพื่อเข้าถึง สร้าง และอัปเดตวิดีโอที่ชอบ เพลย์ลิสต์วิดีโอ และการติดตามช่อง YouTube รวมถึงแสดงวิธีแก้ไขเพลย์ลิสต์และรายการโปรดของวิดีโอด้วยการเพิ่มและนำวิดีโอออก

  • ส่วนการเปิดใช้การโต้ตอบของผู้ใช้จะอธิบายวิธีใช้ API เพื่อเรียกข้อมูลและอัปเดตโปรไฟล์ผู้ใช้ ส่วนนี้ยังอธิบายวิธีเรียกข้อมูล เพิ่ม อัปเดต และลบรายชื่อติดต่อของผู้ใช้ด้วย

เริ่มต้นใช้งาน

ข้อกำหนด

แอปพลิเคชันไคลเอ็นต์สามารถใช้ฟีด YouTube Data API เพื่อค้นหา เรียกข้อมูล และอัปเดตวิดีโอ ความคิดเห็น การตอบกลับ เพลย์ลิสต์ การติดตาม โปรไฟล์ผู้ใช้ และอื่นๆ

นอกจากจะให้ข้อมูลเบื้องต้นเกี่ยวกับความสามารถของ YouTube Data API แล้ว เอกสารนี้ยังมีตัวอย่างการโต้ตอบกับ API โดยใช้ไลบรารีของไคลเอ็นต์ Python ด้วย หากต้องการใช้ไลบรารีของไคลเอ็นต์ Python คุณจะต้องมี Python 2.2 ขึ้นไปและโมดูล Element Tree, httplib และ urllib ดูรายละเอียดเพิ่มเติมได้ที่โมดูล Dependency

ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าสภาพแวดล้อมได้ในคู่มือเริ่มต้นใช้งาน หากต้องการทำความเข้าใจเพิ่มเติมเกี่ยวกับโปรโตคอลพื้นฐานที่ไลบรารีไคลเอ็นต์ Python ใช้เพื่อโต้ตอบกับ YouTube โปรดดูหน้าโปรโตคอลในคู่มือสำหรับนักพัฒนาซอฟต์แวร์

คุณคัดลอก/วางข้อมูลโค้ดตัวอย่างด้านล่างลงในโค้ดและแก้ไขให้เหมาะกับความต้องการของคุณได้

คุณต้องเริ่มต้นการทำงานของ gdata.youtube.service.YouTubeService ออบเจ็กต์ ดังที่แสดงด้านล่างก่อนจึงจะดำเนินการใดๆ กับ YouTube Data API ได้ คำสั่ง import ที่แสดงด้านล่างจะทำการนำเข้าเพิ่มเติมจากโมดูล gdata.media และ gdata.geo โดยอัตโนมัติ โปรดทราบว่าการดำเนินการทั้งหมดนอกเหนือจากการเรียกข้อมูลเนื้อหาสาธารณะจะต้องตรวจสอบสิทธิ์

import gdata.youtube
import gdata.youtube.service

yt_service = gdata.youtube.service.YouTubeService()

# Turn on HTTPS/SSL access.
# Note: SSL is not available at this time for uploads.
yt_service.ssl = True

ตัวอย่างเมธอดส่วนใหญ่ในคู่มือนี้จะทํางานกับอินสแตนซ์ของ gdata.youtube.service.YouTubeService การทดสอบคําขอที่ไม่มีการรับรองจากโปรแกรมแปลภาษาไพธอนแบบอินเทอร์แอกทีฟอาจมีประโยชน์

หมายเหตุ: คุณต้องเพิ่มไลบรารีไคลเอ็นต์ Python ในเส้นทางอย่างถูกต้อง โปรดตรวจสอบว่าคุณได้ติดตั้งโดยเรียกใช้สคริปต์ setup.py ที่ให้มา โปรดดูข้อมูลเพิ่มเติมในคู่มือการเริ่มต้นใช้งาน

การตรวจสอบสิทธิ์

ไลบรารีไคลเอ็นต์ Python สามารถใช้กับฟีดสาธารณะหรือส่วนตัวก็ได้ ฟีดสาธารณะเป็นแบบอ่านอย่างเดียวและไม่ต้องการตรวจสอบสิทธิ์ ฟีดส่วนตัวกำหนดให้คุณต้องตรวจสอบสิทธิ์กับเซิร์ฟเวอร์ YouTube

การตรวจสอบสิทธิ์ทำได้ผ่านการตรวจสอบสิทธิ์ ClientLogin (สําหรับแอปบนเดสก์ท็อป) หรือผ่านการตรวจสอบสิทธิ์ AuthSub (สําหรับเว็บแอปพลิเคชัน)

การตั้งค่าคีย์นักพัฒนาแอปและรหัสไคลเอ็นต์

คีย์นักพัฒนาแอปจะระบุนักพัฒนาแอป YouTube ที่ส่งคําขอ API รหัสไคลเอ็นต์จะระบุแอปพลิเคชันของคุณเพื่อวัตถุประสงค์ในการบันทึกและการแก้ไขข้อบกพร่อง

เมื่อคุณส่งคําขอ API โดยใช้ไลบรารีไคลเอ็นต์ Python ระบบจะใช้ส่วนหัวคําขอ X-GData-Key เพื่อระบุคีย์นักพัฒนาแอป ส่วนหัว X-GData-Client จะใช้เพื่อระบุรหัสไคลเอ็นต์ คุณตั้งค่าคีย์นักพัฒนาแอปและรหัสไคลเอ็นต์ได้ในออบเจ็กต์ YouTubeService โดยแยกจากรูปแบบการตรวจสอบสิทธิ์ที่ใช้อยู่

yt_service.developer_key = 'ABCxyz123...'
yt_service.client_id = 'My-Client_id'

คุณจะต้องลงชื่อสมัครใช้คีย์นักพัฒนาแอป YouTube

การตรวจสอบสิทธิ์ AuthSub สําหรับเว็บแอปพลิเคชัน

เว็บแอปพลิเคชันซึ่งต้องตรวจสอบสิทธิ์ผู้ใช้กับบัญชี YouTube/Google จะใช้การตรวจสอบสิทธิ์พร็อกซี AuthSub ผู้ดำเนินการไม่จำเป็นต้องเข้าถึงชื่อผู้ใช้และรหัสผ่านของผู้ใช้ YouTube เพียงแค่ต้องมีโทเค็น AuthSub พิเศษเท่านั้น

เมื่อผู้ใช้เข้าชมแอปพลิเคชันเป็นครั้งแรก ผู้ใช้จะยังไม่ได้รับการตรวจสอบสิทธิ์กับบริการของ Google ในกรณีนี้ คุณต้องให้ลิงก์ที่นําผู้ใช้ไปยัง Google เพื่ออนุญาตให้คําขอเข้าถึงบัญชี YouTube ของแอปพลิเคชันของคุณ ไลบรารีไคลเอ็นต์ Python มีฟังก์ชันสำหรับสร้าง URL นี้ โค้ดด้านล่างจะตั้งค่าลิงก์ไปยังหน้า AuthSubRequest

def GetAuthSubUrl():
  next = 'http://www.example.com/video_upload.pyc'
  scope = 'http://gdata.youtube.com'
  secure = False
  session = True

yt_service = gdata.youtube.service.YouTubeService()
return yt_service.GenerateAuthSubURL(next, scope, secure, session)

authSubUrl = GetAuthSubUrl()
print '<a href="%s">Login to your Google account</a>' % authSubUrl

โปรดสังเกตพารามิเตอร์ที่ส่งไปยังเมธอด GenerateAuthSubURL ของออบเจ็กต์บริการ

  • next — URL ของหน้าเว็บที่ YouTube ควรเปลี่ยนเส้นทางผู้ใช้ไปหลังจากผู้ใช้ให้สิทธิ์แอปพลิเคชันของคุณเข้าถึงบัญชีแล้ว
  • scope - ระบุว่าแอปพลิเคชันจะเข้าถึงเฉพาะฟีด YouTube API
  • secure — ระบุว่าโทเค็นที่แสดงผลจะไม่ได้เป็นโทเค็นที่ปลอดภัย
  • session — บ่งบอกว่าโทเค็นนี้สามารถแลกเป็นโทเค็น (เซสชัน) ที่ใช้ซ้ำได้

URL ที่แสดงผลจะมีลักษณะดังนี้

https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fgdata.youtube.com&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fvideo_upload.pyc

จากนั้นผู้ใช้จะไปยังลิงก์เพื่อเข้าสู่ระบบบัญชี YouTube ได้ หลังจากผู้ใช้ให้สิทธิ์แอปพลิเคชันของคุณเข้าถึงบัญชีแล้ว ระบบจะเปลี่ยนเส้นทางผู้ใช้กลับไปที่ URL next URL จะมีค่าโทเค็นแบบใช้ครั้งเดียวต่อท้ายเป็นพารามิเตอร์การค้นหา URL จะมีลักษณะดังนี้

http://www.example.com/video_upload.pyc?token=Abc123...

ส่วนถัดไปจะแสดงวิธีอัปเกรดโทเค็นนี้ ข้อมูลโค้ดด้านล่างแสดงวิธีดึงข้อมูลโทเค็นนี้จาก URL

import cgi
parameters = cgi.FieldStorage()
authsub_token = parameters[[]'token' ]

การอัปเกรดเป็นโทเค็นเซสชัน

โทเค็นนี้เป็นแบบใช้ครั้งเดียวเท่านั้นเพื่อความปลอดภัย คุณจึงต้องแลกเปลี่ยนโทเค็นแบบใช้ครั้งเดียวนี้เพื่อรับโทเค็นเซสชัน กระบวนการนี้มีอธิบายอยู่ในเอกสารประกอบเกี่ยวกับ AuthSub ข้อมูลโค้ดต่อไปนี้แสดงวิธีอัปเกรดโทเค็น

yt_service = gdata.youtube.service.YouTubeService()
yt_service.SetAuthSubToken(authsub_token)
yt_service.UpgradeToSessionToken()

ค่าโทเค็นนี้แสดงถึงโทเค็น AuthSub แบบใช้ครั้งเดียว เนื่องจากมีการระบุ session = True ไว้ข้างต้น โทเค็นนี้จึงแลกเปลี่ยนเป็นโทเค็นเซสชัน AuthSub ได้โดยใช้เมธอด UpgradeToSessionToken ซึ่งเรียกบริการ AuthSubSessionToken

ตอนนี้ออบเจ็กต์ YouTubeService ได้รับการตรวจสอบสิทธิ์โดยสมบูรณ์แล้ว และสามารถใช้เพื่อส่งคำขอเพิ่มเติมทั้งหมดด้วย YouTube API โทเค็นเซสชัน AuthSub จะไม่มีวันหมดอายุ เว้นแต่คุณจะส่งคำขอเพิกถอนโทเค็นดังกล่าวโดยเฉพาะ หรือผู้ใช้ตัดสินใจเพิกถอนสิทธิ์เข้าถึงโดยไปที่หน้าเว็บไซต์ที่ได้รับอนุญาตในบัญชี YouTube ของตน

การตรวจสอบสิทธิ์ ClientLogin สําหรับแอปพลิเคชันที่ติดตั้ง

การตรวจสอบสิทธิ์ ClientLogin ใช้ในแอปพลิเคชันที่ติดตั้งไว้ซึ่งสามารถจัดเก็บหรือค้นหาชื่อผู้ใช้และรหัสผ่านของผู้ใช้ หากต้องการใช้การตรวจสอบสิทธิ์รูปแบบนี้ ให้เรียกใช้เมธอด ProgrammaticLogin ของ YouTubeService ที่รับค่ามาจากคลาส gdata.service.GDataService โดยระบุรหัสและรหัสผ่านของผู้ใช้ที่ลูกค้าส่งคําขอตรวจสอบสิทธิ์ในนาม

yt_service = gdata.youtube.service.YouTubeService()
yt_service.email = 'jo@gmail.com'
yt_service.password = 'mypassword'
yt_service.source = 'my-example-application'
yt_service.ProgrammaticLogin()

เมื่อตั้งค่าข้อมูลเข้าสู่ระบบแล้ว คุณจะใช้ออบเจ็กต์ YouTubeService เพื่อจัดการคำขอเพิ่มเติมทั้งหมดได้ หากต้องการอัปโหลดและส่งคําขอ "เขียน" ทุกประเภท (การเพิ่มความคิดเห็น ฯลฯ) ไปยัง YouTube API โปรดตรวจสอบว่าคุณได้ส่งคีย์นักพัฒนาแอปและรหัสไคลเอ็นต์ไปยังออบเจ็กต์ yt_service เมื่อทำการตรวจสอบสิทธิ์ด้วย

# A complete client login request
yt_service.email = 'jo@gmail.com'
yt_service.password = 'mypassword'
yt_service.source = 'my-example-application'
yt_service.developer_key = 'ABC123...'
yt_service.client_id = 'my-example-application'
yt_service.ProgrammaticLogin()

ออบเจ็กต์ YouTubeService จะตั้งค่าส่วนหัว X-GData-Key และ X-GData-Client ที่ถูกต้องโดยอัตโนมัติเมื่อมีการตั้งค่าแอตทริบิวต์ developer_key และ client_id

หมายเหตุ: โปรดดูข้อมูลโดยละเอียดเกี่ยวกับทั้งกลไก AuthSub และ ClientLogin ในเอกสารประกอบการตรวจสอบสิทธิ์ของ Google Data API

ทำความเข้าใจฟีดและรายการวิดีโอ

YouTube Data API มีฟีดวิดีโอหลายรายการที่แสดงรายการวิดีโอ เช่น ฟีดมาตรฐาน การอัปโหลด การติดตาม และรายการโปรด URL ของฟีดแต่ละรายการจะแสดงอยู่ในคู่มืออ้างอิง

การแสดงฟีดวิดีโอ

ฟีดจำนวนมากใน YouTube API ประกอบด้วยรายการวิดีโอ ฟีดเหล่านี้สามารถจำลองเป็นออบเจ็กต์ gdata.youtube.YouTubeVideoFeed ได้โดยง่าย โดยแต่ละรายการจะมีออบเจ็กต์ gdata.youtube.YouTubeVideoEntry อยู่จำนวนหนึ่ง รายการวิดีโอแต่ละรายการจะสอดคล้องกับวิดีโอบน YouTube เพียงรายการเดียวและมีข้อมูลเกี่ยวกับวิดีโอนั้น

โครงสร้างพื้นฐานของการดึงข้อมูลรายการวิดีโอคือการสร้าง URL ไปยังฟีดวิดีโอ จากนั้นประมวลผลรายการทีละรายการ ซึ่งคล้ายกับโค้ดต่อไปนี้

def GetAndPrintVideoFeed(uri):
  yt_service = gdata.youtube.service.YouTubeService()
  feed = yt_service.GetYouTubeVideoFeed(uri)
  for entry in feed.entry:
    PrintEntryDetails(entry) # full documentation for this function

ส่วนการดึงข้อมูลและค้นหาวิดีโอจะแสดงรายละเอียด URL ของฟีดทั่วไปหลายรายการและวิธีดึงข้อมูลฟีดวิดีโอต่างๆ

การดึงข้อมูลรายการวิดีโอที่เฉพาะเจาะจง

คุณสามารถดึงข้อมูลเฉพาะของรายการวิดีโอได้หากทราบรหัสวิดีโอ URL ของรายการจะอิงตามรหัสวิดีโอ

http://gdata.youtube.com/feeds/api/videos/videoID

โค้ดต่อไปนี้จะดึงข้อมูล gdata.youtube.YouTubeVideoEntry ที่สอดคล้องกับวิดีโอบน YouTube

entry = yt_service.GetYouTubeVideoEntry(video_id='the0KZLEacs')

เนื้อหาของวิดีโอที่ส่งเข้ามา

ข้อมูลเมตาจำนวนมากที่สามารถดึงมาจากออบเจ็กต์ gdata.youtube.YouTubeVideoEntry เช่น ภาพปก, URL ของเพลเยอร์ และระยะเวลาของวิดีโอ โค้ดต่อไปนี้แสดงวิธีเข้าถึงข้อมูลบางส่วนนี้ ไลบรารีไคลเอ็นต์ Python จะแยกฟังก์ชันการทํางานส่วนใหญ่นี้ออกโดยการแมปองค์ประกอบ XML ไปยังคลาส ข้อมูลสําคัญส่วนใหญ่เกี่ยวกับรายการ YouTubeVideoEntry มาจากรายการย่อยของแอตทริบิวต์ media (ซึ่งมีออบเจ็กต์ gdata.media.Group) ภายในรายการ (แสดงถึงองค์ประกอบ media:group XML) ด้านล่างนี้คือตัวอย่างวิธีเรียกข้อมูลเมตาของวิดีโอ

def PrintEntryDetails(entry):
  print 'Video title: %s' % entry.media.title.text
  print 'Video published on: %s ' % entry.published.text
  print 'Video description: %s' % entry.media.description.text
  print 'Video category: %s' % entry.media.category[[]0].text
  print 'Video tags: %s' % entry.media.keywords.text
  print 'Video watch page: %s' % entry.media.player.url
  print 'Video flash player URL: %s' % entry.GetSwfUrl()
  print 'Video duration: %s' % entry.media.duration.seconds

  # non entry.media attributes
  print 'Video geo location: %s' % entry.geo.location()
  print 'Video view count: %s' % entry.statistics.view_count
  print 'Video rating: %s' % entry.rating.average

  # show alternate formats
  for alternate_format in entry.media.content:
    if 'isDefault' not in alternate_format.extension_attributes:
      print 'Alternate format: %s | url: %s ' % (alternate_format.type,
                                                 alternate_format.url)

  # show thumbnails
  for thumbnail in entry.media.thumbnail:
    print 'Thumbnail url: %s' % thumbnail.url

หมายเหตุ: ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างข้อมูลที่จําเป็นสําหรับการฝังวิดีโอที่มีโปรแกรมเล่นในหน้าเว็บได้ที่คู่มือโปรโตคอล

การดึงข้อมูลและการค้นหาวิดีโอ

การดึงข้อมูลฟีดมาตรฐาน

YouTube Data API มีฟีดมาตรฐานของวิดีโอยอดนิยมบน YouTube ก่อนหน้านี้ API รองรับฟีดมาตรฐานอื่นๆ ซึ่งเลิกใช้งานไปแล้ว ดูข้อมูลเพิ่มเติมได้ที่คู่มือนักพัฒนาแอป

URL สำหรับฟีดวิดีโอยอดนิยมของ YouTube มีรูปแบบดังนี้

http://gdata.youtube.com/feeds/api/standardfeeds/most_popular

หมายเหตุ: คุณยังเรียกข้อมูลฟีดมาตรฐานสำหรับแต่ละภาษาได้โดยระบุ localeID ในรูปแบบ http://gdata.youtube.com/feeds/api/standardfeeds/localeID/feedID เช่น วิดีโอยอดนิยมในญี่ปุ่นคือ http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_popular โปรดดูรายการรหัสภาษาที่เป็นไปได้ทั้งหมดในคู่มืออ้างอิง

def PrintVideoFeed(feed):
  for entry in feed.entry:
    PrintEntryDetails(entry)

def GetAndPrintFeedByUrl:
  yt_service = gdata.youtube.service.YouTubeService()

  # You can retrieve a YouTubeVideoFeed by passing in the URI
  uri = 'http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_popular'
  PrintVideoFeed(yt_service.GetYouTubeVideoFeed(uri))

การดึงข้อมูลวิดีโอที่ผู้ใช้ที่เฉพาะเจาะจงอัปโหลด

ผู้ใช้ YouTube แต่ละรายจะมีฟีดวิดีโอที่เชื่อมโยงกับวิดีโอที่อัปโหลดไว้ที่ http://gdata.youtube.com/feeds/api/users/username/uploads โค้ดต่อไปนี้แสดงวิธีดึงข้อมูลและแสดงฟีดที่ผู้ใช้อัปโหลด

def GetAndPrintUserUploads(username):
  yt_service = gdata.youtube.service.YouTubeService()
  uri = 'http://gdata.youtube.com/feeds/api/users/%s/uploads' % username
  PrintVideoFeed(yt_service.GetYouTubeVideoFeed(uri))

หมายเหตุ: คุณสามารถใช้สตริง "default" แทน username เพื่อเรียกข้อมูลวิดีโอของผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์ในปัจจุบันได้

หากต้องการเรียกข้อมูลวิดีโอที่เกี่ยวข้อง ให้ส่งรหัสวิดีโอของออบเจ็กต์ gdata.youtube.YouTubeVideoEntry ไปยังเมธอด GetYouTubeRelatedVideoFeed ของออบเจ็กต์ gdata.youtube.service.YouTubeService ซึ่งจะดึงข้อมูลออบเจ็กต์ YouTubeVideoFeed ที่มีรายการที่เกี่ยวข้อง

related_feed = yt_service.GetYouTubeRelatedVideoFeed(video_id='abc123')

การค้นหาวิดีโอ

YouTube Data API ช่วยให้คุณขอชุดรายการที่ตรงกับเกณฑ์ที่ระบุได้ เช่น การขอรายการวิดีโอที่เผยแพร่โดยผู้แต่งที่เฉพาะเจาะจง ตามรูปแบบวิดีโอ หรือมีคีย์เวิร์ดที่ต้องการ โดยสร้างออบเจ็กต์ gdata.service.YouTubeVideoQuery ที่มีเกณฑ์การค้นหาที่ต้องการ แล้วส่งไปยังเมธอด YouTubeQuery ของ gdata.youtube.service.YouTubeService

ตัวอย่างด้านล่างแสดงวิธีดำเนินการค้นหาโดยจัดเรียงผลการค้นหาตามยอดดู ซึ่งรวมถึงวิดีโอที่ถูกจำกัด (API เรียกว่า "โจ่งแจ้ง")

def SearchAndPrint(search_terms):
  yt_service = gdata.youtube.service.YouTubeService()
  query = gdata.youtube.service.YouTubeVideoQuery()
  query.vq = search_terms
  query.orderby = 'viewCount'
  query.racy = 'include'
  feed = yt_service.YouTubeQuery(query)
  PrintVideoFeed(feed)

คลาส gdata.service.Query และคลาสย่อย เช่น YouTubeVideoQuery มีหน้าที่สร้าง URL ของฟีด โดย VideoQuery ที่แสดงด้านบนจะสร้าง URL ที่เทียบเท่ากับ URL ต่อไปนี้

http://gdata.youtube.com/feeds/api/videos?vq=<searchTerms>&racy=include&orderby=viewCount

ต่อไปนี้คือตัวอย่างคุณสมบัติ YouTubeVideoQuery ที่ใช้กันมากที่สุดในการตั้งค่าพารามิเตอร์การค้นหา

author
ตั้งค่าผู้เขียนของรายการ ผู้แต่งมีความหมายเหมือนกับชื่อผู้ใช้ YouTube
format
ระบุรูปแบบวิดีโอ ยอมรับพารามิเตอร์ตัวเลขเพื่อระบุ URL สตรีมมิง RTSP ประเภทใดประเภทหนึ่งสำหรับการเล่นวิดีโอบนอุปกรณ์เคลื่อนที่ หรือ HTTP URL ไปยังโปรแกรมเล่น Flash ที่ฝังได้
racy
บ่งชี้ว่าควรรวมเนื้อหาที่ถูกจํากัดไว้ในผลการค้นหาหรือไม่ ยอมรับพารามิเตอร์เพียง 2 รายการ ได้แก่ "include" หรือ "exclude"
max_results
ตั้งค่าจํานวนรายการสูงสุดที่จะแสดงพร้อมกัน
start_index
ตั้งค่าดัชนีฐาน 1 ของผลการค้นหารายการแรกที่จะดึงข้อมูล (สำหรับการแบ่งหน้า)
orderby
ตั้งค่าลําดับในการแสดงรายการ เช่น ตาม relevance, viewCount, published หรือ rating
time
ตั้งค่าระยะเวลาเพื่อจำกัดผลการค้นหาของฟีดมาตรฐานเป็น today, this_week, this_month หรือ all_time
vq
ตั้งค่าข้อความค้นหา ค้นหาสตริงที่ระบุในข้อมูลเมตาทั้งหมดของวิดีโอ เช่น ชื่อ แท็ก และคำอธิบาย

หมายเหตุ: ดูข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์การค้นหาได้ที่คู่มืออ้างอิง YouTube Data API และคู่มืออ้างอิง Google Data API

การค้นหาด้วยหมวดหมู่และคีย์เวิร์ด

คุณจำกัดผลการค้นหาให้แสดงเฉพาะวิดีโอที่ตรงกับหมวดหมู่และคีย์เวิร์ดชุดหนึ่งๆ ได้ คู่มืออ้างอิงจะอธิบายวิธีระบุทั้งหมวดหมู่ YouTube ที่กําหนดไว้ล่วงหน้า (เช่น เพลง คนและบล็อก ฯลฯ) และคีย์เวิร์ด (แท็ก) ที่ผู้ใช้กําหนด

โค้ดต่อไปนี้แสดงวิธีค้นหาโดยใช้คีย์เวิร์ด (แท็ก) โดยเปลี่ยนข้อความค้นหาเป็นตัวพิมพ์เล็ก หมายเหตุ: เนื่องจากคำบางคำ (เช่น "ตลก") อาจเป็นได้ทั้งหมวดหมู่ YouTube และคีย์เวิร์ด การค้นหาหมวดหมู่และคีย์เวิร์ดจึงใช้รูปแบบที่คำตัวพิมพ์ใหญ่ ("ตลก") หมายถึงหมวดหมู่ YouTube ส่วนคำตัวพิมพ์เล็ก ("ตลก") หมายถึงคีย์เวิร์ด

def SearchAndPrintVideosByKeywords(list_of_search_terms):
  yt_service = gdata.youtube.service.YouTubeService()
  query = gdata.youtube.service.YouTubeVideoQuery()
  query.orderby = 'viewCount'
  query.racy = 'include'
  for search_term in list_of_search_terms:
    new_term = search_term.lower()
    query.categories.append('/%s' % new_term)
  feed = yt_service.YouTubeQuery(query)
  PrintVideoFeed(feed)

การค้นหาตามแท็กของนักพัฒนาแอป

แท็กของนักพัฒนาแอปคือคีย์เวิร์ดที่ซ่อนอยู่เพิ่มเติมซึ่งนักพัฒนาแอปอาจใช้เพื่อติดแท็กเนื้อหาที่ผู้ใช้ปลายทางอัปโหลดผ่านแอปพลิเคชัน ระบบจะจับคู่แท็กนักพัฒนาแอปกับคีย์นักพัฒนาแอปที่ตั้งค่าไว้ในส่วนหัวระหว่างการอัปโหลด คีย์เวิร์ดเหล่านี้จะไม่ปรากฏต่อสาธารณะและอาจใช้เพื่อดึงข้อมูลวิดีโอ หากต้องการค้นหาวิดีโอตามแท็กของนักพัฒนาแอปที่เฉพาะเจาะจง ให้ส่งคำขอการค้นหา YouTube Data API ทั่วไปโดยใช้คีย์นักพัฒนาแอป อย่าลืมระบุรูปแบบหมวดหมู่และแท็กนักพัฒนาแอปที่วิดีโอต้องตรงกัน คุณสามารถเรียกข้อมูลฟีดวิดีโอที่ตรงกับแท็กนักพัฒนาแอปของคุณ ("your_tag_here" ในตัวอย่างของเรา) ได้จาก URL ด้านล่าง

developer_tag_uri = 'http://gdata.youtube.com/feeds/videos/-/%7Bhttp%3A%2F%2Fgdata.youtube.com%2Fschemas%2F2007%2Fdevelopertags.cat%7Dyour_tag_here'
yt_service = gdata.youtube.service.YouTubeService()
PrintVideoFeed(yt_service.GetYouTubeVideoFeed(developer_tag_uri))

การอัปโหลดวิดีโอ

โปรดดูภาพแผนภาพในคู่มือโปรโตคอลเพื่อดูภาพรวมระดับสูงของกระบวนการอัปโหลด คุณอัปโหลดวิดีโอได้ 2 วิธีดังนี้

  • โดยการอัปโหลดวิดีโอจากเซิร์ฟเวอร์โดยตรงผ่านวิธีการอัปโหลดโดยตรง
  • หรือส่งข้อมูลเมตาก่อน แล้วให้ผู้ใช้อัปโหลดวิดีโอไปยัง YouTube โดยตรงผ่านวิธีการอัปโหลดในเบราว์เซอร์

อัปโหลดโดยตรง

หากต้องการอัปโหลดวิดีโอ คุณต้องสร้างออบเจ็กต์ gdata.youtube.YouTubeVideoEntry ใหม่ก่อน โดยส่งออบเจ็กต์ gdata.media.Group ที่มีข้อมูลเมตาที่จำเป็น ตัวอย่างต่อไปนี้แสดงการอัปโหลดวิดีโอ Quicktime "mytestmovie.mov" ไปยัง YouTube ด้วยพร็อพเพอร์ตี้ต่อไปนี้

พร็อพเพอร์ตี้ค่า
ชื่อMy Test Movie
หมวดหมู่ยานยนต์
คีย์เวิร์ดรถยนต์ ตลก
คำอธิบายคำอธิบายของฉัน
ชื่อไฟล์mytestmovie.mov
ประเภท MIME ของไฟล์video/quicktime
วิดีโอเป็นแบบส่วนตัวใช่ไหมเท็จ
สถานที่ของวิดีโอ37,-122 (lat,long)
แท็กสำหรับนักพัฒนาแอปmydevelopertag, anotherdevelopertag

โค้ดด้านล่างสร้าง YouTubeVideoEntry ว่างเปล่าที่จะอัปโหลด เมธอด InsertVideoEntry ใน YouTubeService ต้องใช้พารามิเตอร์ต่อไปนี้

  • video_entry — ออบเจ็กต์ gdata.youtube.VideoEntry ที่มีข้อมูลเมตา
  • filename_or_handle — ออบเจ็กต์ที่มีลักษณะคล้ายไฟล์หรือชื่อไฟล์ที่จะอ่านวิดีโอ
  • youtube_username — สตริงที่ไม่บังคับซึ่งระบุชื่อผู้ใช้ของบัญชีที่จะอัปโหลดวิดีโอนี้ แน่นอนว่าบัญชีจะต้องมีสิทธิ์ที่เหมาะสม โดยค่าเริ่มต้นจะเป็นบัญชีของผู้ใช้ที่ตรวจสอบสิทธิ์แล้วในปัจจุบัน
  • content_type — สตริงที่ไม่บังคับซึ่งระบุประเภท MIME ของวิดีโอที่จะอัปโหลด
โปรดทราบว่าตัวอย่างเหล่านี้ถือว่าตัวแปร yt_service อ้างอิงออบเจ็กต์ YouTubeService ที่ตรวจสอบสิทธิ์โดยสมบูรณ์

# prepare a media group object to hold our video's meta-data
my_media_group = gdata.media.Group(
  title=gdata.media.Title(text='My Test Movie'),
  description=gdata.media.Description(description_type='plain',
                                      text='My description'),
  keywords=gdata.media.Keywords(text='cars, funny'),
  category=[[]gdata.media.Category(
      text='Autos',
      scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
      label='Autos')],
  player=None
)


# prepare a geo.where object to hold the geographical location
# of where the video was recorded
where = gdata.geo.Where()
where.set_location((37.0,-122.0))

# create the gdata.youtube.YouTubeVideoEntry to be uploaded
video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group,
                                              geo=where)

# set the path for the video file binary
video_file_location = '/path/to/my/file.mov'

new_entry = yt_service.InsertVideoEntry(video_entry, video_file_location)

หากต้องการติดแท็กวิดีโอด้วยแท็กสำหรับนักพัฒนาแอปที่ไม่บังคับ (ดูรายละเอียดเพิ่มเติมได้ที่การค้นหาด้วยแท็กสำหรับนักพัฒนาแอป) เราอาจใช้เมธอด AddDeveloperTags ก่อนเรียกใช้ InsertVideoEntry

developer_tags = [[]'some_tag_01', 'another_tag']
video_entry.AddDeveloperTags(developer_tags)

หมายเหตุ: หากต้องการอัปโหลดวิดีโอแบบส่วนตัว คุณต้องส่งแอตทริบิวต์ "ส่วนตัว" ไปยัง gdata.media.Group ดังนี้

my_media_group = gdata.media.Group(
  title=gdata.media.Title(text='My Test Movie'),
  description=gdata.media.Description(description_type='plain',
                                      text='My description'),
  keywords=gdata.media.Keywords(text='cars, funny'),
  category=[[]gdata.media.Category(
      text='Autos',
      scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
      label='Autos')],
  player=None,
  private=gdata.media.Private()
)

video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group)

# assuming that video_file_location points to a valid path
new_entry = yt_service.InsertVideoEntry(video_entry, video_file_location)

การอัปโหลดบนเบราว์เซอร์

การอัปโหลดในเบราว์เซอร์จะทำงานเกือบเหมือนกับการอัปโหลดโดยตรง ยกเว้นว่าคุณจะไม่อัปโหลดไฟล์ไบนารีในคำขอเดียวกับที่คุณใช้ส่งข้อมูลเมตาของวิดีโอ แต่เพียงสร้าง YouTubeVideoEntry ที่มีข้อมูลเมตาเท่านั้น จากนั้นระบบจะโพสต์รายการวิดีโอนี้ไปยังลิงก์พิเศษบนเซิร์ฟเวอร์ YouTube API การตอบกลับ XML มี token และ url ซึ่งจะใช้เพื่ออัปโหลดไฟล์ไบนารีได้โดยใช้แบบฟอร์ม HTML มาตรฐาน

# create media group as usual
my_media_group = gdata.media.Group(
  title=gdata.media.Title(text='My Test Movie'),
  description=gdata.media.Description(description_type='plain',
                                      text='My description'),
  keywords=gdata.media.Keywords(text='cars, funny'),
  category=[[]gdata.media.Category(
      text='Autos',
      scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
      label='Autos')],
  player=None
)

# create video entry as usual
video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group)

# upload meta data only
response = yt_service.GetFormUploadToken(video_entry)

# parse response tuple and use the variables to build a form (see next code snippet)
post_url = response[[]0]
youtube_token = response[[]1]

โค้ดด้านบนจะพิมพ์ลิงก์และโทเค็นที่ใช้สร้างแบบฟอร์ม HTML เพื่อแสดงในเบราว์เซอร์ของผู้ใช้ ตัวอย่างแบบฟอร์มง่ายๆ แสดงอยู่ด้านล่าง โดย youtube_token แสดงถึงเนื้อหาขององค์ประกอบโทเค็นที่แสดงผล ดังที่แสดงในการดึงข้อมูลจาก YouTubeVideoEntry ด้านบน โปรดเพิ่มพารามิเตอร์ next ต่อท้าย post_url (ดังที่แสดงด้านล่าง) เพื่อให้ระบบเปลี่ยนเส้นทางผู้ใช้ไปยังเว็บไซต์ของคุณหลังจากส่งแบบฟอร์มแล้ว ซึ่งจะทํางานในลักษณะเดียวกับพารามิเตอร์ next ของลิงก์ AuthSub ความแตกต่างเพียงอย่างเดียวคือ ระบบจะแสดงผลตัวแปร status และ id เป็นพารามิเตอร์ URL แทนโทเค็นแบบใช้ครั้งเดียว

next = 'http://example.com/post_video_upload.pyc'

form = """<form action="%s?nexturl=%s" method="post" enctype="multipart/form-data">
          <input name="file" type="file"/>
          <input name="token" type="hidden" value="%s"/>
          <input value="Upload Video File" type="submit" />
          </form>""" % (post_url, next, youtube_token)

การตอบกลับสำหรับการอัปโหลดที่สำเร็จจะมีลักษณะดังนี้

http://example.com/post_video_upload.pyc?status=200&id=ABC123

พารามิเตอร์ status จะแสดงสถานะธุรกรรม HTTP ของธุรกรรมการอัปโหลด พารามิเตอร์ id จะแสดงผลรหัสวิดีโอ YouTube ที่กำหนดให้กับวิดีโอที่อัปโหลด

กำลังตรวจสอบสถานะการอัปโหลด

หลังจากอัปโหลดวิดีโอแล้ว วิดีโอจะปรากฏในฟีดการอัปโหลดของผู้ใช้ที่ตรวจสอบสิทธิ์ทันที อย่างไรก็ตาม วิดีโอจะไม่แสดงแบบสาธารณะในเว็บไซต์จนกว่าจะได้รับการประมวลผล วิดีโอที่ถูกปฏิเสธหรืออัปโหลดไม่สำเร็จจะอยู่ในฟีดการอัปโหลดของผู้ใช้ที่ตรวจสอบสิทธิ์เท่านั้น โค้ดต่อไปนี้จะตรวจสอบสถานะของ YouTubeVideoEntry เพื่อดูว่ายังไม่เผยแพร่หรือถูกปฏิเสธ

upload_status = yt_service.CheckUploadStatus(new_entry)

if upload_status is not None:
  video_upload_state = upload_status[[]0]
  detailed_message = upload_status[[]1]

การอัปเดตและลบวิดีโอ

การอัปเดตข้อมูลวิดีโอ

หากต้องการอัปเดตข้อมูลเมตาของวิดีโอ ให้อัปเดตออบเจ็กต์ YouTubeVideoEntry แล้วใช้เมธอด UpdateVideoEntry ของออบเจ็กต์ YouTubeService เมธอดนี้ใช้YouTubeVideoEntryที่มีข้อมูลเมตาที่อัปเดตเป็นพารามิเตอร์

# assuming we have a video entry that was just posted in our 'new_entry' variable
new_entry.media.title.text = 'My Updated Video Title'
new_entry.media.description.text = 'Just updated'

updated_entry = yt_service.UpdateVideoEntry(new_entry)

การลบวิดีโอ

การลบวิดีโอนั้นง่ายมาก เพียงเรียกใช้ DeleteVideoEntry ของออบเจ็กต์ YouTubeService

response = yt_service.DeleteVideoEntry(entry_to_be_deleted)

if response:
  print 'Video successfully deleted!'

การใช้ฟีเจอร์ชุมชน

การเพิ่มคะแนน

หากต้องการให้คะแนนวิดีโอ ให้ใช้เมธอด AddRating ของออบเจ็กต์ YouTubeService โปรดทราบว่าคุณไม่สามารถให้คะแนนวิดีโอของคุณเอง และคะแนนต้องอยู่ในช่วง 1 ถึง 5 (รวม)

video_id_to_rate = 'Ncakifd_16k'
video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id_to_rate)
response = yt_service.AddRating(3, video_entry)

ความคิดเห็น

การดึงข้อมูลความคิดเห็นของวิดีโอ

เมื่อระบุออบเจ็กต์ YouTubeVideoEntry หรือรหัสวิดีโอแบบง่าย คุณจะดึงข้อมูลและพิมพ์ฟีดที่มีความคิดเห็นสำหรับวิดีโอได้โดยใช้เมธอด GetYouTubeVideoCommentFeed ของออบเจ็กต์ YouTubeService ฟีดที่ได้จะเป็น gdata.youtube.YouTubeCommentFeed ซึ่งประกอบด้วยออบเจ็กต์ gdata.youtube.YouTubeCommentEntry ฟีดจะแยกวิเคราะห์ได้เช่นเดียวกับฟีดอื่นๆ ดังนี้

video_id = 'ABC123...'
comment_feed = yt_service.GetYouTubeVideoCommentFeed(video_id=video_id)

for comment_entry in comment_feed.entry:
  print comment_entry.ToString()

กำลังเพิ่มความคิดเห็น

หากต้องการเพิ่มความคิดเห็นใหม่ ให้ใช้เมธอด AddComment ของออบเจ็กต์ YouTubeService เมธอดนี้ต้องใช้ออบเจ็กต์ YouTubeVideoEntry แบบเต็มที่จะแสดงความคิดเห็น รวมถึงสตริงที่แสดงความคิดเห็น

my_comment = 'what a boring test video'
video_id = '9g6buYJTt_g'
video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id)
yt_service.AddComment(comment_text=my_comment, video_entry=video_entry)

วิดีโอตอบกลับ

การตอบกลับวิดีโอ YouTube คือวิดีโอที่เชื่อมโยงกับวิดีโอที่ 2 เป็นการตอบกลับ เราเลิกใช้งานฟีเจอร์การตอบกลับด้วยวิดีโอแล้วตามที่อธิบายไว้ในประกาศนี้ แม้ว่าวิดีโอตอบที่มีอยู่จะยังคงใช้งานได้ แต่ YouTube ไม่รองรับการเรียกข้อมูลรายการวิดีโอตอบของวิดีโอหนึ่งๆ, การอัปโหลดวิดีโอตอบใหม่ หรือลบวิดีโอตอบแล้ว แต่คุณจะลบวิดีโอที่ใช้ในวิดีโอตอบได้ ดังนั้น API จึงไม่รองรับฟังก์ชันเหล่านี้อีกต่อไป

ตอนนี้คำขอ API สำหรับการดำเนินการตอบกลับวิดีโอจะแสดงผลลัพธ์ต่อไปนี้

  • คำขอดึงข้อมูลวิดีโอตอบกลับสำหรับวิดีโอแสดงผลเป็นรายการว่าง
  • คำขอเพิ่มคำตอบที่เป็นวิดีโอแสดงรหัสการตอบกลับ HTTP 403
  • คำขอให้ลบคำตอบที่เป็นวิดีโอจะแสดงรหัสการตอบกลับ HTTP 403

การแจ้งว่าวิดีโอไม่เหมาะสม

การเพิ่มการร้องเรียนเกี่ยวกับวิดีโอจะทําด้วยเมธอด AddComplaint ในออบเจ็กต์ YouTubeService หมวดหมู่การร้องเรียนต้องเป็นหมวดหมู่ที่ถูกต้อง โปรดดูข้อมูลเพิ่มเติมในส่วนการเพิ่มการร้องเรียนในคู่มือโปรโตคอล

video_id_to_flag = 'Ncakifd_16k'
complaint_term = 'VIOLENCE'
complaint_text = ('Please ignore this complaint. '
                  'I\'m testing a YouTube API and needed to issue '
                  'a complaint to test the add complaint function. ')

response = yt_service.AddComplaint(complaint_text, complaint_term, video_id_to_flag)

การบันทึกและรวบรวมวิดีโอ

วิดีโอโปรด

การดึงข้อมูลวิดีโอโปรดของผู้ใช้

ผู้ใช้ YouTube สามารถเลือกทำเครื่องหมายวิดีโอที่ดูให้เป็นรายการโปรดได้ ตำแหน่งทั่วไปของฟีดโปรดของผู้ใช้คือ URL ต่อไปนี้

http://gdata.youtube.com/feeds/api/users/username/favorites

หากต้องการเรียกข้อมูลวิดีโอโปรดของผู้ใช้ ให้ใช้เมธอด GetUserFavoritesFeed ของออบเจ็กต์ YouTubeService โดยเมธอดนี้จะรับสตริงที่ไม่บังคับเป็นพารามิเตอร์ซึ่งแสดงถึงชื่อผู้ใช้ YouTube ของผู้ใช้ที่จะดึงข้อมูลฟีดรายการโปรด

favorite_feed = yt_service.GetUserFavoritesFeed(username='gdpython')

ฟีดที่แสดงผลคือฟีดวิดีโอปกติที่มีออบเจ็กต์ YouTubeVideoEntry

หมายเหตุ: หรือจะส่งสตริง default เพื่อเรียกข้อมูลรายการโปรดของผู้ใช้ที่ตรวจสอบสิทธิ์ในปัจจุบันก็ได้ นี่คือลักษณะการทำงานเริ่มต้นของเมธอด GetUserFavoritesFeed หากไม่ได้ระบุชื่อผู้ใช้

การเพิ่มรายการโปรด

หากต้องการเพิ่มวิดีโอโปรด ให้ใช้เมธอด AddVideoEntryToFavorites ของออบเจ็กต์ YouTubeService พารามิเตอร์คือ YouTubeVideoEntry ที่จะเพิ่มและชื่อผู้ใช้ที่จะเพิ่มรายการโปรด (ค่าเริ่มต้นคือผู้ใช้ที่ตรวจสอบสิทธิ์ในปัจจุบัน)

video_id = 'Ncakifd_16k'
video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id)
response = yt_service.AddVideoEntryToFavorites(video_entry)

# The response, if successfully posted is a YouTubeVideoEntry
if isinstance(response, gdata.youtube.YouTubeVideoEntry):
  print 'Video successfully added to favorites'

การลบรายการโปรด

หากต้องการลบรายการโปรด ให้ใช้เมธอด DeleteVideoEntryFromFavorites ของออบเจ็กต์ YouTubeService

video_id = 'Ncakifd_16k'
response = yt_service.DeleteVideoEntryFromFavorites(video_id)
if response is True:
  print 'Video deleted from favorites'

เพลย์ลิสต์

ผู้ใช้ YouTube แต่ละรายจะมีฟีดเพลย์ลิสต์ที่มีเพลย์ลิสต์ทั้งหมดที่ผู้ใช้รายนั้นสร้างขึ้น จากนั้นเพลย์ลิสต์แต่ละรายการจะมีฟีดสำหรับวิดีโอทั้งหมดที่อยู่ในเพลย์ลิสต์นั้น

กำลังเรียกข้อมูลเพลย์ลิสต์ของผู้ใช้

หากต้องการดึงข้อมูลรายการเพลย์ลิสต์ทั้งหมดของผู้ใช้ด้วยตนเอง คุณจะใช้ URL ต่อไปนี้

http://gdata.youtube.com/feeds/api/users/username/playlists

เมื่อใช้ไลบรารีของไคลเอ็นต์ Python คุณจะใช้เมธอด GetYouTubePlaylistFeed ของออบเจ็กต์ YouTubeService ได้โดยทำดังนี้

playlist_feed = yt_service.GetYouTubePlaylistFeed(username='gdpython')

# instead of passing in a username, you can also pass the URI to the playlist feed:
playlist_feed = yt_service.GetYouTubePlaylistFeed(uri='http://gdata.youtube.com/feeds/api/users/default/playlists')

หมายเหตุ: คุณสามารถส่งสตริง 'default' เพื่ออ้างอิงถึงผู้ใช้ที่ตรวจสอบสิทธิ์แล้วในปัจจุบันแทนการส่งชื่อผู้ใช้ที่เฉพาะเจาะจง (เช่น "gdpython" ในตัวอย่างด้านบน)

gdata.youtube.YouTubePlaylistFeed แสดงถึงฟีดของออบเจ็กต์ gdata.youtube.YouTubePlaylistEntry ซึ่งหมายถึงเพลย์ลิสต์แต่ละรายการที่ผู้ใช้อาจมี รายการวิดีโอในเพลย์ลิสต์หนึ่งๆ จะแสดงเป็นออบเจ็กต์ gdata.youtube.YouTubePlaylistVideoEntry ออบเจ็กต์เหล่านี้คล้ายกับออบเจ็กต์ gdata.youtube.YouTubeVideoEntry ปกติมาก โดยมีข้อยกเว้นบางประการ คุณใช้ชื่อและคำอธิบายที่กำหนดเองกับวิดีโอได้ และช่องตำแหน่งจะระบุตำแหน่งที่วิดีโอปรากฏในเพลย์ลิสต์

กำลังดึงข้อมูลเพลย์ลิสต์

เมื่อทราบ YouTubePlaylistEntry (แสดงถึงเพลย์ลิสต์ที่เฉพาะเจาะจง) คุณจะรับ YouTubePlaylistVideoFeed ที่มีออบเจ็กต์ YouTubePlaylistVideoEntry ได้ ดังที่อธิบายไว้ข้างต้น ออบเจ็กต์เหล่านี้แสดงวิดีโอแต่ละรายการในเพลย์ลิสต์ (พร้อมชื่อและคำอธิบายที่กำหนดเองได้) คุณรับฟีดนี้ได้โดยส่ง URI ของเพลย์ลิสต์ไปยังเมธอด GetYouTubePlaylistVideoFeed ของออบเจ็กต์ YouTubeService ดังนี้

# a typical playlist URI
playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'

playlist_video_feed = yt_service.GetYouTubePlaylistVideoFeed(uri=playlist_uri)

# iterate through the feed as you would with any other
for playlist_video_entry in playlist_video_feed.entry:
  print playlist_video_entry.title.text

การเพิ่มเพลย์ลิสต์

หากต้องการเพิ่มเพลย์ลิสต์ใหม่ ให้ใช้เมธอด AddPlaylist ของออบเจ็กต์ YouTubeService เมธอดนี้ใช้พารามิเตอร์ต่อไปนี้ playlist_title, playlist_description (ทั้ง 2 รายการเป็นสตริง) และบูลีนที่ไม่บังคับซึ่งสามารถตั้งค่าเป็น True หากต้องการทําเครื่องหมายเพลย์ลิสต์เป็นส่วนตัว

new_public_playlistentry = yt_service.AddPlaylist('my new playlist', 'a new playlist')

if isinstance(new_public_playlistentry, gdata.youtube.YouTubePlaylistEntry):
  print 'New playlist added'

# adding a private playlist
new_private_playlistentry = yt_service.AddPlaylist('new private playlist', 'a new private playlist', True)

if isinstance(new_private_playlistentry, gdata.youtube.YouTubePlaylistEntry):
  print 'New private playlist added'

การอัปเดตเพลย์ลิสต์

หากต้องการอัปเดตเพลย์ลิสต์ ให้ใช้เมธอด UpdatePlaylist ของออบเจ็กต์ YouTubeService โดยเมธอดนี้ใช้พารามิเตอร์ต่อไปนี้ รหัสของเพลย์ลิสต์ที่จะอัปเดต ชื่อใหม่ คำอธิบายใหม่ ค่าบูลีน (ไม่บังคับ) เพื่อทําเครื่องหมายเพลย์ลิสต์เป็นส่วนตัว และสตริง (ไม่บังคับ) ที่ระบุชื่อผู้ใช้ที่เป็นเจ้าของเพลย์ลิสต์ สตริงจะเป็นค่าเริ่มต้นสำหรับผู้ใช้ที่ตรวจสอบสิทธิ์แล้วในปัจจุบัน

# here we are updating a public playlist with a new title while also making it private

# we assume that playlist_to_be_updated here represents a YouTubePlaylistEntry object
playlist_entry_id = playlist_to_be_updated.id.text.split('/')[[]-1]

# we want to keep the original description for the playlist so we store it first
original_description = playlist_to_be_updated.description.text

updated_playlist = yt_service.UpdatePlaylist(playlist_entry_id,
                                             'a new updated title',
                                             original_playlist_description,
                                             playlist_private=True)

เพิ่มวิดีโอลงในเพลย์ลิสต์

คุณเพิ่มวิดีโอลงในเพลย์ลิสต์ได้โดยใช้เมธอด AddPlaylistVideoEntryToPlaylist ของออบเจ็กต์ YouTubeService โค้ดด้านล่างจะเพิ่มวิดีโอลงในเพลย์ลิสต์พร้อมชื่อและคำอธิบายที่กำหนดเอง

custom_video_title = 'my test video on my test playlist'
custom_video_description = 'this is a test video on my test playlist'
video_id = 'Ncakifd_16k'
playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'

playlist_video_entry = yt_service.AddPlaylistVideoEntryToPlaylist(
    playlist_uri, video_id, custom_video_title, custom_video_description)

if isinstance(playlist_video_entry, gdata.youtube.YouTubePlaylistVideoEntry):
  print 'Video added'

หมายเหตุ: โปรดทราบว่าคุณไม่จำเป็นต้องตั้งชื่อและคำอธิบายที่กำหนดเอง และหากไม่ได้ระบุชื่อและคำอธิบาย ระบบจะใช้ชื่อและคำอธิบายจริงของวิดีโอ

แก้ไขข้อมูลวิดีโอในเพลย์ลิสต์

ใช้เมธอด UpdatePlaylistVideoEntryMetaData ของออบเจ็กต์ YouTubeService เพื่อเปลี่ยนข้อมูลเมตาของ YouTubePlaylistVideoEntry ในตัวอย่างนี้ เราเลือกที่จะตั้งชื่อวิดีโอใหม่ที่กำหนดเองและย้ายวิดีโอไปยังตำแหน่งแรก (ตำแหน่ง 1) ในเพลย์ลิสต์

playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'
playlist_entry_id = 'B0F29389E537F888'

new_video_title = 'a useful video'
new_video_description = 'updated video description'

updated_playlist_video_entry = yt_service.UpdatePlaylistVideoEntryMetaData(
    playlist_uri, playlist_entry_id, new_video_title, new_video_description, 1)

หมายเหตุ: หากต้องการเปลี่ยนคำอธิบายและชื่อของวิดีโอในเพลย์ลิสต์กลับเป็นข้อมูลเมตาเดิม ให้ส่ง NULL สำหรับทั้งชื่อและคำอธิบาย

นำวิดีโอออกจากเพลย์ลิสต์

หากต้องการนำวิดีโอออกจากเพลย์ลิสต์ ให้ใช้เมธอด DeletePlaylistVideoEntry ของออบเจ็กต์ YouTubeService วิธีการนี้ต้องใช้ URI ของเพลย์ลิสต์ที่มีรายการที่จะลบ รวมถึงรหัสของรายการ

playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'
playlist_entry_id = 'B0F29389E537F888'
response = yt_service.DeletePlaylistVideoEntry(playlist_uri,
                                               playlist_entry_id)
if response is True:
  print 'Entry successfully deleted'

การลบเพลย์ลิสต์

หากต้องการลบเพลย์ลิสต์ ให้ใช้เมธอด DeletePlaylist ของออบเจ็กต์ YouTubeService โดยส่ง URI ของเพลย์ลิสต์ที่จะลบ

playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'
response = yt_service.DeletePlaylist(playlist_uri)

if response is True:
  print 'Playlist successfully deleted'

การสมัครใช้บริการ

หากต้องการดึงข้อมูลรายการช่อง การค้นหา และรายการโปรดที่ผู้ใช้รายหนึ่งติดตาม ให้ใช้ URI ต่อไปนี้

http://gdata.youtube.com/feeds/api/users/username/subscriptions

หมายเหตุ: หรือจะส่งสตริง default เพื่อเรียกข้อมูลรายการโปรดของผู้ใช้ที่ตรวจสอบสิทธิ์ในปัจจุบันก็ได้

การเรียกข้อมูลการสมัครใช้บริการของผู้ใช้

โค้ดต่อไปนี้แสดงวิธีเรียกข้อมูลและพิมพ์รายการการติดตามของผู้ใช้รายหนึ่ง การสมัครใช้บริการจะแสดงเป็น gdata.youtube.YouTubeSubscriptionFeed ที่ประกอบด้วยออบเจ็กต์ gdata.youtube.YouTubeSubscriptionEntry หากต้องการเรียกข้อมูลการติดตาม ให้ใช้เมธอด GetYouTubeSubscriptionFeed ของออบเจ็กต์ YouTubeService โดยส่ง URI ของฟีดการติดตามหรือชื่อผู้ใช้ที่จะเรียกข้อมูลฟีดการติดตาม พารามิเตอร์ชื่อผู้ใช้จะเป็นค่าเริ่มต้นของผู้ใช้ที่ตรวจสอบสิทธิ์อยู่ในขณะนี้

subscription_feed = yt_service.GetYouTubeSubscriptionFeed(username='gdpython')

if isinstance(subscription_feed, gdata.youtube.YouTubeSubscriptionFeed)):
  # given a YouTubeSubscriptionEntry we can determine it's type (channel, favorite, or query)
  for entry in subscription_feed.entry:
    print entry.GetSubscriptionType()

การเพิ่มการสมัครใช้บริการ

คุณสามารถสร้างการสมัครใช้บริการใหม่ได้โดยแทรก YouTubeSubsciptionEntry ใหม่ลงในฟีดการสมัครใช้บริการของผู้ใช้ที่ตรวจสอบสิทธิ์แล้ว เราสร้างการติดตามได้ 3 ประเภท ได้แก่ การติดตามช่องของผู้ใช้ (โดยใช้ AddSubscriptionToChannel) การติดตามรายการโปรดของผู้ใช้ (โดยใช้ AddSubscriptionToFavorites) หรือการติดตามคีย์เวิร์ดที่ต้องการ (โดยใช้ AddSubscriptionToQuery) รหัสต่อไปนี้จะติดตามผู้ใช้ที่ตรวจสอบสิทธิ์ให้ช่อง "GoogleDevelopers"

new_subscription = yt_service.AddSubscriptionToChannel(
      username_to_subscribe_to='GoogleDevelopers')

if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry):
  print 'New subscription added'

นอกจากนี้ คุณยังติดตามรายการโปรดของผู้ใช้ "GoogleDevelopers" ได้ด้วย โดยทำดังนี้

new_subscription = yt_service.AddSubscriptionToFavorites(
    username='GoogleDevelopers')
if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry):
  print 'New subscription added'

สุดท้าย คุณยังติดตามข้อความค้นหาที่ต้องการได้อีกด้วย ในส่วนนี้เราจะสมัครรับข้อมูลการค้นหาวิดีโอที่ติดแท็ก "python"

new_subscription = yt_service.AddSubscriptionToQuery(query='python')

if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry):
  print 'New subscription added'

การลบการสมัครใช้บริการ

หากต้องการลบการสมัครใช้บริการของผู้ใช้ ให้ใช้เมธอด DeleteSubscription ของออบเจ็กต์ YouTubeService

sample_subscription_uri = ('http://gdata.youtube.com/feeds/api/users/'
                           'gdpython/subscriptions/c0c77ca6102a7479')

response = yt_service.DeleteSubscription(sample_subscription_uri)

if response is True:
  print 'Subscription successfully deleted'

การเปิดใช้การโต้ตอบของผู้ใช้

โปรไฟล์ผู้ใช้

ดึงข้อมูลโปรไฟล์ของผู้ใช้

หากต้องการดึงข้อมูลโปรไฟล์ YouTube ของผู้ใช้ด้วยตนเอง คุณจะใช้ URI ต่อไปนี้

http://gdata.youtube.com/feeds/api/users/username

คุณสามารถดึงข้อมูล gdata.youtube.YouTubeUserEntry ได้ด้วยเมธอด GetYouTubeUserEntry ของออบเจ็กต์ YouTubeService

user_entry = yt_service.GetYouTubeUserEntry(username='gdpython')

# we can then write a helper function to print out the user details
def PrintUserEntry(entry):
  # print required fields where we know there will be information
  print 'URI: %s\n' % entry.id.text
  print 'Age: %s\n' % entry.age.text
  print 'Gender: %s\n' % entry.gender.text
  print 'Location: %s\n' % entry.location.text

  # check if there is information in the other fields and if so print it
  if user.first_name: 
    print 'First Name: %s\n' % user.first_name.text
  if user.last_name:
    print 'Last Name: %s\n' % user.last_name.text
  if user.relationship:
    print 'Relationship: %s\n' % user.relationship.text
  if user.description:
    print 'About me: %s\n' % user.description.text
  for link in user.link:
    if link.rel == 'related':
      print 'Website: %s\n' % link.href
  if user.company:
    print 'Company: %s\n' % user.company.text
  if user.occupation:
    print 'Occupation: %s\n' % user.occupation.text
  if user.school:
    print 'School: %s\n' % user.school.text
  if user.hobbies:
    print 'Hobbies: %s\n' % user.hobbies.text
  if user.movies:
    print 'Movies: %s\n' % user.movies.text
  if user.music:
    print 'Music: %s\n' % user.music.text
  if user.books:
    print 'Books: %s\n' % user.books.text
  if user.hometown:
    print 'Hometown: %s\n' % user.hometown.text

รายชื่อติดต่อ

คุณสามารถเรียกข้อมูลรายชื่อติดต่อของผู้ใช้รายหนึ่งๆ ได้จาก URL ต่อไปนี้

http://gdata.youtube.com/feeds/api/users/username/contacts

การดึงข้อมูลรายชื่อติดต่อของผู้ใช้

คุณสามารถใช้เมธอด GetYouTubeContactFeed ของออบเจ็กต์ YouTubeService เพื่อดึงข้อมูล gdata.youtube.YouTubeContactFeed ซึ่งประกอบด้วยออบเจ็กต์ gdata.youtube.YouTubeContactEntry

contact_feed = yt_service.GetYouTubeContactFeed(username='GoogleDevelopers')
for entry in contact_feed.entry:
  print entry.title.text
  # find the apprpriate category element to find out the contact type
  for category in entry.category:
    if category.scheme == 'http://gdata.youtube.com/schemas/2007/contact.cat':
      print category.term

การเพิ่มรายชื่อติดต่อ

หากต้องการเพิ่มรายชื่อติดต่อใหม่ลงในฟีดรายชื่อติดต่อของผู้ใช้ ให้ใช้เมธอด AddContact ของออบเจ็กต์ YouTubeService

new_contact = yt_service.AddContact(contact_username='GoogleDevelopers')

if isinstance(new_contact, gdata.youtube.YouTubeContactEntry)
  print 'New contact added'

ยอมรับ/ปฏิเสธรายชื่อติดต่อ

หากต้องการอัปเดตรายชื่อติดต่อ ให้ใช้เมธอด UpdateContact ของออบเจ็กต์ YouTubeService วิธีนี้สามารถใช้เพื่อยอมรับ/ปฏิเสธคำขอติดต่อ และจัดหมวดหมู่รายชื่อติดต่อเป็น "เพื่อน" หรือ "ครอบครัว" ในตัวอย่างด้านล่าง เรายอมรับรายชื่อติดต่อ แล้วตั้งค่าหมวดหมู่เป็น "ครอบครัว"

# in this case user 'gdpython' has requested to be our contact
#so the original contact status is 'pending'
updated_contact = yt_service.UpdateContact('gdpython', 'accepted', 'Family')

if isinstance(updated_contact, gdata.youtube.YouTubeContactEntry)
  print 'New contact added'

การลบรายชื่อติดต่อ

หากต้องการลบรายชื่อติดต่อ ให้ใช้เมธอด DeleteContact ของออบเจ็กต์ YouTubeService โดยส่งผ่านชื่อผู้ใช้ของรายชื่อติดต่อที่ต้องการลบ

response = yt_service.DeleteContact(contact_username='gdpython')

if response is True:
  print 'Contact deleted'

กลับไปด้านบน