お気に入り | 日本語 | ログイン

デベロッパー ガイド: Java

YouTube Data API では、クライアント アプリケーションで Google Data API フィード形式を使用して YouTube のコンテンツを表示、更新できます。クライアント アプリケーションで YouTube Data API フィードを使用して、動画フィード、コメント、レスポンス、および再生リストをフェッチしたり、特定の条件に一致する動画を検索したりできます。また、認証リクエストを送信して情報を変更したい場合や、新しい動画コンテンツをサイトにアップロードしたい場合にも、この API を使用できます。

このドキュメントでは、YouTube Data API の機能の背景を説明するだけでなく、Java クライアント ライブラリを使用した API とのやり取りの例も示します。Java クライアント ライブラリの設定方法については、スタート ガイドをご覧ください。

Java クライアント ライブラリで YouTube とやり取りに使用する基礎的なプロトコルの詳細については、デベロッパー ガイド: Data API プロトコルをご覧ください。

目次

このドキュメントについて

対象読者

このドキュメントは、Java クライアント ライブラリを使用して YouTube とやり取りできるクライアント アプリケーションを作成するプログラマを対象としています。Data API との基本的なやり取りの一連の例を示します。

YouTube Data API リファレンス情報については、リファレンス ガイドをご覧ください。

このドキュメントでは、Google Data API プロトコルの背後にある一般的概念と Java について読者が理解していることを前提としています。

Java のクラスとメソッドのリファレンス情報については、クライアント ライブラリの Javadoc リファレンス ガイドをご覧ください。

ドキュメントの構成

このドキュメントには次のセクションがあります。

  • 認証のセクションでは、特定のユーザー アカウントに API の操作を関連付けるために利用可能な 2 種類の認証方式について説明します。このセクションでは、YouTube Data API と他の GData API での認証の違いについても概説します。このドキュメントでは、具体的な API 関数の説明において、その関数でユーザーの認証が必要かどうかを明示しています。

  • 動画のフィードとエントリの説明のセクションでは、API レスポンスの例を示し、動画のリストまたは検索結果のセットから 1 本の動画の情報を抽出する方法について説明します。このセクションでは、特定の動画エントリのメタデータにアクセスする方法についても説明します。

  • 動画の取得と検索のセクションでは、動画のリストをフェッチする方法について説明します。YouTube Data API には、数種類の標準フィード (「評価の高い動画」、「人気の動画」など) が定義されています。また、特定のユーザーがアップロードした動画のリストや、関連する動画のリストを取得する方法についても説明します。このセクションの最後には、API を使用して、ユーザーが特定の語句やカテゴリに一致する動画をYouTube 動画ライブラリから検索できるようにする方法について説明します。

  • 動画のアップロードのセクションでは、アプリケーションから YouTube にユーザーが動画をアップロードできるようにする 2 種類の方法について簡単に説明します。また、ユーザーがアプリケーションから動画を削除する方法についても説明します。これらの方法については、デベロッパー ガイド: Data API プロトコルをご覧ください。場合によっては、他の API 関数を使用して、ユーザーが動画をアップロードできるようにする必要があるかもしれません。たとえば、この API には、動画に動画コメントを追加する関数が用意されています。ユーザーが新しい動画を動画コメントとしてアップロードした場合には、クライアントを動画のアップロード手順に従って動作させ、新しい動画がレスポンスとして認識される前に YouTube に動画を追加する必要があります。

  • 動画の更新と削除のセクションでは、API を使用して YouTube の動画に関する情報を更新する方法について説明します。API を使用して動画を削除する方法についても説明します。

  • コミュニティ機能の使用のセクションでは、YouTube の動画に対してユーザーが反応を示すことができる API の関数について説明します。これらの関数は、既存の動画についての評価、コメント、動画レスポンス、苦情を投稿するためのリクエストを伝えます。API を使用して、動画のコメントや動画レスポンスのリストを取得し、動画レスポンスを削除することもできます。

  • 動画の保存と収集のセクションでは、お気に入りの動画、動画再生リスト、YouTube チャンネルへの登録に対して、API を使用してアクセス、作成、更新する方法について説明します。

  • ユーザー交流の利用のセクションでは、API を使用して、ユーザー プロフィールを取得し、更新する方法について説明します。このセクションでは、ユーザーのコンタクトを取得、追加、更新、削除する方法の他、メッセージを取得、送信、削除する方法についても説明します。

スタート ガイド

Java クライアント ライブラリの設定方法については、スタート ガイドをご覧ください。Java クライアント ライブラリを使用するには、Java 1.5 を実行している必要があります。クライアント ライブラリをダウンロードしたら、java/lib/gdata-client-1.0.jar および java/lib/gdata-youtube-1.0.jar ファイルを見ると、最初の段階で必要なクラスが分かります。

正常に動作するサンプル コードは、gdata/java/sample/youtube/YouTubeClient.java で配布されています。ビルドおよび実行の手順については、同じディレクトリにある README.txt ファイルをご覧ください。このサンプルによって、YouTube Data API フィードのさまざまな操作と API の使用方法を理解できます。実行できる操作の一覧については、サンプル クライアント アプリケーションの main メソッドをご覧ください。

このドキュメントに載っているサンプル スニペットをコードに挿入してコンパイルするには、以下の import 文を使用する必要があります。

import com.google.gdata.client.*;
import com.google.gdata.client.youtube.*;
import com.google.gdata.data.*;
import com.google.gdata.data.geo.impl.*;
import com.google.gdata.data.media.*;
import com.google.gdata.data.media.mediarss.*;
import com.google.gdata.data.youtube.*;
import com.google.gdata.data.extensions.*;
import com.google.gdata.util.*;
import java.io.IOException;
import java.io.File;
import java.net.URL;

認証

Java クライアント ライブラリを使用して、公開フィードと非公開フィードのどちらも処理できます。公開フィードは読み取り専用ですが、認証は必要ありません。YouTube フィードには認証なしでアクセスできるものもありますが、フィードに変更を加える場合は認証が必要になります。認証としては、ClientLogin ユーザー名/パスワード認証、またはAuthSub プロキシ認証を使用できます。

