気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Google Data APIとFlash PlayerのActiveXコントローラを使って、簡単なYouTubeビューワーを作ってみたいと思います。

今日はまず、youtubeに登録されている動画エントリを検索して取得してくるところをやってみたいと思います。開発環境はフリーの「Visual C# Express 2008」を使います。

Google Data APIはAtomをベースにしているので、生でHTTP接続して必要なデータをもってくることもできると思うのですが、それっとちょっと面倒くさいです。探してみると ここ に.NET用のクライアントライブラリがありました!

ZIP形式でダウンロードして解凍します。参照設定で、「Google.GData.Extensions.dll」、「Google.GData.YouTube.dll」を追加して準備完了。

ビューワーの画面にはYoutubeのWebサイトと同じようにタイトルと、説明、あとサムネイルの画像を表示してみたいので、それらをAPIを使って取得します。もちろん動画のURLでもですね。まずはAPIの動きを確認したいので、コンソールアプリケーションで、取得した情報を表示してみます。 まずは、以下のusing句を追加

 using Google.GData.Extensions.MediaRss; 
 using Google.GData.YouTube;

次に検索してFeedを取得する部分。

   //サービスを作成
   YouTubeService service = new YouTubeService("example"); //引数はなんでもいい。

   //クエリを生成
   YouTubeQuery query = new YouTubeQuery();
   query.StartIndex = 0; //取得するレコードの開始位置
   query.NumberToRetrieve = 10; //取得件数

   //args[0]の部分に検索文字列をいれる
   query.Uri = new Uri(
                        String.Format("http://gdata.youtube.com/feeds/api/videos?vq={0}",
                        HttpUtility.UrlEncode(args[0]))
                    );

   //クエリーを発行
   YouTubeFeed feed = service.Query(query);



そして、取得したFeedから情報を取り出します。youtubeのFeedはこんな感じになってます。
  ← YouTubeFeedクラス
   ← YouTubeEntryクラス
      ← MediaGroupクラス ここにタイトルと説明がある 
         ← MediaContentクラス 動画のURLがある
         ← MediaThumbnailクラス ← サムネイルのURLがある


対応する各クラスから情報を取得します。

   //エントリ数分ループ
   foreach (YouTubeEntry entry in feed.Entries)
   {
       MediaGroup group = entry.Media;

       //タイトルと説明
       Console.WriteLine("Title / {0}", group.Title.Value);
       Console.WriteLine("Desc / {0}", group.Description.Value);

       //コンテンツ数分ループ
       foreach (MediaContent content in group.Contents)
       {
           SortedList attributes = content.Attributes;

           //属性数分ループ
           foreach (DictionaryEntry attribute in attributes)
           {
              if (attribute.Key.Equals("url"))
              { 
                  //動画のURL
                  Console.WriteLine("URL / {0}", attribute.Value);
              }
           }           
       }

       //サムネイル数分ループ
       foreach (MediaThumbnail thumbnail in group.Thumbnails)
       {
           SortedList attributes = thumbnail.Attributes;

           //属性数分ループ
           foreach (DictionaryEntry attribute in attributes)
           {
              if (attribute.Key.Equals("url"))
              {
                  //サムネイルのURL
                  Console.WriteLine("Thumbnail key / {0}", attribute.Value);
              }
           }
       }
   }



とりあえずデータは取れているのですが、検索条件に日本語を入れた場合の挙動があやしい。 もう少し調べてみます。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://csfun.blog49.fc2.com/tb.php/1-be1f7027

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。