0

解決済み: Python API は v1 のみをサポートしますが、watch later は v2 で追加されました。ソース
の解決策: 「実験的な」API v3 を使用する


Youtube API を使用して [後で見る] プレイリストにアクセスしようとしています。以下は私が使用しているコードです。

import gdata.youtube
import gdata.youtube.service

yt_service = gdata.youtube.service.YouTubeService()
yt_service.ssl = True
yt_service.developer_key = 'REDACTED'
yt_service.email = 'REDACTED'
yt_service.password = 'REDACTED'
yt_service.ProgrammaticLogin()

playlist_uri = 'https://gdata.youtube.com/feeds/api/users/default/watch_later?v=2'
playlist_video_feed = yt_service.GetYouTubePlaylistVideoFeed(uri=playlist_uri)
for playlist_video_entry in playlist_video_feed.entry:
  print playlist_video_entry.title.text

次のエラーが表示されます。

Traceback (most recent call last):
  File "Youtube.py", line 21, in <module>
    playlist_video_feed = yt_service.GetYouTubePlaylistVideoFeed(uri=playlist_uri)
  File "/Library/Python/2.6/site-packages/gdata/youtube/service.py", line 393, in GetYouTubePlaylistVideoFeed
    uri, converter=gdata.youtube.YouTubePlaylistVideoFeedFromString)
  File "/Library/Python/2.6/site-packages/gdata/service.py", line 1108, in Get
    'reason': server_response.reason, 'body': result_body}
gdata.service.RequestError: {'status': 400, 'body': 'Invalid request URI', 'reason': 'Bad Request'}

URI https://gdata.youtube.com/feeds/api/users/default/watch_later?v=2が無効のようです。ただし、これはGoogleドキュメントで使用されると述べられているものです。私はそれを間違って使用していますか、それともここに別の問題がありますか?

さらに、URI を変更するhttp://gdata.youtube.com/feeds/api/playlists/63F0C78739B09958と、期待どおりに動作します。

4

1 に答える 1

0

認証を確認する必要があります。ユーザーの「後で見る」プレイリストの取得と更新によると:

繰り返しますが、次の条件のいずれかが true の場合、リンクはプロファイル エントリにのみ存在します。

ログインしているユーザー自身のプロファイルを取得するために、認証済みの要求を送信します。

watch_later プレイリストは、プロファイルを取得しているユーザーに対して公開されています。

上記の条件のいずれにも当てはまらない場合に、watch_later プレイリストを取得しようとすると、API サーバーは 40x HTTP 応答コードを返します。

2 番目のリンクは、公開されている 2 番目の条件が満たされているため、おそらく機能します。あなたの例に欠けていることに気付いたことの1つは、クライアントID/ソースです:

# 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()

それを調べて、認証が適切に行われていることを確認する必要があります。

于 2013-03-06T00:46:21.093 に答える