บทความนี้เขียนโดยนักพัฒนาแอปภายนอก ทีม 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 ของสหรัฐอเมริกา