YouTube API を使用して書き込み操作やアップロード操作を実行するためには、次のようにデベロッパー キーと clientID で YouTubeService オブジェクトをインスタンス化する必要があります。

YouTubeService service = new YouTubeService(clientID, developer_key);

デベロッパー キーをまだ取得していない場合は、こちらから申請できます。clientIDもこのページから取得できます。

AuthSub および ClientLogin 認証の詳細については、認証に関するドキュメントをご覧ください。

ウェブ アプリケーション用の AuthSub

特定のユーザーおよびサービスの AuthSub トークンを取得するには、アプリケーションでユーザーを AuthSubRequest URL にリダイレクトする必要があります。ユーザーは、このリダイレクト先で Google アカウントにログインすることになります。

AuthSubRequest URL の詳細については、AuthSub に関するドキュメントをご覧ください。

AuthSubRequest URL を作成するには、次のように Java クライアント ライブラリを呼び出します。

String requestUrl =
AuthSubUtil.getRequestUrl("http://www.example.com/RetrieveToken",
                        "http://gdata.youtube.com",
                        false,
                        true);

getRequestUrl メソッドは、AuthSubRequest ハンドラで使用するクエリ パラメータに対応する複数のパラメータを取ります。nextURL は、ユーザーが Google アカウントにログインしてアクセス権を付与された後にリダイレクトされる URL です。scope は、前のセクションで決定したものです。1 番目のブール値はトークンを登録済みモードで使用するかどうか、2 番目のブール値はトークンを後でセッション トークンに交換するかどうかを示します。上に示したサンプルでは、未登録モード (1 番目のブール値は false) で、後々セッション トークンに交換されるトークン (2 番目のブール値は true) が呼び出されます。これらのブール値は、実際のアプリケーションに合わせて変更してください。

nextURLが作成されたら、サーバー側のアプリケーションにおいてさまざまな方法でその URL を使用し、ユーザーを AuthSubRequest ハンドラに送信できます。最も一般的な方法は、ユーザーに対してページを表示することで、ユーザーがリンクを辿って Google アカウントへのアクセスをアプリケーションに許可する必要があることを示し、その後でリクエスト URL をリンクに付加する方法です。たとえば、次のような文字列をページに表示します。

String suggestAuthorization = "<p>MyApp needs access to your
YouTube account. To authorize
MyApp to access your account, <a href=\"" + requestUrl + "\">log in
to your account</a>.</p>";

ユーザーが、リンクを辿って Google の AuthSub ページに移動しログインします。AuthSub システムは、指定された nextURL を使用して、ユーザーをリダイレクトしてアプリケーションに返します。

Google からアプリケーションへのリダイレクトの際には、クエリ パラメータとして nextURL がトークンに追加されています。したがって、上に示した nextURL の場合、ユーザーはログイン後に http://www.example.com/RetrieveToken?token=DQAADKEDE という URL にリダイレクトされます。

ユーザーのブラウザは、その URL にリダイレクトされます。次に、その URL を処理するサーブレットが要求された URL 内のクエリ パラメータを検証し、Google によって設定されたトークンを取得します。たとえばサーブレットでは、Java クライアント ライブラリの便宜関数 getTokenFromReply トークンを取得できます。

String onetimeUseToken = 
AuthSubUtil.getTokenFromReply(httpServletRequest.getQueryString());

どのユーザーが AuthSub で Google のサーバーに認証されたかをアプリケーション側で識別するには、ユーザーに AuthSub リンクをクリックさせる前に認証クッキーを設定し、ユーザーの認証が完了してウェブ ページに返された後にこのクッキーを読み込みます。

getTokenFromReply で取得するトークンは、常に 1 回 りのトークンです。AuthSub のドキュメントに説明されているとおり、このト クンは AuthSubSessionToken URL を使用してセッション トークンに交換できます。アプリケーションでこの交換を実行するには、次に示すように Java クライアント ライブラリを使用します。

String sessionToken = AuthSubUtil.exchangeForSessionToken(onetimeUseToken,
                                                      null);

1 回限りのトークンを、null (未登録モードの場合) またはプライベート キー (登録済みモードの場合) のどちらかと一緒に exchangeForSessionToken メソッドに渡すと、AuthSub インターフェイスからセッション トークンが返されます。登録済みアプリケーションとプライベート キーの詳細については、AuthSub のドキュメントをご覧ください。

AuthSub のドキュメントに説明されているとおり、セッション トークンを使用すると、Authorization ヘッダーにトークンを配置することによって、サーバーに対するリクエストを認証できます。セッション トークンを含む Authorization ヘッダーが、リクエストごとに Java クライアント ライブラリから自動的に送信されるようにするには、YouTubeService オブジェクトの setAuthSubToken メソッドを呼び出します。

YouTubeService service = new YouTubeService(clientID, developer_key);
service.setAuthSubToken(sessionToken, null);

登録済みモードを使用している場合は、null の代わりにプライベート キーを指定します。また、YouTubeService のコンストラクタに、clientID とデベロッパー キーを渡す必要もあります。

setAuthSubToken を呼び出し後は、トークンについて考えることなく、標準の GData クライアント ライブラリ コールを使用してサービスとやり取りできます。

トークンのパラメータに関する情報を取得したい場合は、トークンを getTokenInfo メソッドに渡すと、そのトークンに関する情報を格納した名前/値ペアのセットが返されます。次に例を示します。

Map<String, String> info = AuthSubUtil.getTokenInfo(sessionToken, null);  

AuthSub セッション トークンに期限はありません。クライアントでは、必要に応じてセッション トークンをいつまででも保持することができます。

AuthSub のドキュメントに説明されているとおり、セッション トークンが不要になった場合は、クライアントで AuthSubRevokeToken を使用してトークンを無効にできます。

