YouTubeのユーザーのプレイリストに動画を追加するPythonを使用したアプリケーションを作成しています。これを一度に実行すると、Youtubeは私のリクエストを抑制し始めます。
一度に50件のリクエストを送信できるバッチ処理APIがありますが、バッチ処理リクエストを送信する方法がドキュメントからわかりません。それに関する唯一の情報は、リクエストのために送信する必要のあるXMLコンテンツをカバーしています。
バッチ処理リクエストを送信する方法を知っている人はいますか?
YouTubeのユーザーのプレイリストに動画を追加するPythonを使用したアプリケーションを作成しています。これを一度に実行すると、Youtubeは私のリクエストを抑制し始めます。
一度に50件のリクエストを送信できるバッチ処理APIがありますが、バッチ処理リクエストを送信する方法がドキュメントからわかりません。それに関する唯一の情報は、リクエストのために送信する必要のあるXMLコンテンツをカバーしています。
バッチ処理リクエストを送信する方法を知っている人はいますか?
私はこの方法で物事を成し遂げることができました:
query = "<feed xmlns=\"http://www.w3.org/2005/Atom\""
query += " xmlns:media=\"http://search.yahoo.com/mrss/\""
query += " xmlns:batch=\"http://schemas.google.com/gdata/batch\""
query += " xmlns:yt=\"http://gdata.youtube.com/schemas/2007\">"
query += "<batch:operation type=\"query\"/>"
# Assume ids contain list of YouTube video IDs
for vid in ids:
query += ("<entry><id>http://gdata.youtube.com/feeds/api/videos/%s</id></entry>" % vid)
query += "</feed>"
uri = 'http://gdata.youtube.com/feeds/api/videos/batch'
feed = client.Post( query, uri, converter=gdata.youtube.YouTubeVideoFeedFromString )
結果のフィードは、標準のYouTubeAPIフィードとして繰り返すことができます。欠落しているビデオやその他の<batch:status> -esには特別な注意を払う必要がありますが、次のようになります。
if len(feed.entry):
for entry in feed.entry:
skip = False
for x in entry.extension_elements:
if x.tag == "status" and x.namespace == "http://schemas.google.com/gdata/batch" and x.attributes["code"] != "200":
if x.attributes["code"] == "404":
skip = True
# Likewize you can check for entry's 403 e.g. Quota Exceeded etc
... # Your entry processing goes here
これはgdata-python-clientwikiに文書化されているようです:http ://code.google.com/p/gdata-python-client/wiki/UsingBatchOperations 。そのページの例はYouTubeではなくベースシートとスプレッドシート用ですが、同じ手法をYouTubeAPIに適用するのはかなり簡単なはずです。おそらく、v2APIを使用する必要があります。