我正在开发一个应用程序,它可以从某些网站上删除歌曲,然后通过Google的Youtube API以编程方式“点击”它们在youtube上。要获取我正在查找的视频ID,我会使用艺术家和歌曲标题执行Google搜索,然后解析结果。此过程正常工作并返回有效的视频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的批次。在做我应该考虑的批量请求时是否会发生一些事情?答案 0 :(得分:4)
我不会让你评论你的问题,我不认为这是一个答案,但也许只是需要考虑的事情。前段时间我正在开展一个项目,其中我有一个包含youtube视频网址的CSV列表。我想将视频标题放在我的CSV列表中的URL旁边。鉴于页面的标题是视频的标题,我利用URLLIB从列表中的URL抓取页面,获取标题,将其放入我的列表并循环浏览下一个,下一个,等等等等。无论如何,我只得到了部分结果!只有一半像他们工作。好吧,事实证明我用URLLIB打你的管太快了,他们的服务器必须一直扼杀我或者什么东西,我实施了5-15秒的计时器并得到了不同的结果。我在每个视频之间做了15秒,我能够获得每一页的标题。现在授予你使用youtube API,我一无所知,但也许通过他们的API调用youtube数据也受到限制?我只是在这里吐痰,抱歉发布这个作为答案,但我似乎无法找到评论按钮!
编辑 - 要尝试使其看起来更像是一个答案,请尝试使用时间模块在API调用之间休眠。
while 0 == 0
likeVideo(youtube, video_id)
time.sleep(15)
希望这会有所帮助,或者至少其他人会这样做。祝你好运!