たとえば、トークンを従来のセッション方式で管理したい場合は、ユーザーのセッションの開始時にトークンを取得し、そのセッションの終了時に無効にします。

Java クライアント ライブラリを使用してトークンを無効にするには、revokeToken を呼び出します。登録済みモードの場合はプライベート キーを、それ以外の場合は null を指定します。次に例を示します。

AuthSubUtil.revokeToken(sessionToken, null);

インストールするアプリケーション用の ClientLogin

ClientLogin (「インストールするアプリケーション用の ClientLogin」ともいう) を使用するには、クライアントが送信しているクエリのおおもとの送信者であるユーザーの ID とパスワードを指定して、YouTubeServicesetUserCredentials メソッドを呼び出します。次に例を示します。

YouTubeService service = new YouTubeService(clientID, developer_key);
service.setUserCredentials("jo@gmail.com", "password");

なお、YouTube API を使用してプライベート フィードの書き込み操作や取得操作を実行するには、YouTubeService オブジェクトに clientID とデベロッパー キーを渡す必要もあります。デベロッパー キーをまだ取得していない場合は、こちらから申請できます。

認証システムの詳細については、Google アカウントの認証に関するドキュメントをご覧ください。

動画のフィードとエントリの説明

YouTube Data API では、動画のリストである動画フィードが数種類 (標準フィード、アップロード、登録、お気に入りなど) 提供されます。各フィードの URL はリファレンス ガイドに記載されています。

動画のフィードの表示

YouTube API のフィードの多くは、動画エントリで構成されています。これらのフィードは、VideoFeed オブジェクトとして最も簡単にモデル化できます。このオブジェクトにはそれぞれ複数の VideoEntry が含まれます。動画エントリはそれぞれ YouTube 上の 1 本の動画に対応し、その動画に関する情報が含まれます。

動画のリストを取得するコードの基本的な構造は、URL を作成して動画フィードを取得し、そのエントリを一度に 1 つずつ処理するもので、次のようになります。

VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

動画の取得と検索のセクションでは、多数のよく使用されるフィード用 URL と、さまざまな動画フィードの取得方法について詳しく説明します。

特定の動画エントリの取得

特定の動画のセルフ リンクが分かっている場合は、その動画の情報のみを取得できます。セルフリンクとは、rel 属性が self に設定されている動画を示す Atom エントリ内の link 要素です。次に示すように、その動画の ID をベースとする URL です。

http://gdata.youtube.com/feeds/api/videos/videoID

動画エントリのセルフ リンクは、id 要素に指定されているエントリ ID とも一致します。

次のコードでは、YouTube 上の動画に対応する VideoEntry を取得します。

String videoEntryUrl = "http://gdata.youtube.com/feeds/api/videos/ADos_xW4_J0";
VideoEntry videoEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class);
System.out.println("Title: " + videoEntry.getTitle().getPlainText());
System.out.println(videoEntry.getMediaGroup().getDescription().getPlainTextContent());

動画エントリのコンテンツ

VideoEntry オブジェクトから、サムネイル、プレーヤーの URL、動画の再生時間など、さまざまなメタデータが取得できます。次のコードでは、この情報の一部を取得する方法を示します。使用できる XML 要素の一覧については、リファレンス ガイドをご覧ください。

System.out.println("Title: " + videoEntry.getTitle().getPlainText());
      
YouTubeMediaGroup mediaGroup = videoEntry.getMediaGroup();

System.out.println("Description: " + mediaGroup.getDescription().getPlainTextContent());

MediaPlayer mediaPlayer = mediaGroup.getPlayer();
System.out.println("Web Player URL: " + mediaPlayer.getUrl());
MediaKeywords keywords = mediaGroup.getKeywords();
System.out.print("Keywords: ");
for(String keyword : keywords.getKeywords()) {
  System.out.print(keyword + ",");
}
GeoRssWhere location = videoEntry.getLocation();
if(location != null) {
  System.out.println("Latitude: " + location.getLatitude());
  System.out.println("Longitude: " + location.getLongitude());
}
Rating rating = videoEntry.getRating();
if(rating != null) {
  System.out.println("Average rating: " + rating.getAverage());
}
YtStatistics stats = videoEntry.getStatistics();
if(stats != null ) {
  System.out.println("View count: " + stats.getViewCount());
}
System.out.println();
System.out.println("\tThumbnails:");
for(MediaThumbnail mediaThumbnail : mediaGroup.getThumbnails()) {
  System.out.println("\t\tThumbnail URL: " + mediaThumbnail.getUrl());
  System.out.println("\t\tThumbnail Time Index: " +
      mediaThumbnail.getTime());
  System.out.println();
}
System.out.println("\tMedia:");
for(YouTubeMediaContent mediaContent : mediaGroup.getYouTubeContents()) {
  System.out.println("\t\tMedia Location: "+ mediaContent.getUrl());
  System.out.println("\t\tMedia Type: "+ mediaContent.getType());
  System.out.println("\t\tDuration: " + mediaContent.getDuration());
  System.out.println();
}

動画の取得と検索

標準フィードの取得

YouTube Data API では現在、さまざまな条件に対して動画の標準フィードを提供しています。これらのフィードは、サイト全体にわたるもので、ユーザー固有のフィードではありません。標準フィードの URL はすべて http://gdata.youtube.com/feeds/api/standardfeeds/ で始まり、その後にフィードの ID を続けます。取得できるフィードの一覧は、次のとおりです。

フィード名フィード ID
人気の動画most_viewed
評価の高い動画top_rated
おすすめrecently_featured
モバイル向け動画watch_on_mobile
話題の動画most_discussed
お気に入り登録の多い動画top_favorites
リンク数の多い動画most_linked
コメントの多い動画most_responded
新着動画most_recent

地域固有の標準フィードも取得できます。それにはフォーマット http://gdata.youtube.com/feeds/api/standardfeeds/localeID/feedID に localeID を指定します。たとえば日本での人気の動画のフィードは http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_viewed となります。

