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

この記事は、外部デベロッパーによって作成されたものです。YouTube API とツールのチームは、Martin Legris 氏の貴重な時間と専門知識に心から感謝します。


Martin Legris
2008 年 3 月

はじめに

このチュートリアルでは、10 行未満の実際の AS3 コードを使用して、最後の dayweekmonth、または all_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 件)をリクエストしました(呼び出しごとに最大 50 件の結果があります)。簡単です!

結果を処理する

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

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

呼び出す関数は doVideosReceived です。StandardVideoFeedEvent 型の変数である 1 つのパラメータを受け取ります。これは AS3 の標準に準拠しています。動画を宣言して、受け取った動画に関していくつか確認させてください。標準出力にトレースします。

  • 動画のタイトル
  • 動画を埋め込む Gradle の 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 プロパティがあります。この呼び出しで返されるレコードは 1 つのみであるため、ProfileEvent は例外で、代わりに .profile プロパティを持ちます。

フィードにはさまざまなタイプがあり、それらすべてが次のメソッドを実装します。

  • first() -- 最初のレコードを取得し、それを指す
  • next() -- 次の利用可能なレコードを取得する
  • last() -- 最後のレコードを取得し、それを指す
  • previous() -- フィードで以前のレコードを取得する
  • getAt() -- 特定の位置で結果を取得する
  • count() -- このフィードで利用可能な結果の数。totalResults とは異なります。

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

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

完全なソースコード

この例の完全なソースコードは次のとおりです。Flash CS3 内でこの例を実行するために必要なものがすべて含まれている ZIP をダウンロードすることもできますが、バグの修正や機能の更新に備えてライブラリを更新することをおすすめします。ライブラリはこちらからダウンロードできます。

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 と Flash です。blog.martinlegris.comwww.newcommerce.ca のウェブサイト (古いもの) をご覧ください。

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