谷歌YouTube API v3抛出503后端错误

5 投票
1 回答
2003 浏览
提问于 2025-04-17 14:06

我正在开发一个应用程序,它可以从某些网站上抓取歌曲,并通过谷歌的YouTube API自动给这些歌曲“点赞”。为了获取我想要的视频ID,我会用艺术家和歌曲标题在谷歌上搜索,然后从搜索结果中提取出视频ID。这个过程运行得很好,返回了有效的视频ID(我手动测试过)。我遇到的问题是,我用来根据视频ID给歌曲“点赞”的代码,基本上是直接复制自谷歌的YouTube API Python示例:

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错误……不过,目前它通常每次会话只发起一个API请求。当我第一次遇到这个错误时,它是一次性发起大约6个请求。进行批量请求时,有什么需要注意的地方吗?

1 个回答

4

我无法在你的问题下评论,所以我觉得这不是一个答案,但也许可以给你一些参考。之前我在做一个项目,里面有一份包含很多YouTube视频链接的CSV列表。我想把视频的标题放在链接旁边。因为网页的标题就是视频的标题,所以我用了一个叫URLLIB的工具,从列表里的链接抓取网页,提取标题,然后把它放进我的列表里,然后再处理下一个链接,依此类推。不过,我只得到了部分结果!大概只有一半的链接能成功。后来我发现是因为我用URLLIB访问YouTube的速度太快,YouTube的服务器可能在限制我。我设置了一个5到15秒的间隔,结果有所不同。我每次视频之间等了15秒,最终我成功获取了每个页面的标题。虽然你在用YouTube的API,我对此不太了解,但也许通过API访问YouTube的数据也会受到某种限制?我只是随便想想,抱歉把这个发成了答案,但我找不到评论按钮!

编辑 - 为了让这个更像一个答案,建议你使用时间模块在API调用之间设置暂停。

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

希望这对你有帮助,或者至少能帮助其他人。祝好运!

撰写回答