次の例では、サイトで人気のある動画のタイトルと説明を出力しています。

String feedUrl = "http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed";
VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);

for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

特定のユーザーがアップロードした動画

各 YouTube ユーザーには、ユーザーが /feeds/api/users/userID/uploads にアップロードした動画に対応した動画フィードが関連付けられています。次のコードでは、ユーザー「GoogleDevelopers」によってアップロードされた動画のタイトルと説明を出力しています。

String feedUrl = "http://gdata.youtube.com/feeds/api/users/GoogleDevelopers/uploads";

VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

ユーザー名として「default」と指定すると、その時点で認証されているユーザーを指定したことになります。したがって、認証されたユーザーの動画を取得するには、http://gdata.youtube.com/feeds/api/users/default/uploads という URL を使用します。

関連動画の取得

動画フィード内の各動画エントリには、YouTube が選定した関連動画が格納されている別の動画フィードへのリンクが含まれています。次のコードでは、特定の VideoEntry の関連動画に関する情報を取得して出力する方法を示します。

if (videoEntry.getRelatedVideosLink() != null) {
  String feedUrl = videoEntry.getRelatedVideosLink().getHref();
  
  VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
  for(VideoEntry entry : videoFeed.getEntries() ) {
    System.out.println("Title: " + entry.getTitle().getPlainText());
    System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
  }
}

動画の検索

YouTube Data API を使用すると、指定した条件に一致するエントリのセットを要求できます。たとえば、特定の投稿者が公開した動画エントリや、特定のキーワードを含む動画エントリを要求できます。その場合は、YouTubeQuery オブジェクトを作成して YouTubeService.query() メソッドに渡します。

たとえば、キーワード クエリを実行し、制限付きの動画も含めて再生回数順に並べるには、YouTubeQueryオブジェクトの setVideoQuerysetOrderBy、および setIncludeRacy メソッドを使用します。次のコード スニペットでは、「puppy」というキーワードに一致するすべての動画のタイトルと要約を、制限付きの動画も含めて再生回数順に出力しています。

YouTubeQuery query = new YouTubeQuery(new URL("http://gdata.youtube.com/feeds/api/videos"));
// order results by the number of views (most viewed first)
query.setOrderBy(YouTubeQuery.OrderBy.VIEW_COUNT);

// do not exclude restricted content from the search results
query.setIncludeRacy(true);

//search for puppies!
query.setVideoQuery("puppy");

VideoFeed videoFeed = service.query(query, VideoFeed.class);

for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

Query クラスと YouTubeQuery などのサブクラスは、フィード用 URL の作成を担当します。上記の YouTubeQuery は、次の URL と同等の URL を構成します。

http://gdata.youtube.com/feeds/api/videos?vq=keyword&racy=include&orderby=viewCount

検索パラメータを設定するためによく使用される YouTubeQuery メソッドには、次のものがあります。

setAuthor
エントリの投稿者を設定します。
setMaxResults
一度に返すエントリの最大数を設定します。
setStartIndex
取得される最初の結果に 1 から始まるインデックスを設定します (複数のページで結果を表示するため)。
setVideoQuery
検索キーワードを設定します。動画のすべてのメタデータ (タイトル、タグ、説明など) 内で、指定した文字列が検索されます。
setIncludeRacy
結果に制限付きコンテンツを含めるかどうかを指定します。
setFormat
動画のフォーマットを指定します。
setOrderBy
リストのエントリの順序を設定します。RELEVANCEVIEW_COUNTUPDATEDRATING などによる順序を指定できます。
setTime
標準フィードの結果を TODAYTHIS_WEEKTHIS_MONTHALL_TIME の期間に限定するように設定します。

クエリ パラメータについて詳しくは YouTube Data API リファレンス ガイドGoogle Data API リファレンス ガイドをご覧ください。

カテゴリとキーワードによる動画の検索

指定したカテゴリとキーワードのセットに一致する動画だけを示すように、検索結果を制限できます。リファレンス ガイドでは、あらかじめ定義された YouTube カテゴリと、ユーザー定義のキーワード (タグともいう) の両方を指定する方法について説明しています。

次のコードでは、キーワードを使用して (つまり KEYWORD_SCHEME によるカテゴリ化を使用して) 検索する方法と、YouTube カテゴリを使用して (つまり CATEGORY_SCHEME によるカテゴリ化を使用して) 検索する方法を示します。なお、どの動画にも複数のキーワードを指定できますが、カテゴリは 1 つしか指定できません。

YouTubeQuery query = new YouTubeQuery(new URL("http://gdata.youtube.com/feeds/api/videos"));

// a category filter holds a collection of categories to limit the search
Query.CategoryFilter categoryFilter1 = new Query.CategoryFilter();
Query.CategoryFilter categoryFilter2 = new Query.CategoryFilter();

//this restricts to videos tagged with the keyword "puppy".
categoryFilter1.addCategory(new Category(YouTubeNamespace.KEYWORD_SCHEME, "puppy"));
//this restricts to videos in the category of "Comedy".
categoryFilter2.addCategory(new Category(YouTubeNamespace.CATEGORY_SCHEME, "Comedy"));

// multiple filters mean "AND" in a category query
query.addCategoryFilter(categoryFilter1);
query.addCategoryFilter(categoryFilter2);

VideoFeed videoFeed = service.query(query, VideoFeed.class);

for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

上のコードでは、「Comedy」カテゴリ内のキーワード「puppy」を含むすべての動画が取得されます。「Comedy」カテゴリに含まれているか、キーワード「puppy」を含むか、どちらか一方でも条件を満たす動画を取得したい場合は、両方の Category オブジェクトを指定した CategoryFilter を 1 つ使用します。

使用できる全カテゴリの一覧は、http://gdata.youtube.com/schemas/2007/categories.catから入手できます。

デベロッパー タグによる動画の検索

