YouTube Data API for CTA 3.0 : 最初のステップ

この記事は外部のデベロッパーによって作成、送信されました。 YouTube の API とツールチームは、Martin Legris の貢献と専門知識に感謝しています。


Martin Legris 氏
2008 年 3 月

はじめに

このチュートリアルでは、実際の AS3 コードを 10 行未満で記述し、過去 dayweekmonthall_time 日間の YouTube で最も視聴された動画を取得する方法について説明します。次の標準フィードを取得できます。

  • 再生回数順
  • 新着順
  • 話題の動画
  • リンク数の多い動画
  • コメントの多い動画
  • 最近のおすすめ
  • 評価の高い動画
  • お気に入り登録数の多い動画
  • スマートフォン向け動画

この例で使用されているライブラリは、全体的にハードタイピングされています。つまり、データを受け取ったら、FlashDevelop、Flex IDE、Eclipse w/FDT、IntelliJ Idea などの IDE で自動補完機能を使用できます。

重要なリソース

始める前に、YouTube API のデータの使用に関心のある AS3 デベロッパーの皆様にご利用いただけるリソースのリストをご用意しました。

さらに詳しく

最初のリクエストの送信

次のコードは、かなり詳細なコメントが記述されています。ただし、詳細に入る前に、機能について少し説明します。すべてのリクエストの出発点は、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 件)をリクエストしました(1 回の呼び出しで取得できる結果は最大 50 件です)。簡単です。

結果の処理

では、これらの結果にアクセスするにはどうすればよいですか?REST タイプのウェブサービス パラダイムは非同期であるため、結果の取得中にコードを停止するのではなく、イベントを使用して結果を処理する方が簡単です。この場合、StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED イベントのイベント リスナーを宣言する必要があります。この関数は、YouTubeClient が標準フィードのレスポンスを受信するたびに呼び出されます。

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

呼び出される関数は doVideosReceived です。パラメータは 1 つで、StandardVideoFeedEvent 型の変数です。これは AS3 の標準に準拠しています。問題の動画に関するいくつかの情報をトラッキングできるように、問題の動画として報告してください。標準出力にトレースします。

  • 動画のタイトル
  • 動画を埋め込む SWF の URL
  • 視聴回数
  • コメント数
  • 動画の再生時間
  • 作成者名が含まれます
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 は 1 つの例外で、代わりに .profile プロパティが含まれています。この呼び出しによって返されるレコードは 1 つのみです。

フィードにはさまざまな種類があり、すべて次のメソッドを実装しています。

  • first() -- 最初のレコードを取得してそれを参照します。
  • next() -- 次に使用可能なレコードを取得します。
  • last() -- 最後のレコードを取得し、それを指す
  • previous() - フィード上の前のレコードを取得します。
  • getAt() - 特定の位置の結果を取得する
  • count() -- このフィードで表示できる検索結果の数。totalResults とは異なる数です。

結果の最後に達すると、next() は null を返します。前と同様に、最初の結果が得られると、次の previous() の呼び出しで null が返されます。

フィード内のデータ(カテゴリなど)は Iterators 内でラップされるため、同じ関数を使用して利用可能なカテゴリを確認できます。

完全なソースコード

この例の完全なソースコードを次に示します。zip をダウンロードすることもできます。この 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 年間にわたりソフトウェア開発に携わっています。現在は主にユーザー インターフェースの研究に取り組んでおり、お気に入りのツールは ActionScript を使用した Flash です。彼のブログ(blog.martinlegris.com)とウェブサイト(www.newcommerce.ca)をご覧ください。

クリエイティブ・コモンズ ライセンス
このコンテンツは、クリエイティブ・コモンズ表示 3.0 米国ライセンスにより使用許諾されています。