デベロッパー ガイド: Python

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 クラスから継承された YouTubeServiceProgrammaticLogin メソッドを呼び出し、クライアントが認証リクエストを送信するユーザーの 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.YouTubeServiceYouTubeQuery メソッドに渡します。

次の例は、制限付き動画(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
エントリを一覧表示する順序を設定します(relevanceviewCountpublishedrating など)。
time
標準フィードの結果を todaythis_weekthis_monthall_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 を作成します。 YouTubeServiceInsertVideoEntry メソッドには、次のパラメータが必要です。

これらの例では、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 レスポンスには tokenurl が含まれます。これらを使用して、標準の 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_urlnext パラメータを追加します(下記を参照)。これは、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'

トップへ戻る