デベロッパー タグとは、デベロッパーがアップロードしたコンテンツのキーワードとして使用する追加の隠しタグのことです。このキーワードは、一般には表示されませんが、動画の取得に使用することは可能です。次のコードでは、デベロッパー タグが「xyzzy」になっているすべての動画のフィードを取得しています。

YouTubeQuery query = new YouTubeQuery(new URL("http://gdata.youtube.com/feeds/api/videos"));
Query.CategoryFilter categoryFilter = new Query.CategoryFilter();
categoryFilter.addCategory(new Category(YouTubeNamespace.DEVELOPER_TAG_SCHEME, "xyzzy"));
      
query.addCategoryFilter(categoryFilter);

VideoFeed videoFeed = service.query(query, VideoFeed.class);

for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

デベロッパー タグで動画を取得するためには、そのタグで動画をアップロードする際に使用したデベロッパー キーを使用しなければなりません。リクエストを認証する必要はありません。デベロッパー キーを指定するだけです。

動画のアップロード

動画のアップロードには、動画を直接アップロードするか、動画のメタデータだけを送信し、HTML フォームにより動画をユーザーにアップロードさせる 2 つの方法があります。

アップロードされた動画が処理されてインデックス付けされるまで、しばらく時間がかかります。処理が集中すると、公開フィードに表示されるのが翌日になることもあります。ただし、認証されたユーザーのアップロード フィードにはすぐに表示されます。詳細については、アップロード ステータスの確認をご覧ください。

直接アップロード

動画をアップロードするには、最初に新しい VideoEntry オブジェクトを作成し、必要なメンバーを指定します。次の例では、QuickTime 動画「file.mov」を、以下のプロパティを指定して YouTube にアップロードしています。

プロパティ
タイトルtesting
カテゴリAutos
キーワードFoo
説明my description
ファイル名file.mov
ファイルの MIME タイプvideo/quicktime
非公開動画か?false
動画の位置37, -122 (緯度, 経度)
デベロッパー タグxyzzy

動画をアップロードする際の必須フィールドは、タイトル、説明、カテゴリ、およびキーワードです。

VideoEntry newEntry = new VideoEntry();
newEntry.setGeoCoordinates(new GeoRssWhere(37.0,-122.0));
//alternatively, one could specify just a descriptive string
newEntry.setLocation("Mountain View, CA");

YouTubeMediaGroup mg = newEntry.getOrCreateMediaGroup();

mg.addCategory(new MediaCategory(YouTubeNamespace.CATEGORY_SCHEME, "Autos"));
mg.addCategory(new MediaCategory(YouTubeNamespace.DEVELOPER_TAG_SCHEME, "xyzzy"));
mg.setPrivate(false);
mg.setTitle(new MediaTitle());
mg.getTitle().setPlainTextContent("testing");
mg.setKeywords(new MediaKeywords());
mg.getKeywords().addKeyword("foo");
mg.setDescription(new MediaDescription());
mg.getDescription().setPlainTextContent("my description");
MediaFileSource ms = new MediaFileSource(new File("file.mov"), "video/quicktime");
newEntry.setMediaSource(ms);

String uploadUrl = "http://uploads.gdata.youtube.com/feeds/api/users/default/uploads";

VideoEntry createdEntry = service.insert(new URL(uploadUrl), newEntry);

ブラウザ ベースのアップロード

サイト内でブラウザ ベースのアップロードを使用すると、動画をユーザーのブラウザから直接 YouTube にアップロードすることが可能になります。この方法でのアップロードでは、認証されたユーザーのアップロード URL の代わりに、次のような特別な URL を使用します。

http://gdata.youtube.com/action/GetUploadToken

動画ファイルはユーザーから直接アップロードされますが、その前に直接アップロードの場合とまったく同じ方法で、コード内から YouTube に動画のメタデータを送信する必要があります。カスタム URL 以外に唯一異なるのは、作成する VideoEntryMediaFileSource オブジェクトを付加しない点です。

動画をアップロードする際の必須フィールドは、タイトル、説明、カテゴリ、およびキーワードです。

VideoEntry newEntry = new VideoEntry();
newEntry.setGeoCoordinates(new GeoRssWhere(37.0,-122.0));
//alternatively, one could specify just a descriptive string
newEntry.setLocation("Mountain View, CA");
YouTubeMediaGroup mg = newEntry.getOrCreateMediaGroup();

mg.addCategory(new MediaCategory(YouTubeNamespace.CATEGORY_SCHEME, "Autos"));
mg.addCategory(new MediaCategory(YouTubeNamespace.DEVELOPER_TAG_SCHEME, "xyzzy"));
mg.setTitle(new MediaTitle());
mg.setPrivate(false);
mg.getTitle().setPlainTextContent("testing");
mg.setKeywords(new MediaKeywords());
mg.getKeywords().addKeyword("foo");
mg.setDescription(new MediaDescription());
mg.getDescription().setPlainTextContent("my description");


URL uploadUrl = new URL("http://gdata.youtube.com/action/GetUploadToken");
FormUploadToken token = service.getFormUploadToken(uploadUrl, newEntry);

System.out.println(token.getUrl());
System.out.println(token.getToken());

上記のコードでは、HTML フォームを作成するのに使用するリンクとトークンを、ユーザーのブラウザに表示するために出力しています。次に、単純なサンプル フォームを示します。post_urltoken.getUrl() の値を表し、token_valuetoken.getToken() の値を表します。

<form action="post_url" method ="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="hidden" name="token" value="token_value"/>
<input type="submit" value="go" />
</form>

フォームの送信後にユーザーをアプリケーションのウェブサイトにリダイレクトするため、必ず next パラメータを上記の post_url に付加します。これは、AuthSub リンクの next パラメータとまったく同じ機能を果たします。

アップロード ステータスの確認

動画のアップロード後、その動画は認証されたユーザーのアップロード フィードにすぐに表示されます。

http://gdata.youtube.com/feeds/api/users/default/uploads

