デベロッパー ガイド: Python

YouTube Data API を使用すると、クライアント アプリケーションで Google Data API フィードの形式で YouTube コンテンツを取得して更新できます。クライアント アプリケーションでは、YouTube Data API フィードを使用して、動画、コメント、レスポンス、再生リスト、ユーザー プロフィール、ユーザー連絡先を取得、検索、更新したり、特定の条件に一致する動画に対してクエリを実行したりできます。

このドキュメントでは、YouTube Data API の機能に関する背景情報を提供するだけでなく、Python クライアント ライブラリを使用した API の操作の例も説明します。Python クライアント ライブラリを使用するには、Python 2.0 以降と、要素ツリー、httplib、urllib モジュールが必要です。詳細については、依存関係モジュールをご覧ください。

Python クライアント ライブラリの設定についてサポートが必要な場合は、スタートガイドをご覧ください。Python クライアント ライブラリが YouTube を操作する際に使用するプロトコルの詳細については、デベロッパー ガイドのプロトコル ページをご覧ください。

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

対象者

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

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

このドキュメントは、Google Data API プロトコルの背後にある一般的な概念を理解し、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 以降と、要素ツリー、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 サーバーに対する認証が必要です。

認証には、デスクトップ アプリケーションの場合は gclid 認証、ウェブ アプリケーションの場合は AuthSub 認証を使用します。

デベロッパー キーとクライアント ID の設定

デベロッパー キーは、API リクエストを送信する YouTube デベロッパーを識別します。クライアント ID は、ロギングとデバッグの目的でアプリケーションを識別します。

Python クライアント ライブラリを使用して API リクエストを行うと、デベロッパー キーの指定に X-GData-Key リクエスト ヘッダーが使用され、クライアント ID の指定に X-GData-Client ヘッダーが使用されます。デベロッパー キーとクライアント ID は、使用する認証スキームとは関係なく、YouTubeService オブジェクトで設定できます。

yt_service.developer_key = 'ABCxyz123...'
yt_service.client_id = 'My-Client_id'

YouTube デベロッパー キーには登録する必要があります。

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

AuthSub プロキシ認証は、YouTube/Google アカウントでユーザーを認証する必要があるウェブ アプリケーションで使用されます。事業者が YouTube ユーザーのユーザー名とパスワードにアクセスする必要はありません。必要なのは特別な AuthSub トークンのみです。

ユーザーが初めてアプリケーションにアクセスしたときに、Google のサービスによる認証がまだ行われていません。この場合、YouTube アカウントへのアクセス リクエストを承認するため、ユーザーを Google に誘導するリンクをユーザーに提供する必要があります。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 - ユーザーがアプリケーションを承認した後に、ユーザーをリダイレクトするページの 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 からこのトークンを取得する方法の一例です。

import cgi
parameters = cgi.FieldStorage()
authsub_token = parameters[[]'token' ]

セッション トークンへのアップグレード

セキュリティ上の理由から、このトークンは 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 アカウントの [承認済みサイト] ページでアクセスを取り消さない限り、期限切れにはなりません。

インストールしたアプリケーションの SafeFrame 認証

インストール済みのアプリケーションで IdP 認証が使用されている場合は、ユーザー名とパスワードを保存または照会できます。この形式の認証を使用するには、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 と SafeFrame の両方のメカニズムについて詳しくは、Google Data API の認証に関するドキュメントをご覧ください。

動画のフィードとエントリについて

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 の形式で localeID を指定して取得することもできます。たとえば、日本で特に人気のある動画は 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」または「excluded」の 2 つのパラメータのみを受け入れます。
max_results
一度に返されるエントリの最大数を設定します。
start_index
最初の結果を取得するための 1 から始まるインデックスを設定します(ページ設定用)。
orderby
relevanceviewCountpublishedrating など、エントリを一覧表示する順序を設定します。
time
標準フィードの結果を todaythis_weekthis_monthall_time のいずれかに制限する期間を設定します。
vq
検索クエリ語句を設定します。タイトル、タグ、説明など、すべての動画メタデータで指定された文字列を検索します。

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

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

検索結果を制限して、指定したカテゴリやキーワードのセットに一致する動画のみを表示できます。リファレンス ガイドでは、事前定義済みの 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 にアップロードします。

プロパティ
タイトル私のテスト映画
カテゴリ自動
キーワード車、面白い
説明私の説明
ファイル名mytestmovie.mov
ファイルの MIME タイプvideo/quicktime
動画が非公開?false
動画の撮影場所37 ~ 122(lat, long)
デベロッパー タグmydevelopertag、otherdevelopertag

次のコードは、アップロードする空の YouTubeVideoEntry を作成します。InsertVideoEntryメソッドは、YouTubeService に必要です。

  • 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 レスポンスには 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 フォームを作成します。以下にシンプルなサンプル フォームを示します。上記の YouTubeVideoEntry から取得したように、youtube_token は返されたトークン要素の内容を表します。フォームの送信後にユーザーをウェブサイトにリダイレクトするには、next パラメータを post_url に必ず追加します。これは、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()

コメントを追加する

新しいコメントを追加するには、simpy を使用して、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'

注: カスタムのタイトルや説明は必要ありません。指定しない場合は、動画の実際のタイトルと説明が使用されます。

再生リストの動画情報を編集する

YouTubeService オブジェクトの UpdatePlaylistVideoEntryMetaData メソッドを使用して、YouTubePlaylistVideoEntry のメタデータを変更します。下記の例では、動画に新しいカスタム タイトルを付け、再生リストの最初の位置(位置 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 を認証済みユーザーの [登録チャンネル] フィードに挿入します。

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 メソッドを使用します。この方法は、連絡先のリクエストを承認または拒否したり、連絡先を「友だち」または「家族」に分類したりするために使用できます。以下の例では、連絡先を採用し、カテゴリを [Family] に設定しています。

# 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'

トップへ戻る