4

私は、特定のWebサイトから曲を取得し、GoogleのYoutubeAPIを介してプログラムでYouTubeでそれらを「いいね」するアプリケーションに取り組んでいます。探しているビデオIDを取得するために、アーティストと曲のタイトルを使用してGoogle検索を実行し、結果を解析します。このプロセスは正常に機能し、有効なビデオIDを返します(手動でテストしました)。問題が発生したのは、ビデオIDに基づいて何かを「いいね」するためのコードです。これは基本的にGoogleのYouTubeAPIPythonの例から直接コピーされたものです。

def likeVideo(youtube, video_id):
    channels_list_response = youtube.channels().list(
      mine=True,
      part="contentDetails"
    ).execute()

    # Adding a video as a favorite or to the watch later list is done via the
    # same basic process. Just read the list id of the corresponding playlist
    # instead of "likes" as we're doing here.
    liked_list_id = channels_list_response["items"][0]["contentDetails"]["relatedPlaylists"]["likes"]

    body = dict(
      snippet=dict(
        playlistId=liked_list_id,
        resourceId=dict(
          kind="youtube#video",
          videoId=video_id
        )
      )
    )
    youtube.playlistItems().insert(
      part=",".join(body.keys()),
      body=body
    ).execute()

    print "%s has been liked." % video_id

ただし、私のアプリはこのエラーをスローしています:

apiclient.errors.HttpError: <HttpError 503 when requesting https://www.googleapis.com/youtube/v3/playlistItems?alt=json&part=snippet returned "Backend Error">

グーグル開発フォーラムを検索すると、これはグーグル側のサーバー側の問題である可能性があることがわかりますが、私の特定の状況についてはわかりません。誰かが何が間違っているのかわかりますか?

編集:私は過去数日間このアプリを使用していて、それはややきちんと機能しているようです。いくつかの503エラー...ただし、この時点では、通常、セッションごとに1つのAPIリクエストのみを実行しています。私が最初にエラーに遭遇したとき、それは約6のバッチを実行していました。私が説明する必要があるバッチ要求を実行するときに何かが起こりますか?

4

1 に答える 1

4

あなたの質問にコメントすることはできません。これを答えとは考えていませんが、おそらく考慮すべきことです。少し前に、YouTube ビデオの URL でいっぱいの CSV リストを作成するプロジェクトに取り組んでいました。動画のタイトルを CSV リストの URL の横に配置したいと考えていました。ページのタイトルがビデオのタイトルだったので、URLLIB を使用してリスト内の URL からページを取得し、タイトルを取得してリストに入れ、次のページ、次のページなどをループします。などとにかく、部分的な結果しか得られませんでした! それらの半分程度しか機能しませんでした。URLLIB を使用して youtube にアクセスする速度が速すぎたことがわかりました。サーバーが私を抑制していたに違いありません。5 ~ 15 秒のタイマーを実装したところ、さまざまな結果が得られました。各動画の間に 15 秒の間隔を空けて、すべてのページ タイトルを取得することができました。私が何も知らないYouTube APIを使用することを許可しましたが、APIを介したYouTubeデータへの呼び出しも何らかの形で抑制されているのでしょうか? 私はここに唾を吐きかけています。これを回答として投稿して申し訳ありませんが、コメントボタンが見つからないようです!

編集 - これをより答えのように見せるために、time モジュールを利用して API 呼び出し間でスリープしてみてください。

while 0 == 0
  likeVideo(youtube, video_id)
  time.sleep(15)

これが役立つことを願っています、または少なくとも他の誰かがそうします。幸運を!

于 2013-02-01T15:13:05.420 に答える