تمت كتابة هذه المقالة وإرسالها بواسطة مطوّر برامج خارجي. يتوجه فريق الأدوات وواجهات برمجة التطبيقات في YouTube بالشكر إلى مارتن ليجريس على وقته وخبرته.
مارتن ليجريس
آذار (مارس) 2008
المقدمة
سنشرح لك في هذا البرنامج التعليمي كيفية استرداد الفيديوهات الأكثر رواجًا على YouTube في آخر day
أو week
أو month
أو all_time
باستخدام أقلّ من 10 أسطر في رمز AS3. يمكنك الحصول على أيٍّ من الخلاصات القياسية:
- الأكثر مشاهدة
- الأحدث
- الأكثر مناقشة
- الأكثر ارتباطًا
- الأكثر ردودًا
- مميزة مؤخرًا
- الأعلى تقييمًا
- أبرز الفيديوهات المفضلة
- مقاطع فيديو لهواتف الجوال
تكون المكتبة المستخدمة في هذا المثال مكتوبة بأحرف كبيرة، بمعنى أنه بعد تلقي البيانات، يمكنك استخدام ميزة الإكمال التلقائي في IDE مثل Flashتطوير البرامج، وFlex IDE، وEclipse w/FDT، وIntelliJ Idea، والمزيد.
مراجع مهمة
قبل البدء، إليك قائمة بالموارد المتاحة لك - مطوّر برامج AS3 المهتم باستخدام البيانات من واجهة برمجة تطبيقات YouTube.
- مكتبة AS3 التي طوّرتها لاستهلاك خدمات الويب هذه
- الوثائق الرسمية لواجهة برمجة التطبيقات لبيانات YouTube
- برنامج IDE لتطوير Flash لـ 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()
قيمة فارغة. الشيء نفسه بالنسبة إلى السابق، عند الوصول إلى النتيجة الأولى، فإن المكالمة التالية إلى previous()
ستعرض null
.
لاحظ أن البيانات داخل الخلاصات (مثل الفئات) يتم تضمينها داخل Iterators
، لذا يمكنك استخدام الوظائف نفسها للتنقل عبر الفئات المتاحة.
رمز المصدر الكامل
في ما يلي رمز المصدر الكامل لهذا المثال. يمكنك تنزيل ملف zip يحتوي على كل ما تحتاجه لتشغيل مثال داخل Flash Flash الإصدار 3، ولكن من الأفضل تحديث المكتبة في حالة إصلاح الأخطاء أو تحديث الميزات. يمكنك تنزيل المكتبة بالنقر هنا.
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 في الولايات المتحدة.