این مقاله توسط یک توسعه دهنده خارجی نوشته و ارسال شده است. تیم 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 است.
- کتابخانه AS3 که من برای استفاده از این خدمات وب ایجاد کردم
- اسناد رسمی YouTube Data API
- FlashDevelop 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 ناهمزمان است، استفاده از رویدادها برای مدیریت نتایج به جای توقف کد در حین واکشی نتایج آسان تر است. در این مورد، باید یک شنونده رویداد برای رویداد 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 Attribution 3.0 ایالات متحده مجوز دارد.