ただし処理が終わるまでは、サイト上に公開されません。拒否された動画や、アップロードに失敗した動画も、認証されたユーザーのアップロード フィードにのみ残ります。次のコードでは、VideoEntry のステータスを確認して、動画が有効になったか、拒否されたかを調べます。

if(entry.isDraft()) {
  System.out.println("Video is not live");
  YtPublicationState pubState = entry.getPublicationState();
  if(pubState.getState() == YtPublicationState.State.PROCESSING) {
    System.out.println("Video is still being processed.");
  }
  else if(pubState.getState() == YtPublicationState.State.REJECTED) {
    System.out.print("Video has been rejected because: ");
    System.out.println(pubState.getDescription());
    System.out.print("For help visit: ");
    System.out.println(pubState.getHelpUrl());
  }
  else if(pubState.getState() == YtPublicationState.State.FAILED) {
    System.out.print("Video failed uploading because: ");
    System.out.println(pubState.getDescription());
    System.out.print("For help visit: ");
    System.out.println(pubState.getHelpUrl());
  }
}

動画の更新と削除

動画情報の更新

動画のメタデータを更新するには、VideoEntry オブジェクトを更新してから update メソッドを使用します。次の例では、動画の説明を更新しています。

entry.getMediaGroup().getDescription().setPlainTextContent("new description");
entry.update();

動画の削除

動画を削除するには、認証されたユーザーのアップロード フィードを取得し、その動画の VideoEntry オブジェクトの delete メソッドを呼び出します。

videoEntry.delete();

コミュニティ機能の使用

評価の追加

動画を評価するには、VideoEntryRating オブジェクトを追加し、その VideoEntry の評価リンクに投稿 (POST) します。

String ratingUrl = entry.getRatingLink().getHref();
Rating myRating = new Rating();
myRating.setValue(5);
myRating.setMax(5);
myRating.setMin(1);
entry.setRating(myRating);
service.insert(new URL(ratingUrl), entry);

コメント

動画コメントの取得

特定の VideoEntry オブジェクトに対して、次のコードに示すように、その動画のコメントを含むフィードを取得して、出力できます。

String commentUrl = videoEntry.getComments().getFeedLink().getHref();
       
CommentFeed commentFeed = service.getFeed(new URL(commentUrl), CommentFeed.class);
for(CommentEntry comment : commentFeed.getEntries()) {
  System.out.println(comment.getPlainTextContent());
}

コメントの追加

前のセクションで説明した方法でコメント URL を取得したら、新しいコメントを送信できます。

CommentEntry newComment = new CommentEntry();
newComment.setContent(new PlainTextConstruct("my pithy comment"));
service.insert(new URL(commentUrl), newComment);

動画レスポンス

特定の動画の動画レスポンスの取得

動画フィードの中の各動画エントリには、関連する動画レスポンス フィードが含まれている場合があり、それ自体も動画フィードです。次のコードでは、特定の VideoEntry の動画レスポンスに関する情報を取得して出力する方法を示します。

if (videoEntry.getVideoResponsesLink() != null) {
  String feedUrl = videoEntry.getVideoResponsesLink().getHref();
  
  VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
  for(VideoEntry entry : videoFeed.getEntries() ) {
    System.out.println("Title: " + entry.getTitle().getPlainText());
    System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
  }
}

さまざまなオブジェクトの内部からフィードを取得する方法については、リファレンス ガイドのフィード間の移動をご覧ください。

動画レスポンスの追加

前のセクションで示したように、動画レスポンスのリンクを取得後、別の動画に対応する VideoEntry を投稿 (POST) して、最初の動画の動画レスポンスにすることができます。

service.insert(new URL(responseVideosLink), videoResponseEntry);

動画レスポンスをフィードとして取得した場合は、VideoFeed オブジェクトに直接挿入することもできます。

videoFeed.insert(videoResponseEntry);

なお、すべての動画レスポンスは、その動画の所有者によって承認されるまで、動画レスポンス フィードには表示されません。

動画レスポンスの削除

動画レスポンス リンクを使用して取得した VideoFeed オブジェクトのリスト内に自ら所有する動画が含まれている場合、そのエントリに対して delete を呼び出すことで、その動画を動画レスポンスとして削除できます。

videoResponseEntry.delete();

動画の報告

動画に関する苦情を追加するには、Atom エントリを VideoEntry オブジェクトの苦情リンクに投稿 (POST) します。次のコードでは、動画を報告する例を示します。

String complaintUrl = badVideoEntry.getComplaintsLink().getHref();
ComplaintEntry complaintEntry = new ComplaintEntry();
complaintEntry.setComment("This video offends my sensibilities.");
service.insert(new URL(complaintUrl), complaintEntry);

動画の保存と収集

お気に入りの動画

ユーザーのお気に入りの動画の取得

各 YouTube 動画には、お気に入りの動画を設定できます。お気に入りの動画に対応するフィードは、概念的には単なる名前なし再生リストです。各ユーザーのお気に入りフィードは、次のような URL から取得できます。

http://gdata.youtube.com/feeds/api/users/userID/favorites

次のコードでは、あるユーザーのお気に入りのリストを出力しています。

String feedUrl = "http://gdata.youtube.com/feeds/api/users/YTDebates/favorites";
    
VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

なお、ユーザー名の代わりに、「現時点で認証されているユーザー」を意味する文字列 default を使用することも可能です。

お気に入りの追加

お気に入りを追加するには、認証されたユーザーのお気に入りフィードに、追加したい動画の VideoEntry を挿入します。

String videoEntryUrl = "http://gdata.youtube.com/feeds/api/videos/ADos_xW4_J0";
VideoEntry videoEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class);

service.insert(new URL(feedUrl), videoEntry);

お気に入りの削除

お気に入りを削除するには、認証されたユーザーのお気に入りフィードから、VideoEntry オブジェクトで delete メソッドを使用します。

entry.delete();

再生リスト

YouTube の各ユーザーには関連付けられた再生リスト フィードが 1 つあります。これは各再生リスト内の動画を含むフィードへのリンクのリストです。

