บทความนี้เขียนโดยนักพัฒนาแอปภายนอก ทีม API และเครื่องมือของ YouTube ขอขอบคุณ Martin Legris ที่สละเวลาและความเชี่ยวชาญ
Martin Legris
มีนาคม 2008
บทนำ
ในบทแนะนํานี้ ผมจะแสดงวิธีทําวิดีโอยอดนิยมที่สุดบน YouTube สําหรับ day
, week
, month
หรือ all_time
ไม่เกิน 10 บรรทัดสําหรับโค้ด AS3 จริง คุณจะรับฟีดมาตรฐานได้ดังต่อไปนี้
- มียอดดูมากที่สุด
- รายการล่าสุด
- มีคนกล่าวถึงมากที่สุด
- มีการเชื่อมโยงมากที่สุด
- มีการตอบกลับมากที่สุด
- วิดีโอเด่นล่าสุด
- มีคะแนนสูงสุด
- รายการโปรดยอดนิยม
- วิดีโอสําหรับโทรศัพท์มือถือ
ไลบรารีที่ใช้ในตัวอย่างนี้มีการพิมพ์ผิดประเภท ซึ่งหมายความว่าคุณจะได้รับข้อมูลเมื่อใช้ฟีเจอร์เติมข้อมูลอัตโนมัติใน IDE เช่น Flash Development, Flex IDE, Eclipse w/FDT, IntelliJ Idea และอื่นๆ
แหล่งข้อมูลสําคัญ
ก่อนที่จะเริ่มต้น นี่คือรายการแหล่งข้อมูลสําหรับคุณ นักพัฒนาซอฟต์แวร์ AS3 ที่สนใจใช้ข้อมูลจาก YouTube API
- ไลบรารี AS3 ที่ฉันพัฒนาขึ้นเพื่อใช้บริการเว็บเหล่านี้
- เอกสารประกอบอย่างเป็นทางการของ YouTube Data API
- Flash Development IDE สําหรับ AS3
- รายการเหตุการณ์ที่เริ่มทํางานโดยคําขอเรียกใช้ใน YouTubeClient
การเจาะลึกเนื้อหา
การส่งคําขอแรก
โค้ดด้านล่างมีความคิดเห็นค่อนข้างดี แต่ฉันจะอธิบายฟังก์ชันการทํางานเล็กน้อยก่อนที่จะเจาะลึกลงไป จุดเริ่มต้นสําหรับคําขอทั้งหมดเป็นคลาสชื่อ YouTubeClient
ชั้นเรียนนี้เป็นเพียงชั้นเดียวที่คุณจะได้รับสิทธิ์เข้าถึงดังนี้
// first you import it import ca.newcommerce.youtube.webservice.YouTubeClient; // then you get a reference to it var client:YouTubeClient = YouTubeClient.getInstance();
ตอนนี้เราพร้อมที่จะส่งคําขอแล้ว
client.getStandardFeed(YouTubeClient.STD_TOP_RATED, YouTubeClient.TIME_MONTH, 1, 10);
ฉันเพิ่งขอวิดีโอที่ได้รับคะแนนสูงสุดในเดือนที่ผ่านมา ผลการค้นหาตั้งแต่ 1 ถึง 10 (โปรดทราบว่ามีผลการค้นหาได้สูงสุด 50 ครั้งต่อการโทร) ง่าย
การจัดการผลการค้นหา
แล้วฉันจะเข้าถึงผลการค้นหาเหล่านี้ได้อย่างไร เนื่องจากกระบวนทัศน์ประเภท REST แบบบริการบนเว็บเป็นแบบไม่พร้อมกัน ระบบจึงใช้เหตุการณ์เพื่อจัดการผลลัพธ์ได้ง่ายขึ้น แทนที่จะหยุดการทํางานของโค้ดในขณะที่ดึงผลลัพธ์ ในกรณีนี้ เราต้องประกาศ Listener เหตุการณ์สําหรับ StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED
ระบบจะเรียกใช้ฟังก์ชันของเราทุกครั้งที่ YouTubeClient
ได้รับการตอบกลับสําหรับฟีดมาตรฐาน
client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, doVideosReceived);
ฟังก์ชันที่เรียกใช้จะเป็น doVideosReceived
ซึ่งจะใช้กับพารามิเตอร์ 1 รายการ ซึ่งเป็นตัวแปรประเภท StandardVideoFeedEvent
ซึ่งเป็นไปตามมาตรฐานใน AS3 เราขอประกาศให้เราทราบและแจ้งให้เราติดตามบางเรื่องเกี่ยวกับวิดีโอที่เราได้รับ เราจะติดตามเอาต์พุตมาตรฐาน ดังนี้
- ชื่อของวิดีโอ
- URL ของ SWF เพื่อฝังวิดีโอ
- ยอดดู
- จํานวนความคิดเห็น
- ระยะเวลาของวิดีโอ
- และชื่อผู้เขียน
function doVideosReceived(evt:StandardVideoFeedEvent):void { // get a reference to the feed containing the videos var feed:VideoFeed = evt.feed; // variable to hold each video retreived on the feed var video:VideoData; // iterate through the availabe results while(video = feed.next()) { // trace a newline followed by the video title trace("\nvideo title:"+video.title); // trace the url to use to embed the flash player with this video playing in it.. trace("player url:"+video.swfUrl); // the view count trace("viewCount:"+video.viewCount); // the comment count trace("commentCount:"+video.commentCount); // the duration trace("duration:"+video.duration); // the author trace("author:"+video.authors.first().name); } }
หมายเหตุ 2-3 ข้อเกี่ยวกับห้องสมุดและฟีด
เหตุการณ์เกือบทั้งหมดมีพร็อพเพอร์ตี้ .feed
ProfileEvent
คือข้อยกเว้น 1 รายการ และมีพร็อพเพอร์ตี้ .profile
แทน เนื่องจากมีระเบียนเดียวที่แสดงโดยการโทรนี้
ฟีดมีหลายประเภท โดยทั้งหมดจะใช้วิธีการต่อไปนี้
first()
-- เรียกดูระเบียนแรกและชี้ไปที่ระเบียนnext()
-- เรียกดูระเบียนถัดไปที่ใช้ได้last()
-- เรียกระเบียนสุดท้ายแล้วชี้ไปที่ระเบียนนั้นprevious()
-- เรียกข้อมูลระเบียนก่อนหน้าในฟีดgetAt()
-- แสดงผลลัพธ์ในตําแหน่งที่เจาะจงcount()
-- จํานวนผลลัพธ์ที่ใช้ได้สําหรับฟีดนี้ ไม่เหมือนกับtotalResults
เมื่อไปถึงผลลัพธ์ของผลการค้นหา next()
จะแสดงผลค่า Null ในทํานองเดียวกันนี้ เมื่อคุณไปยังผลลัพธ์แรก การโทรครั้งถัดไปไปที่ previous()
จะแสดงผล null
โปรดทราบว่าข้อมูลภายในฟีด (เช่น หมวดหมู่) จะรวมกันภายใน Iterators
คุณจึงสามารถใช้ฟังก์ชันเดียวกันเพื่อดูหมวดหมู่ที่พร้อมใช้งานได้
ซอร์สโค้ดที่สมบูรณ์
ต่อไปนี้เป็นซอร์สโค้ดแบบเต็มสําหรับตัวอย่างนี้ คุณสามารถดาวน์โหลด ZIP ซึ่งมีทุกอย่างที่จําเป็นต่อการเรียกใช้ตัวอย่างภายใน Flash CS3 แต่วิธีที่ดีที่สุดคืออัปเดตไลบรารีในกรณีที่เราแก้ไขข้อบกพร่องหรืออัปเดตฟีเจอร์แล้ว คุณสามารถดาวน์โหลดไลบรารีได้โดยคลิกที่นี่
package { // first import dependencies (You can be more specific than this if you want) import ca.newcommerce.youtube.data.*; import ca.newcommerce.youtube.events.*; import ca.newcommerce.youtube.feeds.*; import ca.newcommerce.youtube.iterators.*; import ca.newcommerce.youtube.webservice.YouTubeClient; public class ytTest() { // some class variables protected var _ws:YouTubeClient; protected var _requestId:Number; public function ytTest() { // now inside of an init function _ws = YouTubeClient.getInstance(); // register to list to the events you are interested in _ws.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, doVideosReceived); // do your call.. get the Top Rated videos for the last month // results 1 to 10; it returns a requestId _requestId = _ws.getStandardFeed(YouTubeClient.STD_TOP_RATED, YouTubeClient.TIME_MONTH, 1, 10); } protected function doVideosReceived(evt:StandardVideoFeedEvent):void { // get a reference to the feed containing the videos var feed:VideoFeed = evt.feed; // variable to hold each video retrieved on the feed var video:VideoData; while(video = feed.next()) { // trace a newline followed by the video title trace("\nvideo title:"+video.title); // trace the swf URL (used for embedding) trace("player url:"+video.swfUrl); // the view count trace("viewCount:"+video.viewCount); // the comment count trace("commentCount:"+video.commentCount); // the duration trace("duration:"+video.duration); // the author trace("author:"+video.authors.first().name); } } } }
บทสรุป
ถึงแม้ว่าบทความนี้จะไม่ตรงกับสไลด์น้ําแข็ง แต่จะทําให้คุณเข้าใจได้ง่ายว่าการค้นหา YouTube Data API โดยใช้ไลบรารีนี้ทําได้ง่ายเพียงใด เนื่องจากฉันใช้เวลาพิมพ์ทุกอย่างได้ยากมาก ดังนั้นฉันจึงสามารถสํารวจข้อมูลการตอบกลับฟีดแต่ละครั้งได้อย่างง่ายดาย ยังไม่รองรับฟังก์ชันเขียนและอัปโหลดใหม่ แต่หากต้องการมีส่วนร่วมในไลบรารี โปรดไปที่หน้าโปรเจ็กต์
ประวัติผู้เขียน
Martin Legris ได้รับการพัฒนาซอฟต์แวร์มาเป็นเวลา 12 ปี ปัจจุบันเขามุ่งเน้นการวิจัยอินเทอร์เฟซผู้ใช้เป็นหลัก และเครื่องมือของเขาจึงใช้ Flash ร่วมกับ AJAX ดูบล็อกของเขาได้ที่ blog.martinlegris.com และเว็บไซต์ (เลิกใช้ได้) ที่ www.newcommerce.ca
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์ (Creative Commons Attribution License) 3.0 ของสหรัฐอเมริกา