YouTube Data API สําหรับ Action 3.0 : ขั้นตอนแรก

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

การเจาะลึกเนื้อหา

การส่งคําขอแรก

โค้ดด้านล่างมีความคิดเห็นค่อนข้างดี แต่ฉันจะอธิบายฟังก์ชันการทํางานเล็กน้อยก่อนที่จะเจาะลึกลงไป จุดเริ่มต้นสําหรับคําขอทั้งหมดเป็นคลาสชื่อ 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 โดยใช้ไลบรารีนี้ทําได้ง่ายเพียงใด เนื่องจากฉันใช้เวลาพิมพ์ทุกอย่างได้ยากมาก ดังนั้นฉันจึงสามารถสํารวจข้อมูลการตอบกลับฟีดแต่ละครั้งได้อย่างง่ายดาย ยังไม่รองรับฟังก์ชันเขียนและอัปโหลดใหม่ แต่หากต้องการมีส่วนร่วมในไลบรารี โปรดไปที่หน้าโปรเจ็กต์

ประวัติผู้เขียน


AUTHORNAME

Martin Legris ได้รับการพัฒนาซอฟต์แวร์มาเป็นเวลา 12 ปี ปัจจุบันเขามุ่งเน้นการวิจัยอินเทอร์เฟซผู้ใช้เป็นหลัก และเครื่องมือของเขาจึงใช้ Flash ร่วมกับ AJAX ดูบล็อกของเขาได้ที่ blog.martinlegris.com และเว็บไซต์ (เลิกใช้ได้) ที่ www.newcommerce.ca

สัญญาอนุญาตครีเอทีฟคอมมอนส์ (Creative Commons License)
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์ (Creative Commons Attribution License) 3.0 ของสหรัฐอเมริกา