ユーザーの再生リストの取得

特定のユーザーの再生リストのフィードを取得するには、次のような URL を使用します。

http://gdata.youtube.com/feeds/api/users/userID/playlists

次のコードでは、その URL を使用し、再生リスト フィードを取得して出力する方法を示します。

String feedUrl = "http://gdata.youtube.com/feeds/api/users/YTdebates/playlists";

PlaylistLinkFeed feed = service.getFeed(new URL(feedUrl), PlaylistLinkFeed.class);

for(PlaylistLinkEntry entry : feed.getEntries()) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println("Description: " + entry.getDescription());
}

なお、ユーザー名の代わりに、「現時点で認証されているユーザー」を意味する文字列 default を使用することも可能です。

再生リスト情報の取得

前の例で示したように PlaylistLinkEntry が取得できたら、次のコードを使用し、再生リストのコンテンツをフェッチして出力できます。

String playlistUrl = entry.getFeedLink().getHref();

PlaylistFeed playlistFeed = service.getFeed(new URL(playlistUrl), PlaylistFeed.class);

for(PlaylistEntry playlistEntry : playlistFeed.getEntries()) {
  System.out.println("Title: " + playlistEntry.getTitle().getPlainText());
  System.out.println("Description: " + playlistEntry.getDescription());
  System.out.println("Position: " + playlistEntry.getPosition());
  System.out.println("Video URL: " + playlistEntry.getHtmlLink().getHref());
}

なお、PlaylistEntryVideoEntry を継承しています。VideoEntry オブジェクトから何を取得できるかについては、動画エントリのコンテンツをご覧ください。

再生リストの追加

新しい再生リストを作成するには、認証されたユーザーの再生リスト フィードに、新しい PlaylistLinkEntry を挿入します。

String feedUrl = "http://gdata.youtube.com/feeds/api/users/default/playlists";

PlaylistLinkEntry newEntry = new PlaylistLinkEntry();
newEntry.setTitle(new PlainTextConstruct("new playlist"));
newEntry.setDescription("this is my new playlist.");

PlaylistLinkEntry createdEntry = service.insert(new URL(feedUrl), newEntry);

再生リストの更新

タイトル、説明などの再生リスト データを更新するには、PlaylistLinkEntry オブジェクトを修正し、その update メソッドを呼び出します。次のコードでは、再生リストの説明を更新しています。

entry.setDescription("updated description");
entry.update();

再生リストに動画を追加

再生リストに動画を追加するには、VideoEntry オブジェクトを使用します。次のコードでは、既にわかっているエントリ ID を使用して VideoEntry を取得し、それを PlaylistLinkEntry に対応する再生リストに追加します。位置を指定していないので、新しい動画は再生リストの最後に追加されます。

String playlistUrl = playlistLinkEntry.getFeedLink().getHref();
String videoEntryUrl = "http://gdata.youtube.com/feeds/api/videos/ADos_xW4_J0";
VideoEntry videoEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class);

PlaylistEntry playlistEntry = new PlaylistEntry(videoEntry);
playlistEntry.setTitle(new PlainTextConstruct("Custom title"));
playlistEntry.setDescription("Custom description");
service.insert(new URL(playlistUrl), playlistEntry);

上記のコードでは、動画にカスタム タイトルとカスタム説明を指定しています。これは必須ではありません。指定しない場合、動画の実際のタイトルと説明が使用されます。

再生リスト上の動画情報の編集

再生リスト内の各動画のカスタム タイトルとカスタム説明を変更するには、その動画の PlaylistEntry オブジェクトを更新して update メソッドを呼び出します。

playlistEntry.setDescription("updated description");
//move this entry to the top of the playlist
playlistEntry.setPosition(0);
playlistEntry.update();

再生リストでの動画のタイトルと説明を変更し元の動画のタイトルと説明に戻したい場合は、次のようなコードを実行します。

playlistEntry.setDescription(null);
playlistEntry.setTitle(null);
playlistEntry.update();

再生リストから動画を削除

再生リストから動画を削除するには、PlaylistEntrydelete メソッドを使用します。

playlistEntry.delete();

再生リストの削除

再生リストを削除するには、対応する PlaylistLinkEntry オブジェクトの delete メソッドを呼び出します。

entry.delete();

登録

ユーザー登録の取得

特定のユーザーが登録しているチャンネル、検索、お気に入りのリストをフェッチするには、次の URL を使用します。

http://gdata.youtube.com/feeds/api/users/userID/subscriptions

次のコードでは、その URL を使用し、特定のユーザーの登録のリストを取得して出力する方法を示します。


String feedUrl = "http://gdata.youtube.com/feeds/api/users/GoogleDevelopers/subscriptions";
    
SubscriptionFeed feed = service.getFeed(new URL(feedUrl), SubscriptionFeed.class);

for(SubscriptionEntry entry : feed.getEntries()) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println("Feed Link: " + entry.getFeedLink().getHref());
}

なお、ユーザー名の代わりに、「現時点で認証されているユーザー」を意味する文字列 default を使用することも可能です。

登録の追加

新しい登録を作成するには、認証されたユーザーの登録フィードの中に、新しい SubscriptionEntry を挿入します。次のコードでは、「GoogleDevelopers」チャネルに認証されたユーザーを登録します。

SubscriptionEntry newSubscription = new SubscriptionEntry();
newSubscription.addSubscriptionType(SubscriptionEntry.Type.CHANNEL);
newSubscription.setUsername("GoogleDevelopers");
service.insert(new URL(feedUrl), newSubscription);

「GoogleDevelopers」ユーザーのお気に入りを登録することもできます。

SubscriptionEntry newSubscription = new SubscriptionEntry();
newSubscription.addSubscriptionType(SubscriptionEntry.Type.FAVORITES);
newSubscription.setUsername("GoogleDevelopers");
service.insert(new URL(feedUrl), newSubscription);

