API ข้อมูลของ YouTube สำหรับ ActionScript 3.0 : ขั้นตอนแรก

บทความนี้เขียนและส่งโดยนักพัฒนาแอปภายนอก ทีม API และเครื่องมือของ YouTube ขอขอบคุณ Martin Legris ที่สละเวลาและความเชี่ยวชาญของตนเอง


Martin Legris
มีนาคม 2008

บทนำ

ในบทแนะนำนี้ เราจะแสดงวิธีที่คุณสามารถใช้โค้ด AS3 จริงที่ยาวไม่เกิน 10 บรรทัด คุณสามารถเรียกดูวิดีโอที่ได้รับความนิยมมากที่สุดบน YouTube สำหรับ day, week, month หรือ all_time ล่าสุด คุณจะได้รับฟีดมาตรฐานต่อไปนี้

  • มียอดดูมากที่สุด
  • ใหม่ล่าสุด
  • มีคนกล่าวถึงมากที่สุด
  • มีการเชื่อมโยงมากที่สุด
  • มีการตอบกลับมากที่สุด
  • วิดีโอเด่นล่าสุด
  • มีคะแนนสูงสุด
  • สุดโปรด
  • วิดีโอสำหรับโทรศัพท์มือถือ

ไลบรารีที่ใช้ในตัวอย่างนี้เป็นแบบฮาร์ดไทป์ตลอด ซึ่งหมายความว่าเมื่อได้รับข้อมูลแล้ว คุณจะใช้ฟีเจอร์เติมข้อความอัตโนมัติใน IDE เช่น FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea และอื่นๆ ได้

แหล่งข้อมูลสำคัญ

ก่อนเริ่มต้น เราขอแนะนำแหล่งข้อมูลสำหรับคุณซึ่งเป็นนักพัฒนาแอป AS3 ที่ต้องการใช้ข้อมูลจาก YouTube API

เจาะลึก

การส่งคำขอครั้งแรก

โค้ดที่ตามมาเป็นโค้ดที่ค่อนข้างตรง อย่างไรก็ตาม ฉันจะอธิบายฟังก์ชันการทำงานดังกล่าวสักเล็กน้อยก่อนที่จะเจาะลึกรายละเอียด จุดเริ่มต้นของคำขอทั้งหมดคือคลาสชื่อ YouTubeClient คลาสนี้เป็น Singleton ที่คุณเข้าถึงได้โดยทำดังนี้

// 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 รายการต่อการเรียกใช้ 1 ครั้ง) ง่ายมาก

การจัดการผลลัพธ์

แล้วฉันจะเข้าถึงผลลัพธ์เหล่านี้ได้อย่างไร เนื่องจากรูปแบบบริการเว็บของประเภท 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);
	}
}

ข้อควรทราบบางประการเกี่ยวกับคลังและฟีด

เหตุการณ์เกือบทั้งหมดมีพร็อพเพอร์ตี้ .feed ข้อยกเว้นหนึ่งคือ ProfileEvent แต่มีพร็อพเพอร์ตี้ .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 พร้อม ActionScript โปรดไปที่บล็อกของเขาที่ blog.martinlegris.com และเว็บไซต์ (อาจล้าสมัย) ที่ www.newcommerce.ca

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