谷歌YouTube API v3抛出503后端错误
我正在开发一个应用程序,它可以从某些网站上抓取歌曲,并通过谷歌的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 个回答
我无法在你的问题下评论,所以我觉得这不是一个答案,但也许可以给你一些参考。之前我在做一个项目,里面有一份包含很多YouTube视频链接的CSV列表。我想把视频的标题放在链接旁边。因为网页的标题就是视频的标题,所以我用了一个叫URLLIB的工具,从列表里的链接抓取网页,提取标题,然后把它放进我的列表里,然后再处理下一个链接,依此类推。不过,我只得到了部分结果!大概只有一半的链接能成功。后来我发现是因为我用URLLIB访问YouTube的速度太快,YouTube的服务器可能在限制我。我设置了一个5到15秒的间隔,结果有所不同。我每次视频之间等了15秒,最终我成功获取了每个页面的标题。虽然你在用YouTube的API,我对此不太了解,但也许通过API访问YouTube的数据也会受到某种限制?我只是随便想想,抱歉把这个发成了答案,但我找不到评论按钮!
编辑 - 为了让这个更像一个答案,建议你使用时间模块在API调用之间设置暂停。
while 0 == 0
likeVideo(youtube, video_id)
time.sleep(15)
希望这对你有帮助,或者至少能帮助其他人。祝好运!