YouTube Data API ל-ActionScript 3.0 : שלבים ראשונים

המאמר הזה נכתב ונשלח על ידי מפתח חיצוני. צוות הכלים וה-API של YouTube מודה למרטין לגריס על הזמן והמומחיות שלו.


מרטין לגריס
מרץ 2008

מבוא

במדריך הזה אראה לכם איך עם פחות מ-10 שורות של קוד AS3 בפועל, אפשר לאחזר את הסרטונים הפופולריים ביותר ב-YouTube ב-day, ב-week, ב-month או ב-all_time האחרונים. אפשר לקבל כל אחד מהפידים הרגילים:

  • הנצפים ביותר
  • האחרונים
  • הנדונים ביותר
  • המקושרים ביותר
  • עם התגובות הרבות ביותר
  • נבחרו לאחרונה
  • המובילים בדירוג
  • המועדפים המובילים
  • סרטונים לטלפונים ניידים

הספרייה שבה נעשה שימוש בדוגמה זו כתובה בתוך כל הטקסט, כלומר, לאחר קבלת הנתונים, תוכל להשתמש בתכונת ההשלמה האוטומטית בסביבות פיתוח משולבות כגון Flashפיתוח, Flex IDE, Eclipse w/FDT, IntelliJ Idea ועוד.

מקורות מידע חשובים

לפני שנתחיל, הנה רשימה של המשאבים שזמינים לך – מפתח AS3 שמעוניין להשתמש בנתונים מה-API של YouTube.

מתעמקים בנתונים

שליחת הבקשה הראשונה

הקוד שמופיע לאחר מכן טוב מאוד. עם זאת, אני אתאר את הפונקציונליות קצת לפני שארחיב. נקודת ההתחלה של כל הבקשות היא מחלקה בשם 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 היא אסינכרונית, קל יותר להשתמש באירועים כדי לטפל בתוצאות במקום לעצור את הקוד בזמן שהתוצאות מאוחזרות. במקרה הזה, אנחנו צריכים להצהיר על event listener עבור האירוע 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, כך שניתן להשתמש באותן פונקציות כדי לעבור בין הקטגוריות הזמינות.

השלמת קוד המקור

בדוגמה הבאה מופיע קוד המקור המלא. ניתן להוריד קובץ 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 באמצעות הספרייה הזו. מכיוון שלקח לי זמן להקליד את כל הפרטים הדרושים, קל מאוד לברר אילו נתונים זמינים בכל תגובה לעדכון. הוא עדיין לא תומך בפונקציונליות החדשה של כתיבה והעלאה, אבל אם אתם רוצים להוסיף תוכן לספרייה, אתם יכולים להיכנס לדף הפרויקט.

ביוגרפיה של המחבר


שם

ל-Martin Legris יש 12 שנות פיתוח תוכנה פעיל. היום הוא מתמקד בעיקר במחקר ממשק המשתמש, והכלי האהוב עליו הוא Flash עם ActionScript. אתם יכולים לבקר בבלוג שלו בכתובת blog.martinlegris.com ובאתר שלו (מיושן) בכתובת www.newcommerce.ca.

רישיון Creative Commons
העבודה הזו מורשית במסגרת רישיון Creative Commons Attribution 3.0 בארצות הברית.