最後に、特定の検索キーワードを登録することもできます。

SubscriptionEntry newSubscription = new SubscriptionEntry();
newSubscription.addSubscriptionType(SubscriptionEntry.Type.QUERY);
newSubscription.setQueryString("puppy");
service.insert(new URL(feedUrl), newSubscription);

登録の削除

再生リストを削除するには、対応する SubscriptionEntry オブジェクトの delete メソッドを呼び出します。

entry.delete();

ユーザー交流の利用

プロフィール

ユーザー プロフィールの取得

YouTube ユーザーのプロフィールは、次のような URL から Atom エントリとして取得できます。

http://gdata.youtube.com/feeds/api/users/userID

次のコードでは、あるユーザー プロフィールからさまざまな属性を出力しています。

String profileUrl = "http://gdata.youtube.com/feeds/api/users/YTdebates";
UserProfileEntry profileEntry = service.getEntry(new URL(
    profileUrl), UserProfileEntry.class);
System.out.println("Username: " + profileEntry.getUsername());
System.out.println("Age     : " + profileEntry.getAge());
System.out.println("Gender  : " + profileEntry.getGender());
System.out.println("Single? : " + profileEntry.getRelationship());
System.out.println("Books   : " + profileEntry.getBooks());
System.out.println("Company : " + profileEntry.getCompany());
System.out.println("Describe: " + profileEntry.getDescription());
System.out.println("Hobbies : " + profileEntry.getHobbies());
System.out.println("Hometown: " + profileEntry.getHometown());
System.out.println("Location: " + profileEntry.getLocation());
System.out.println("Movies  : " + profileEntry.getMovies());
System.out.println("Music   : " + profileEntry.getMusic());
System.out.println("Job     : " + profileEntry.getOccupation());
System.out.println("School  : " + profileEntry.getSchool());

YtUserProfileStatistics stats = profileEntry.getStatistics();
    
if(stats != null) {
  System.out.println("Subscriber count: " + stats.getSubscriberCount());
  System.out.println("Last web access: " + stats.getLastWebAccess().toUiString());
}

なお、ユーザー名の代わりに、「現時点で認証されているユーザー」を意味する文字列 default を使用することも可能です。

コンタクト

ユーザーのコンタクトの取得

特定のユーザーのコンタクトのリストを取得するには、次のような URL を使用します。

http://gdata.youtube.com/feeds/api/users/userID/contacts

次のコードでは、指定されたユーザーのすべての友だちを出力しています。

String feedUrl = "http://gdata.youtube.com/feeds/api/users/GoogleDevelopers/contacts";

FriendFeed friendFeed = service.getFeed(new URL(feedUrl), FriendFeed.class);

for(FriendEntry friendEntry : friendFeed.getEntries()) {
  System.out.print("Friend: " + friendEntry.getUsername());
  System.out.println("Status:" + friendEntry.getStatus().toString());
}

コンタクトの追加

新しいコンタクトを追加するには、認証されたユーザーのコンタクト フィードに、新しい FriendEntry を挿入します。カテゴリがある場合は、それを指定することでそのコンタクトをどのコンタクト グループに含めるかを制御できます。次のコードでは、「GoogleDevelopers」ユーザーをコンタクトとして追加しています。

FriendEntry newFriend = new FriendEntry();
newFriend.getCategories().add(new Category(YouTubeNamespace.CONTACT_LIST_SCHEME, "Friends"));
newFriend.setUsername("GoogleDevelopers");

service.insert(new URL(feedUrl), newFriend);

コンタクトの承認/拒否

コンタクトを承認または拒否するには、対応する FriendEntry のステータスを更新します。

リクエストを承認するには

friendEntry.setStatus(YtStatus.Value.ACCEPTED);
friendEntry.update();

リクエストを拒否するには

friendEntry.setStatus(YtStatus.Value.REJECTED);
friendEntry.update();

コンタクトの削除

コンタクトを削除するには、FriendEntry に対して delete メソッドを呼び出します。

friendEntry.delete();

メッセージ

YouTube ユーザー間ではメッセージを送受信でき、必要に応じてメッセージに動画を含めることもできます。

ユーザーのメッセージの取得

ユーザーの受信ボックスのコンテンツを取得するには、次のような URL に認証済みのリクエストを送ります。

http://gdata.youtube.com/feeds/api/users/userID/inbox

次の例では、認証されているユーザーの受信ボックスのコンテンツを出力しています。

String feedUrl = "http://gdata.youtube.com/feeds/api/users/default/inbox";

VideoMessageFeed feed = service.getFeed(new URL(feedUrl), VideoMessageFeed.class);

for(VideoMessageEntry entry : feed.getEntries()) {
  System.out.println("Message from: " + entry.getAuthors().get(0).getName());
  System.out.println("Subject: " + entry.getTitle().getPlainText());
  System.out.println(entry.getDescription());
}

ユーザーにメッセージを送信

ユーザーにメッセージを送信するには、VideoMessageEntry を作成してユーザーの受信ボックス フィードに挿入します。API を介して送信されるすべてのメッセージには、VideoEntry オブジェクトが含まれている必要があります。

次のコードでは、変数 receivingUser で識別されるユーザーに、動画を含むメッセージを送信しています。

String msgUrl = "http://gdata.youtube.com/feeds/api/users/"+receivingUser+"/inbox";
String videoEntryUrl = "http://gdata.youtube.com/feeds/api/videos/Wegp-JOae0g";
VideoEntry videoEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class);
VideoMessageEntry newMessage = new VideoMessageEntry(videoEntry);
newMessage.setTitle(new PlainTextConstruct("my subject"));
newMessage.setDescription("This is the message body.");
service.insert(new URL(msgUrl), newMessage);

メッセージの受信者は、メッセージの送信者側でコンタクトを承認されている必要があります。

メッセージの削除

コンタクトを削除するには、VideoMessageEntry オブジェクトに対して delete メソッドを呼び出します。

entry.delete();

トップへ戻る