YouTube Data API برای ActionScript 3.0: مراحل اول

این مقاله توسط یک توسعه دهنده خارجی نوشته و ارسال شده است. تیم YouTube APIs and Tools از مارتین لگریس برای وقت و تخصصش تشکر می کند.


مارتین لگریس
مارس 2008

معرفی

در این آموزش به شما نشان خواهم داد که چگونه با کمتر از 10 خط کد AS3 واقعی، می‌توانید محبوب‌ترین ویدیوهای YouTube را برای آخرین day ، week ، month یا all_time بازیابی کنید. می توانید هر یک از فیدهای استاندارد را دریافت کنید:

  • پربیننده ترین
  • اخیرا
  • بیشترین بحث
  • بیشترین پیوند
  • بیشترین پاسخ داده شده
  • به تازگی برجسته شده است
  • رتبه برتر
  • برترین های مورد علاقه
  • فیلم برای تلفن های همراه

کتابخانه مورد استفاده در این مثال به سختی تایپ شده است، به این معنی که پس از دریافت داده ها، می توانید از ویژگی تکمیل خودکار در IDE هایی مانند FlashDevelop، 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 ناهمزمان است، استفاده از رویدادها برای مدیریت نتایج به جای توقف کد در حین واکشی نتایج آسان تر است. در این مورد، باید یک شنونده رویداد برای رویداد StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED اعلام کنیم. هر بار که YouTubeClient پاسخی برای یک فید استاندارد دریافت می کند، عملکرد ما فراخوانی می شود.

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

تابعی که باید فراخوانی شود doVideosReceived خواهد بود. این یک پارامتر نیاز دارد، متغیری از نوع 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 پیچیده شده‌اند، بنابراین می‌توانید از همان توابع برای عبور از دسته‌های موجود استفاده کنید.

کد منبع کامل

کد منبع کامل این مثال در زیر آمده است. می‌توانید فایل فشرده‌ای را دانلود کنید که حاوی همه چیزهایی است که برای اجرای مثال در داخل 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 با استفاده از این کتابخانه. از آنجایی که من برای تایپ سخت همه چیز وقت گذاشته‌ام، کشف اینکه چه داده‌هایی در هر پاسخ فید در دسترس است، کار سختی است. هنوز از عملکرد جدید نوشتن و آپلود پشتیبانی نمی‌کند، اما اگر می‌خواهید به کتابخانه کمک کنید، از صفحه پروژه دیدن کنید.

بیوگرافی نویسنده


نام نویسنده

مارتین لگریس دارای 12 سال توسعه نرم افزار فعال است. امروزه، او عمدتاً بر روی تحقیقات رابط کاربری متمرکز است و ابزار مورد علاقه او Flash w/ActionScript است. وبلاگ او را در blog.martinlegris.com و وب سایت (می تواند قدیمی باشد) در www.newcommerce.ca بررسی کنید.

مجوز Creative Commons
این اثر تحت مجوز Creative Commons Attribution 3.0 ایالات متحده مجوز دارد.