YouTube Data API を使用すると、クライアント アプリケーションは Google Data API フィードの形式で YouTube コンテンツを取得して更新できます。クライアント アプリケーションは、YouTube Data API フィードを使用して、動画、コメント、レスポンス、再生リスト、ユーザー プロフィール、ユーザー コンタクトを取得、検索、更新できます。また、特定の条件に一致する動画をクエリすることもできます。
このドキュメントでは、YouTube Data API の機能に関する背景情報に加えて、Python クライアント ライブラリを使用して API を操作する例を示します。Python クライアント ライブラリを使用するには、Python 2.0 以降と Element Tree、httplib、urllib モジュールが必要です。詳細については、依存関係モジュールをご覧ください。
Python クライアント ライブラリの設定についてサポートが必要な場合は、スタートガイドをご覧ください。Python クライアント ライブラリが YouTube とのやり取りに使用する基盤となるプロトコルについて詳しくは、デベロッパー ガイドのプロトコル ページをご覧ください。
このドキュメントについて
オーディエンス
このドキュメントは、Python クライアント ライブラリを使用して YouTube とやり取りできるクライアント アプリケーションを作成するプログラマを対象としています。基本的なデータ API 操作の一連の例が示されています。
YouTube Data API のリファレンス情報については、リファレンス ガイドをご覧ください。
このドキュメントは、Google Data APIs プロトコルの基本的な考え方と、Python でのプログラミング方法を理解していることを前提としています。
Python のクラスとメソッドに関するリファレンス情報については、ソースコードに含まれている pyDocs(サービスクラスとデータクラス)をご覧ください。
ドキュメントの構造
このドキュメントでは以下の項目について説明します。
-
[認証] セクションでは、API オペレーションを特定のユーザー アカウントに関連付けるために使用できる 2 つの異なる認証方法について説明します。このセクションでは、YouTube Data API と他の Google Data API の認証の違いについても概説します。このドキュメントでは、特定の API 関数の説明で、その関数にユーザー認証が必要なかどうかを明記しています。通常、動画データやフィードデータを変更するすべてのリクエストは認証する必要があります。公開動画に対する読み取り専用リクエストでは、認証は必要ありません。
-
動画フィードとエントリの理解セクションでは、API レスポンスの例を示し、動画のリストまたは検索結果のセットから 1 つの動画に関する情報を抽出する方法について説明します。また、特定の動画エントリのメタデータにアクセスする方法についても説明します。このセクションでは、個々の動画エントリを更新するメカニズムについて説明します。
-
動画の取得と検索セクションでは、YouTube の人気動画の標準フィードなど、特定の動画リストを取得する方法について説明します。その他の動画リストには、特定のユーザーがアップロードした動画や、特定の動画に関連する動画のリストなどがあります。また、このセクションでは、API を使用して、ユーザーが特定の検索語句やカテゴリで YouTube の動画ライブラリを検索できるようにする方法についても説明します。
-
動画のアップロードセクションでは、ユーザーがアプリから YouTube に動画をアップロードできるようにする 2 つの方法について簡単に説明します。また、このセクションでは、他の動画への返信として動画をアップロードする方法についても説明します。
-
動画の更新と削除のセクションでは、API を使用して YouTube 動画に関する情報を更新する方法について説明します。また、API を使用して動画を削除する方法についても説明します。
-
コミュニティ機能の使用セクションでは、ユーザーが YouTube 動画を操作できるようにする API 関数について説明します。これらの関数は、既存の動画に評価、コメント、苦情を投稿するリクエストについて説明します。API を使用して動画コメントのリストを取得することもできます。
-
動画の保存と収集セクションでは、API を使用して、お気に入りの動画、動画再生リスト、YouTube チャンネルの登録にアクセス、作成、更新する方法について説明します。また、動画の再生リストやお気に入りを変更する方法(動画を追加、削除する方法)についても説明します。
-
ユーザー操作の有効化セクションでは、API を使用してユーザー プロファイルを取得して更新する方法について説明します。このセクションでは、ユーザーの連絡先の取得、追加、更新、削除の方法についても説明します。
スタートガイド
要件
クライアント アプリケーションは、YouTube Data API フィードを使用して、動画、コメント、レスポンス、再生リスト、登録チャンネル、ユーザー プロフィールなどを検索、取得、更新できます。このドキュメントでは、YouTube Data API の機能に関する背景情報に加えて、Python クライアント ライブラリを使用して API を操作する例を示します。Python クライアント ライブラリを使用するには、Python 2.2 以降と Element Tree、httplib、urllib モジュールが必要です。詳細については、依存関係モジュールをご覧ください。
環境の構成の詳細については、スタートガイドをご覧ください。Python クライアント ライブラリが YouTube の操作に使用する基盤となるプロトコルについて詳しくは、デベロッパー ガイドのプロトコル ページをご覧ください。
以下のサンプルコードのスニペットは、コードにコピーして貼り付け、必要に応じて変更できます。
YouTube Data API でオペレーションを実行する前に、次のように gdata.youtube.service.YouTubeService
オブジェクトを初期化する必要があります。下記の import
ステートメントは、gdata.media
モジュールと gdata.geo
モジュールからの追加のインポートを自動的に実行します。公開コンテンツの取得以外のすべてのアクションには認証が必要です。
import gdata.youtube import gdata.youtube.service yt_service = gdata.youtube.service.YouTubeService() # Turn on HTTPS/SSL access. # Note: SSL is not available at this time for uploads. yt_service.ssl = True
このガイドのメソッドの例のほとんどは、gdata.youtube.service.YouTubeService
のインスタンスに対して動作します。インタラクティブな Python インタープリタから未認証のリクエストをテストすることをおすすめします。
注: Python クライアント ライブラリはパスに正しく追加する必要があります。提供された setup.py
スクリプトを実行して、インストールされていることを確認してください。詳しくは、スタートガイドをご覧ください。
認証
Python クライアント ライブラリは、公開フィードまたは非公開フィードのいずれかに対応しています。公開フィードは読み取り専用で、認証は必要ありません。限定公開フィードを使用するには、YouTube サーバーの認証が必要です。
認証は、ClientLogin 認証(パソコン用アプリの場合)または AuthSub 認証(ウェブ アプリケーションの場合)で行うことができます。
デベロッパー キーとクライアント ID を設定する
デベロッパー キーは、API リクエストを送信する YouTube デベロッパーを識別します。クライアント ID は、ロギングとデバッグの目的でアプリケーションを識別します。
Python クライアント ライブラリを使用して API リクエストを行う場合、X-GData-Key
リクエスト ヘッダーを使用してデベロッパー キーを指定し、X-GData-Client
ヘッダーを使用してクライアント ID を指定します。デベロッパー キーとクライアント ID は、使用されている認証スキームに関係なく、YouTubeService
オブジェクトに設定できます。
yt_service.developer_key = 'ABCxyz123...' yt_service.client_id = 'My-Client_id'
YouTube デベロッパー キーを登録する必要があります。
ウェブ アプリケーションの AuthSub 認証
AuthSub プロキシ認証は、YouTube/Google アカウントのユーザーを認証する必要があるウェブ アプリケーションで使用されます。オペレーターは、YouTube ユーザーのユーザー名とパスワードにアクセスする必要はありません。特別な AuthSub トークンのみが必要です。
ユーザーが初めてアプリケーションにアクセスした時点では、Google のサービスで認証されていません。この場合、ユーザーに Google のリンクを案内して、YouTube アカウントへのアクセスをアプリがリクエストすることを承認してもらう必要があります。Python クライアント ライブラリには、この URL を生成する関数があります。以下のコードは、AuthSubRequest ページへのリンクを設定します。
def GetAuthSubUrl(): next = 'http://www.example.com/video_upload.pyc' scope = 'http://gdata.youtube.com' secure = False session = True yt_service = gdata.youtube.service.YouTubeService() return yt_service.GenerateAuthSubURL(next, scope, secure, session) authSubUrl = GetAuthSubUrl() print '<a href="%s">Login to your Google account</a>' % authSubUrl
サービス オブジェクトの GenerateAuthSubURL
メソッドに送信されるパラメータに注意してください。
- next - ユーザーがアカウントへのアクセスをアプリに許可した後に YouTube がユーザーをリダイレクトするページの URL。
- scope - アプリケーションが YouTube API フィードにのみアクセスすることを示します。
- secure - 返されるトークンが安全なトークンではないことを示します。
- session - このトークンを複数回使用(セッション)トークンと交換できることを示します。
返される URL は次のようになります。
https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fgdata.youtube.com&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fvideo_upload.pyc
ユーザーはリンクにアクセスして YouTube アカウントにログインできます。ユーザーがアカウントへのアクセスをアプリケーションに許可すると、next
URL にリダイレクトされます。URL には、クエリ パラメータとして 1 回限りのトークン値が追加されます。URL は次のようになります。
http://www.example.com/video_upload.pyc?token=Abc123...
次のセクションでは、このトークンをアップグレードする方法について説明します。以下のスニペットは、URL からこのトークンを取得する方法の 1 つを示しています。
import cgi parameters = cgi.FieldStorage() authsub_token = parameters[[]'token' ]
セッション トークンへのアップグレード
セキュリティ上の理由から、このトークンは 1 回限りです。この 1 回限りのトークンをセッション トークンと交換する必要があります。このプロセスについては、AuthSub のドキュメントをご覧ください。次のコード スニペットは、トークンをアップグレードする方法を示しています。
yt_service = gdata.youtube.service.YouTubeService() yt_service.SetAuthSubToken(authsub_token) yt_service.UpgradeToSessionToken()
このトークン値は、1 回限りの AuthSub トークンを表します。上記で session = True
が指定されているため、このトークンは UpgradeToSessionToken
メソッドを使用して AuthSub セッション トークンと交換できます。このメソッドは AuthSubSessionToken
サービスを呼び出します。
これで YouTubeService
オブジェクトが完全に認証され、YouTube API で今後行うすべてのリクエストに使用できるようになりました。AuthSub セッション トークンは、トークンの取り消しリクエストを明示的に送信した場合、またはユーザーが YouTube アカウントの [承認済みサイト] ページにアクセスしてアクセス権を取り消した場合を除き、期限切れになることはありません。
インストール済みアプリケーションの ClientLogin 認証
ClientLogin 認証は、ユーザー名とパスワードを保存またはクエリできるインストール済みアプリで使用されます。この形式の認証を使用するには、gdata.service.GDataService
クラスから継承された YouTubeService
の ProgrammaticLogin
メソッドを呼び出し、クライアントが認証リクエストを送信するユーザーの ID とパスワードを指定します。
yt_service = gdata.youtube.service.YouTubeService() yt_service.email = 'jo@gmail.com' yt_service.password = 'mypassword' yt_service.source = 'my-example-application' yt_service.ProgrammaticLogin()
認証情報が設定されると、YouTubeService
オブジェクトを使用して、以降のすべてのリクエストを処理できます。YouTube API へのアップロードやあらゆる種類の「書き込み」リクエスト(コメントの追加など)を実行できるようにするには、認証時にデベロッパー キーとクライアント ID を yt_service
オブジェクトに渡すようにしてください。
# A complete client login request yt_service.email = 'jo@gmail.com' yt_service.password = 'mypassword' yt_service.source = 'my-example-application' yt_service.developer_key = 'ABC123...' yt_service.client_id = 'my-example-application' yt_service.ProgrammaticLogin()
developer_key
属性と client_id
属性が設定されている場合、YouTubeService
オブジェクトは、正しい X-GData-Key
ヘッダーと X-GData-Client
ヘッダーを自動的に設定します。
注: AuthSub メカニズムと ClientLogin メカニズムの詳細については、Google Data APIs 認証のドキュメントをご覧ください。
動画フィードとエントリの理解
YouTube Data API は、標準フィード、アップロード、チャンネル登録、お気に入りなど、動画のリストを示す複数の動画フィードを提供します。各フィードの URL は、リファレンス ガイドに記載されています。
動画のフィードを表示する
YouTube API の多くのフィードは、動画エントリで構成されています。これらのフィードは、それぞれ複数の gdata.youtube.YouTubeVideoEntry
オブジェクトを含む gdata.youtube.YouTubeVideoFeed
オブジェクトとしてモデル化するのが最も簡単です。各動画エントリは YouTube 上の 1 つの動画に対応し、動画に関する情報が含まれています。
動画のリストを取得する基本的な構造は、動画フィードの URL を構築し、エントリを 1 つずつ処理することです。次のコードに例を示します。
def GetAndPrintVideoFeed(uri): yt_service = gdata.youtube.service.YouTubeService() feed = yt_service.GetYouTubeVideoFeed(uri) for entry in feed.entry: PrintEntryDetails(entry) # full documentation for this function
動画の取得と検索セクションでは、一般的なフィード URL の多くと、さまざまな動画フィードを取得する方法について詳しく説明しています。
特定の動画エントリの取得
動画 ID がわかれば、特定の動画エントリの情報のみを取得できます。エントリ URL は動画 ID に基づいています。
http://gdata.youtube.com/feeds/api/videos/videoID
次のコードは、YouTube の動画に対応する gdata.youtube.YouTubeVideoEntry
を取得します。
entry = yt_service.GetYouTubeVideoEntry(video_id='the0KZLEacs')
動画エントリのコンテンツ
gdata.youtube.YouTubeVideoEntry
オブジェクトから取得できるメタデータは、サムネイル、プレーヤーの URL、動画の長さなど、多数あります。次のコードは、この情報の一部を取得する方法を示しています。Python クライアント ライブラリは、XML 要素をクラスにマッピングすることで、この機能のほとんどを抽象化します。YouTubeVideoEntry
エントリに関する重要な情報のほとんどは、エントリ内の media
属性の子要素(gdata.media.Group
オブジェクトを含む)(XML media:group
要素を表す)から取得できます。動画のメタデータを取得する方法の例を次に示します。
def PrintEntryDetails(entry): print 'Video title: %s' % entry.media.title.text print 'Video published on: %s ' % entry.published.text print 'Video description: %s' % entry.media.description.text print 'Video category: %s' % entry.media.category[[]0].text print 'Video tags: %s' % entry.media.keywords.text print 'Video watch page: %s' % entry.media.player.url print 'Video flash player URL: %s' % entry.GetSwfUrl() print 'Video duration: %s' % entry.media.duration.seconds # non entry.media attributes print 'Video geo location: %s' % entry.geo.location() print 'Video view count: %s' % entry.statistics.view_count print 'Video rating: %s' % entry.rating.average # show alternate formats for alternate_format in entry.media.content: if 'isDefault' not in alternate_format.extension_attributes: print 'Alternate format: %s | url: %s ' % (alternate_format.type, alternate_format.url) # show thumbnails for thumbnail in entry.media.thumbnail: print 'Thumbnail url: %s' % thumbnail.url
注: ページにプレーヤー付きの動画埋め込みに必要な情報を生成する方法については、プロトコル ガイドをご覧ください。
動画の取得と検索
標準フィードの取得
YouTube Data API は、YouTube で最も人気のある動画の標準フィードを提供します。この API は以前、他の標準フィードをサポートしていましたが、現在は非推奨になっています。詳しくは、デベロッパー ガイドをご覧ください。
YouTube で最も人気のある動画のフィードの URL は次の形式です。
http://gdata.youtube.com/feeds/api/standardfeeds/most_popular
注: ロケール固有の標準フィードを取得するには、http://gdata.youtube.com/feeds/api/standardfeeds/localeID/feedID
形式でロケール ID を指定します。たとえば、日本で最も人気のある動画は http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_popular
です。想定される localeID の完全なリストについては、リファレンス ガイド をご覧ください。
def PrintVideoFeed(feed): for entry in feed.entry: PrintEntryDetails(entry) def GetAndPrintFeedByUrl: yt_service = gdata.youtube.service.YouTubeService() # You can retrieve a YouTubeVideoFeed by passing in the URI uri = 'http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_popular' PrintVideoFeed(yt_service.GetYouTubeVideoFeed(uri))
特定のユーザーがアップロードした動画を取得する
各 YouTube ユーザーには、アップロードした動画に対応する動画フィードが http://gdata.youtube.com/feeds/api/users/username/uploads
に関連付けられています。次のコードは、ユーザーがアップロードしたフィードを取得して表示する方法を示しています。
def GetAndPrintUserUploads(username): yt_service = gdata.youtube.service.YouTubeService() uri = 'http://gdata.youtube.com/feeds/api/users/%s/uploads' % username PrintVideoFeed(yt_service.GetYouTubeVideoFeed(uri))
注: username
の代わりに文字列「default」を使用して、現在認証されているユーザーの動画を取得することもできます。
関連動画の取得
関連動画を取得するには、gdata.youtube.YouTubeVideoEntry
オブジェクトの動画 ID を gdata.youtube.service.YouTubeService
オブジェクトの GetYouTubeRelatedVideoFeed
メソッドに渡します。これにより、関連エントリを含む YouTubeVideoFeed
オブジェクトが取得されます。
related_feed = yt_service.GetYouTubeRelatedVideoFeed(video_id='abc123')
動画の検索
YouTube Data API を使用すると、特定の作成者によって公開された動画エントリ、動画形式、特定のキーワードを含む動画エントリなど、指定された条件に一致するエントリセットをリクエストできます。これを行うには、特定の検索条件を含む gdata.service.YouTubeVideoQuery
オブジェクトを作成し、それを gdata.youtube.service.YouTubeService
の YouTubeQuery
メソッドに渡します。
次の例は、制限付き動画(API では「Racy」)を含む、視聴回数順に結果を並べ替える検索クエリを実行する方法を示しています。
def SearchAndPrint(search_terms): yt_service = gdata.youtube.service.YouTubeService() query = gdata.youtube.service.YouTubeVideoQuery() query.vq = search_terms query.orderby = 'viewCount' query.racy = 'include' feed = yt_service.YouTubeQuery(query) PrintVideoFeed(feed)
gdata.service.Query
クラスと YouTubeVideoQuery
などのサブクラスは、フィード URL の作成を担当します。上記の VideoQuery
は、次に相当する URL を作成します。
http://gdata.youtube.com/feeds/api/videos?vq=<searchTerms>&racy=include&orderby=viewCount
検索パラメータを設定するための最も一般的な YouTubeVideoQuery プロパティを以下に示します。
author
- エントリの作成者を設定します。作成者は YouTube ユーザー名と同じ意味です。
format
- 動画形式を指定します。数値パラメータを指定して、モバイル動画再生用の 2 種類の RTSP ストリーミング URL のいずれか、または埋め込み可能な Flash プレーヤーの HTTP URL を指定します。
racy
- 制限されているコンテンツを結果に含めるかどうかを指定します。使用できるパラメータは「include」と「exclude」の 2 つだけです。
max_results
- 一度に返されるエントリの最大数を設定します。
start_index
- 取得する最初の結果の 1 ベースのインデックスを設定します(ページング用)。
orderby
- エントリを一覧表示する順序を設定します(
relevance
、viewCount
、published
、rating
など)。 time
- 標準フィードの結果を
today
、this_week
、this_month
、all_time
のいずれかに制限する期間を設定します。 vq
- 検索クエリのキーワードを設定します。タイトル、タグ、説明など、すべての動画メタデータで指定された文字列を検索します。
注: クエリ パラメータの詳細については、YouTube Data API リファレンス ガイドと Google Data APIs リファレンス ガイドをご覧ください。
カテゴリとキーワードで検索する
検索結果を制限して、特定のカテゴリとキーワードに一致する動画のみを表示できます。リファレンス ガイドでは、事前定義された YouTube カテゴリ(音楽、人物、ブログなど)とユーザー定義キーワード(タグ)の両方を指定する方法について説明しています。
次のコードは、検索語句を小文字に変換して、キーワード(タグ)を使用して検索する方法を示しています。注: 一部の単語(「コメディ」など)は YouTube カテゴリとキーワードの両方であるため、カテゴリとキーワードのクエリでは、大文字の単語(「コメディ」)は YouTube カテゴリを表し、小文字の単語(「コメディ」)はキーワードを表すという規則が使用されます。
def SearchAndPrintVideosByKeywords(list_of_search_terms): yt_service = gdata.youtube.service.YouTubeService() query = gdata.youtube.service.YouTubeVideoQuery() query.orderby = 'viewCount' query.racy = 'include' for search_term in list_of_search_terms: new_term = search_term.lower() query.categories.append('/%s' % new_term) feed = yt_service.YouTubeQuery(query) PrintVideoFeed(feed)
デベロッパー タグによる検索
デベロッパー タグは、エンドユーザーがアプリからアップロードしたコンテンツにデベロッパーがタグを付けるために使用できる追加の非表示キーワードです。デベロッパー タグは、アップロード時にヘッダーに設定されたデベロッパー キーと照合されます。これらのキーワードは一般公開されず、動画の取得に使用される場合があります。特定のデベロッパー タグで動画を検索するには、デベロッパー キーを使用して一般的な YouTube Data API 検索リクエストを送信します。動画が一致する必要があるカテゴリ スキームとデベロッパー タグを指定してください。デベロッパー タグ(この例では「your_tag_here」)に一致する動画のフィードは、次の URL から取得できます。
developer_tag_uri = 'http://gdata.youtube.com/feeds/videos/-/%7Bhttp%3A%2F%2Fgdata.youtube.com%2Fschemas%2F2007%2Fdevelopertags.cat%7Dyour_tag_here' yt_service = gdata.youtube.service.YouTubeService() PrintVideoFeed(yt_service.GetYouTubeVideoFeed(developer_tag_uri))
動画のアップロード
アップロード プロセスの概要については、プロトコル ガイドの図をご確認ください。動画のアップロードは、次の 2 つの方法で行うことができます。
- 直接アップロード方法でサーバーから動画を直接アップロードする
- または、まずメタデータを送信し、その後、ユーザーがブラウザベースのアップロード方法で動画を YouTube に直接アップロードできるようにします。
直接アップロード
動画をアップロードするには、まず新しい gdata.youtube.YouTubeVideoEntry
オブジェクトを作成し、必要なメタデータを含む gdata.media.Group
オブジェクトを渡す必要があります。次の例は、次のプロパティを使用して QuickTime 動画「mytestmovie.mov」を YouTube にアップロードする方法を示しています。
プロパティ | 値 |
---|---|
タイトル | テスト用映画 |
カテゴリ | 自動車 |
Keywords | 車、面白い |
説明 | 自分の説明 |
ファイル名 | mytestmovie.mov |
ファイルの MIME タイプ | video/quicktime |
動画は非公開ですか? | false |
動画の撮影場所 | 37,-122(緯度、経度) |
デベロッパー タグ | mydevelopertag、anotherdevelopertag |
次のコードは、アップロードする空の YouTubeVideoEntry
を作成します。 YouTubeService
の InsertVideoEntry
メソッドには、次のパラメータが必要です。
video_entry
- メタデータを含むgdata.youtube.VideoEntry
オブジェクトfilename_or_handle
- ファイルのようなオブジェクト、または動画を読み取るファイル名youtube_username
- この動画をアップロードするアカウントのユーザー名を指定する文字列(省略可)。もちろん、アカウントに適切な権限が必要です。デフォルトでは、現在認証されているユーザーのアカウントが使用されます。content_type
- アップロードする動画の MIME タイプを指定する文字列(省略可)。
yt_service
変数が完全に認証された YouTubeService
オブジェクトを参照していることを前提としています。
# prepare a media group object to hold our video's meta-data my_media_group = gdata.media.Group( title=gdata.media.Title(text='My Test Movie'), description=gdata.media.Description(description_type='plain', text='My description'), keywords=gdata.media.Keywords(text='cars, funny'), category=[[]gdata.media.Category( text='Autos', scheme='http://gdata.youtube.com/schemas/2007/categories.cat', label='Autos')], player=None ) # prepare a geo.where object to hold the geographical location # of where the video was recorded where = gdata.geo.Where() where.set_location((37.0,-122.0)) # create the gdata.youtube.YouTubeVideoEntry to be uploaded video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group, geo=where) # set the path for the video file binary video_file_location = '/path/to/my/file.mov' new_entry = yt_service.InsertVideoEntry(video_entry, video_file_location)
動画にオプションのデベロッパー タグを付ける場合(詳しくはデベロッパー タグによる検索をご覧ください)、InsertVideoEntry
を呼び出す前に AddDeveloperTags
メソッドを使用できます。
developer_tags = [[]'some_tag_01', 'another_tag'] video_entry.AddDeveloperTags(developer_tags)
注: 動画を非公開としてアップロードするには、非公開属性を gdata.media.Group
に渡す必要があります。
my_media_group = gdata.media.Group( title=gdata.media.Title(text='My Test Movie'), description=gdata.media.Description(description_type='plain', text='My description'), keywords=gdata.media.Keywords(text='cars, funny'), category=[[]gdata.media.Category( text='Autos', scheme='http://gdata.youtube.com/schemas/2007/categories.cat', label='Autos')], player=None, private=gdata.media.Private() ) video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group) # assuming that video_file_location points to a valid path new_entry = yt_service.InsertVideoEntry(video_entry, video_file_location)
ブラウザベースのアップロード
ブラウザベースのアップロードは、動画のメタデータの送信に使用するリクエストでファイルのバイナリをアップロードしないことを除き、直接アップロードとほぼ同じ方法で実行されます。代わりに、メタデータのみを含む YouTubeVideoEntry
を作成します。この動画エントリは、YouTube API サーバーの特別なリンクに投稿されます。XML レスポンスには token
と url
が含まれます。これらを使用して、標準の HTML フォームを使用してバイナリ ファイルをアップロードできます。
# create media group as usual my_media_group = gdata.media.Group( title=gdata.media.Title(text='My Test Movie'), description=gdata.media.Description(description_type='plain', text='My description'), keywords=gdata.media.Keywords(text='cars, funny'), category=[[]gdata.media.Category( text='Autos', scheme='http://gdata.youtube.com/schemas/2007/categories.cat', label='Autos')], player=None ) # create video entry as usual video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group) # upload meta data only response = yt_service.GetFormUploadToken(video_entry) # parse response tuple and use the variables to build a form (see next code snippet) post_url = response[[]0] youtube_token = response[[]1]
上記のコードは、ユーザーのブラウザに表示する HTML フォームの作成に使用されるリンクとトークンを出力します。以下に、単純なフォームの例を示します。youtube_token
は、上記の YouTubeVideoEntry
から取得されたように、返されたトークン要素の内容を表します。フォームの送信後にユーザーをウェブサイトにリダイレクトするには、post_url
に next
パラメータを追加します(下記を参照)。これは、AuthSub リンクの next
パラメータと同じように機能します。唯一の違いは、ここでは 1 回限りのトークンではなく、status
変数と id
変数が URL パラメータとして返されることです。
next = 'http://example.com/post_video_upload.pyc' form = """<form action="%s?nexturl=%s" method="post" enctype="multipart/form-data"> <input name="file" type="file"/> <input name="token" type="hidden" value="%s"/> <input value="Upload Video File" type="submit" /> </form>""" % (post_url, next, youtube_token)
アップロードが成功した場合のレスポンスは次のようになります。
http://example.com/post_video_upload.pyc?status=200&id=ABC123
status
パラメータは、アップロード トランザクションの HTTP トランザクション ステータスを返します。id
パラメータは、アップロードされた動画に割り当てられた YouTube 動画 ID を返します。
アップロード ステータスの確認
動画をアップロードすると、認証されたユーザーのアップロード フィードにすぐに表示されます。ただし、処理が完了するまではサイトに公開されません。拒否された動画やアップロードに失敗した動画も、認証されたユーザーのアップロード フィードにのみ表示されます。次のコードは、YouTubeVideoEntry
のステータスを確認して、まだ公開されていないか、拒否されたかどうかを確認します。
upload_status = yt_service.CheckUploadStatus(new_entry) if upload_status is not None: video_upload_state = upload_status[[]0] detailed_message = upload_status[[]1]
動画の更新と削除
動画情報の更新
動画のメタデータを更新するには、YouTubeVideoEntry
オブジェクトを更新し、YouTubeService
オブジェクトの UpdateVideoEntry
メソッドを使用します。このメソッドは、更新されたメタデータを含む YouTubeVideoEntry
をパラメータとして受け取ります。
# assuming we have a video entry that was just posted in our 'new_entry' variable new_entry.media.title.text = 'My Updated Video Title' new_entry.media.description.text = 'Just updated' updated_entry = yt_service.UpdateVideoEntry(new_entry)
動画を削除する
動画の削除は非常に簡単で、YouTubeService
オブジェクトの DeleteVideoEntry
を呼び出すだけです。
response = yt_service.DeleteVideoEntry(entry_to_be_deleted) if response: print 'Video successfully deleted!'
コミュニティ機能の使用
評価を追加する
動画に評価を付けるには、YouTubeService
オブジェクトの AddRating
メソッドを使用します。自分の動画を評価することはできません。また、評価は 1 ~ 5 の範囲で指定する必要があります。
video_id_to_rate = 'Ncakifd_16k' video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id_to_rate) response = yt_service.AddRating(3, video_entry)
コメント
動画のコメントの取得
YouTubeVideoEntry
オブジェクトまたは単純な動画 ID を指定して、YouTubeService
オブジェクトの GetYouTubeVideoCommentFeed
メソッドを使用して、動画のコメントを含むフィードを取得して出力できます。生成されるフィードは、gdata.youtube.YouTubeCommentEntry
オブジェクトで構成される gdata.youtube.YouTubeCommentFeed
です。このフィードは、他のフィードと同様に解析できます。
video_id = 'ABC123...' comment_feed = yt_service.GetYouTubeVideoCommentFeed(video_id=video_id) for comment_entry in comment_feed.entry: print comment_entry.ToString()
コメントを追加しています
新しいコメントを追加するには、YouTubeService
オブジェクトの AddComment
メソッドを使用します。このメソッドには、コメントを付ける YouTubeVideoEntry
オブジェクト全体と、コメントを表す文字列が必要です。
my_comment = 'what a boring test video' video_id = '9g6buYJTt_g' video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id) yt_service.AddComment(comment_text=my_comment, video_entry=video_entry)
動画レスポンス
YouTube 動画レスポンスは、2 つ目の動画に返信として関連付けられた動画でした。動画の返信機能は、こちらのお知らせに記載されているとおり廃止されました。既存の動画レスポンスは引き続き利用できます。ただし、動画の動画レスポンスのリストを取得する、新しい動画レスポンスをアップロードする、動画レスポンスを削除する機能はサポートされていません。ただし、動画レスポンスで使用された動画は削除できます。そのため、これらの関数は API でもサポートされなくなりました。
動画レスポンス オペレーションの API リクエストで、次が返されるようになりました。
- 動画の動画レスポンスを取得するリクエストは、空のリストが返されます。
- 動画回答を追加するリクエストで、403 HTTP レスポンス コードが返されます。
- 動画の返信を削除するリクエストは、403 HTTP レスポンス コードを返します。
動画を報告する
動画に関する申し立てを追加するには、YouTubeService
オブジェクトの AddComplaint
メソッドを使用します。申し立ての用語は有効なカテゴリである必要があります。詳しくは、プロトコル ガイドの申し立ての追加のセクションをご覧ください。
video_id_to_flag = 'Ncakifd_16k' complaint_term = 'VIOLENCE' complaint_text = ('Please ignore this complaint. ' 'I\'m testing a YouTube API and needed to issue ' 'a complaint to test the add complaint function. ') response = yt_service.AddComplaint(complaint_text, complaint_term, video_id_to_flag)
動画の保存と収集
お気に入りの動画
ユーザーのお気に入りの動画の取得
YouTube ユーザーは、視聴した動画をお気に入りにマークできます。ユーザーのお気に入りのフィードの一般的な場所は次の URL です。
http://gdata.youtube.com/feeds/api/users/username/favorites
ユーザーのお気に入りの動画を取得するには、YouTubeService
オブジェクトの GetUserFavoritesFeed
メソッドを使用します。このメソッドは、お気に入りフィードを取得するユーザーの YouTube ユーザー名を表す文字列をパラメータとして受け取ります(省略可)。
favorite_feed = yt_service.GetUserFavoritesFeed(username='gdpython')
返されるフィードは、YouTubeVideoEntry
オブジェクトを含む通常の動画フィードです。
注: または、文字列 default
を渡して、現在認証されているユーザーのお気に入りを取得することもできます。これは、ユーザー名が指定されていない場合の GetUserFavoritesFeed
メソッドのデフォルトの動作です。
お気に入りを追加する
動画のお気に入りを追加するには、YouTubeService
オブジェクトの AddVideoEntryToFavorites
メソッドを使用します。パラメータは、追加する YouTubeVideoEntry
と、必要に応じて追加するお気に入りのユーザー名です(デフォルトは現在認証されているユーザーです)。
video_id = 'Ncakifd_16k' video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id) response = yt_service.AddVideoEntryToFavorites(video_entry) # The response, if successfully posted is a YouTubeVideoEntry if isinstance(response, gdata.youtube.YouTubeVideoEntry): print 'Video successfully added to favorites'
お気に入りを削除する
ブックマークを削除するには、YouTubeService
オブジェクトの DeleteVideoEntryFromFavorites
メソッドを使用します。
video_id = 'Ncakifd_16k' response = yt_service.DeleteVideoEntryFromFavorites(video_id) if response is True: print 'Video deleted from favorites'
再生リスト
各 YouTube ユーザーには、ユーザーが作成したすべてのプレイリストを含むプレイリスト フィードがあります。各再生リストには、その再生リストに含まれるすべての動画のフィードがあります。
ユーザーの再生リストの取得
ユーザーのすべての再生リストのリストを手動で取得するには、次の URL を使用します。
http://gdata.youtube.com/feeds/api/users/username/playlists
Python クライアント ライブラリを使用する場合は、YouTubeService
オブジェクトの GetYouTubePlaylistFeed
メソッドを使用できます。
playlist_feed = yt_service.GetYouTubePlaylistFeed(username='gdpython') # instead of passing in a username, you can also pass the URI to the playlist feed: playlist_feed = yt_service.GetYouTubePlaylistFeed(uri='http://gdata.youtube.com/feeds/api/users/default/playlists')
注: 特定のユーザー名(上記の例の「gdpython」など)を渡す代わりに、文字列 'default'
を渡して、現在認証されているユーザーを参照することもできます。
gdata.youtube.YouTubePlaylistFeed
は、gdata.youtube.YouTubePlaylistEntry
オブジェクトのフィードを表します。これは、ユーザーが作成した個々の再生リストを指します。特定の再生リストの動画エントリは、gdata.youtube.YouTubePlaylistVideoEntry
オブジェクトとして表されます。これらのオブジェクトは、いくつかの例外を除き、通常の gdata.youtube.YouTubeVideoEntry
オブジェクトと非常によく似ています。動画にはカスタムのタイトルと説明を適用できます。また、位置フィールドには、再生リスト内の動画の表示位置を指定します。
再生リスト情報の取得
YouTubePlaylistEntry
(特定の再生リストを表す)を指定すると、YouTubePlaylistVideoEntry
オブジェクトを含む YouTubePlaylistVideoFeed
を取得できます。前述のように、これらのオブジェクトは再生リスト内の個々の動画を表します(カスタムのタイトルと説明は省略可)。このフィードは、再生リストの URI を YouTubeService
オブジェクトの GetYouTubePlaylistVideoFeed
メソッドに渡すことで取得できます。
# a typical playlist URI playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505' playlist_video_feed = yt_service.GetYouTubePlaylistVideoFeed(uri=playlist_uri) # iterate through the feed as you would with any other for playlist_video_entry in playlist_video_feed.entry: print playlist_video_entry.title.text
再生リストの追加
新しい再生リストを追加するには、YouTubeService
オブジェクトの AddPlaylist
メソッドを使用します。このメソッドは、playlist_title、playlist_description(どちらも文字列)のパラメータを受け取り、オプションのブール値を受け取ります。このブール値は、再生リストを非公開としてマークする場合に True
に設定できます。
new_public_playlistentry = yt_service.AddPlaylist('my new playlist', 'a new playlist') if isinstance(new_public_playlistentry, gdata.youtube.YouTubePlaylistEntry): print 'New playlist added' # adding a private playlist new_private_playlistentry = yt_service.AddPlaylist('new private playlist', 'a new private playlist', True) if isinstance(new_private_playlistentry, gdata.youtube.YouTubePlaylistEntry): print 'New private playlist added'
再生リストの更新
再生リストを更新するには、YouTubeService
オブジェクトの UpdatePlaylist
メソッドを使用します。このメソッドは、更新するプレイリストの ID、新しいタイトル、新しい説明、プレイリストを非公開にするためのオプションのブール値、プレイリストを所有するユーザー名を示すオプションの文字列を受け取ります。デフォルトでは、現在認証されているユーザーが文字列になります。
# here we are updating a public playlist with a new title while also making it private # we assume that playlist_to_be_updated here represents a YouTubePlaylistEntry object playlist_entry_id = playlist_to_be_updated.id.text.split('/')[[]-1] # we want to keep the original description for the playlist so we store it first original_description = playlist_to_be_updated.description.text updated_playlist = yt_service.UpdatePlaylist(playlist_entry_id, 'a new updated title', original_playlist_description, playlist_private=True)
再生リストへの動画の追加
動画をプレイリストに追加するには、YouTubeService
オブジェクトの AddPlaylistVideoEntryToPlaylist
メソッドを使用します。次のコードは、カスタムのタイトルと説明を使用して動画を再生リストに追加します。
custom_video_title = 'my test video on my test playlist' custom_video_description = 'this is a test video on my test playlist' video_id = 'Ncakifd_16k' playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505' playlist_video_entry = yt_service.AddPlaylistVideoEntryToPlaylist( playlist_uri, video_id, custom_video_title, custom_video_description) if isinstance(playlist_video_entry, gdata.youtube.YouTubePlaylistVideoEntry): print 'Video added'
注: カスタムのタイトルと説明は必須ではありません。指定しない場合、動画の実際のタイトルと説明が使用されます。
再生リストの動画情報を編集する
YouTubePlaylistVideoEntry
のメタデータを変更するには、YouTubeService
オブジェクトの UpdatePlaylistVideoEntryMetaData
メソッドを使用します。以下の例では、動画に新しいカスタム タイトルを付けて、再生リストの最初の位置(位置 1)に移動することにします。
playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505' playlist_entry_id = 'B0F29389E537F888' new_video_title = 'a useful video' new_video_description = 'updated video description' updated_playlist_video_entry = yt_service.UpdatePlaylistVideoEntryMetaData( playlist_uri, playlist_entry_id, new_video_title, new_video_description, 1)
注: 再生リスト内の動画の説明とタイトルを元のメタデータに戻すには、タイトルと説明の両方に NULL
を渡します。
動画を再生リストから削除
再生リストから動画を削除するには、YouTubeService
オブジェクトの DeletePlaylistVideoEntry
メソッドを使用します。このメソッドでは、削除するエントリを含むプレイリストの URI と、エントリの ID が必要です。
playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505' playlist_entry_id = 'B0F29389E537F888' response = yt_service.DeletePlaylistVideoEntry(playlist_uri, playlist_entry_id) if response is True: print 'Entry successfully deleted'
プレイリストを削除する
再生リストを削除するには、YouTubeService
オブジェクトの DeletePlaylist
メソッドを使用して、削除する再生リストの URI を渡します。
playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505' response = yt_service.DeletePlaylist(playlist_uri) if response is True: print 'Playlist successfully deleted'
定期購入
特定のユーザーが登録しているチャンネル、検索、お気に入りのリストを取得するには、次の URI を使用します。
http://gdata.youtube.com/feeds/api/users/username/subscriptions
注: または、文字列 default
を渡して、現在認証されているユーザーのお気に入りを取得することもできます。
ユーザーのサブスクリプションの取得
次のコードは、特定のユーザーの定期購入のリストを取得して出力する方法を示しています。サブスクリプションは、gdata.youtube.YouTubeSubscriptionEntry
オブジェクトで構成される gdata.youtube.YouTubeSubscriptionFeed
として表されます。サブスクリプションを取得するには、YouTubeService
オブジェクトの GetYouTubeSubscriptionFeed
メソッドを使用して、サブスクリプション フィードの URI またはサブスクリプション フィードを取得するユーザー名を渡します。ユーザー名パラメータのデフォルトは、現在認証されているユーザーです。
subscription_feed = yt_service.GetYouTubeSubscriptionFeed(username='gdpython') if isinstance(subscription_feed, gdata.youtube.YouTubeSubscriptionFeed)): # given a YouTubeSubscriptionEntry we can determine it's type (channel, favorite, or query) for entry in subscription_feed.entry: print entry.GetSubscriptionType()
サブスクリプションの追加
新しいサブスクリプションを作成するには、認証済みユーザーのサブスクリプション フィードに新しい YouTubeSubsciptionEntry
を挿入します。サブスクリプションは、ユーザーのチャンネル(AddSubscriptionToChannel
を使用)、ユーザーのお気に入り(AddSubscriptionToFavorites
を使用)、特定のキーワード(AddSubscriptionToQuery
を使用)の 3 種類を作成できます。次のコードは、認証済みユーザーを 「GoogleDevelopers」 チャンネルに登録します。
new_subscription = yt_service.AddSubscriptionToChannel( username_to_subscribe_to='GoogleDevelopers') if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry): print 'New subscription added'
「GoogleDevelopers」ユーザーのお気に入りを定期購読することもできます。
new_subscription = yt_service.AddSubscriptionToFavorites( username='GoogleDevelopers') if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry): print 'New subscription added'
最後に、特定の検索キーワードを定期購読することもできます。ここでは、「python」というタグが付けられた動画のクエリをサブスクライブしています。
new_subscription = yt_service.AddSubscriptionToQuery(query='python') if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry): print 'New subscription added'
サブスクリプションを削除する
ユーザー サブスクリプションを削除するには、YouTubeService
オブジェクトの DeleteSubscription
メソッドを使用します。
sample_subscription_uri = ('http://gdata.youtube.com/feeds/api/users/' 'gdpython/subscriptions/c0c77ca6102a7479') response = yt_service.DeleteSubscription(sample_subscription_uri) if response is True: print 'Subscription successfully deleted'
ユーザー操作を有効にする
ユーザー プロフィール
ユーザーのプロフィールの取得
ユーザーの YouTube プロフィールを手動で取得するには、次の URI を使用します。
http://gdata.youtube.com/feeds/api/users/username
gdata.youtube.YouTubeUserEntry
は、YouTubeService
オブジェクトの GetYouTubeUserEntry
メソッドで取得できます。
user_entry = yt_service.GetYouTubeUserEntry(username='gdpython') # we can then write a helper function to print out the user details def PrintUserEntry(entry): # print required fields where we know there will be information print 'URI: %s\n' % entry.id.text print 'Age: %s\n' % entry.age.text print 'Gender: %s\n' % entry.gender.text print 'Location: %s\n' % entry.location.text # check if there is information in the other fields and if so print it if user.first_name: print 'First Name: %s\n' % user.first_name.text if user.last_name: print 'Last Name: %s\n' % user.last_name.text if user.relationship: print 'Relationship: %s\n' % user.relationship.text if user.description: print 'About me: %s\n' % user.description.text for link in user.link: if link.rel == 'related': print 'Website: %s\n' % link.href if user.company: print 'Company: %s\n' % user.company.text if user.occupation: print 'Occupation: %s\n' % user.occupation.text if user.school: print 'School: %s\n' % user.school.text if user.hobbies: print 'Hobbies: %s\n' % user.hobbies.text if user.movies: print 'Movies: %s\n' % user.movies.text if user.music: print 'Music: %s\n' % user.music.text if user.books: print 'Books: %s\n' % user.books.text if user.hometown: print 'Hometown: %s\n' % user.hometown.text
連絡先
特定のユーザーの連絡先リストは、次の URL から取得できます。
http://gdata.youtube.com/feeds/api/users/username/contacts
ユーザーの連絡先の取得
YouTubeService
オブジェクトの GetYouTubeContactFeed
メソッドを使用して、gdata.youtube.YouTubeContactEntry
オブジェクトで構成される gdata.youtube.YouTubeContactFeed
を取得できます。
contact_feed = yt_service.GetYouTubeContactFeed(username='GoogleDevelopers') for entry in contact_feed.entry: print entry.title.text # find the apprpriate category element to find out the contact type for category in entry.category: if category.scheme == 'http://gdata.youtube.com/schemas/2007/contact.cat': print category.term
連絡先の追加
ユーザーの連絡先フィードに新しい連絡先を追加するには、YouTubeService
オブジェクトの AddContact
メソッドを使用します。
new_contact = yt_service.AddContact(contact_username='GoogleDevelopers') if isinstance(new_contact, gdata.youtube.YouTubeContactEntry) print 'New contact added'
連絡先の承認/拒否
連絡先を更新するには、YouTubeService
オブジェクトの UpdateContact
メソッドを使用します。この方法は、連絡先リクエストの承認/拒否や、連絡先を「友だち」または「家族」に分類するために使用できます。以下の例では、連絡先を承認し、そのカテゴリを「家族」に設定します。
# in this case user 'gdpython' has requested to be our contact #so the original contact status is 'pending' updated_contact = yt_service.UpdateContact('gdpython', 'accepted', 'Family') if isinstance(updated_contact, gdata.youtube.YouTubeContactEntry) print 'New contact added'
連絡先の削除
連絡先を削除するには、YouTubeService
オブジェクトの DeleteContact
メソッドを使用して、削除する連絡先のユーザー名を渡します。
response = yt_service.DeleteContact(contact_username='gdpython') if response is True: print 'Contact deleted'