YouTube python API v3 HttpError 400 subscriptionDeplicate
问题描述:
我正在使用YouTube python API v3将oauth2认证用户订阅到新频道。YouTube python API v3 HttpError 400 subscriptionDeplicate
def add_subscription(youtube, channel_id):
add_subscription_response = youtube.subscriptions().insert(
part='id,snippet',
body=dict(
snippet=dict(
resourceId=dict(
channelId=channel_id
)
)
)).execute()
return add_subscription_response["id"], add_subscription_response["snippet"]["title"]
youtube = get_authenticated_service(args)
try:
subscription_id,channel_title = add_subscription(youtube, args.channel_id)
except HttpError, e:
print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content)
else:
print "A subscription to '%s' was added." % channel_title
从https://developers.google.com/youtube/v3/docs/subscriptions/insert似乎(或也许,我理解,...),如果用户已订阅由channel_id
描述的信道,则该函数应该提高的HttpError
与e.resp.status
= 400
用于subscriptionDuplicate
。不过,如果我尝试订阅用户已订阅的频道,则该功能通常会返回subscription_id
和channel_title
。
它不应该提高HttpError 400
?
而且,如果我没有犯错误,而且这正是该功能的工作方式,那么我该如何检查经过身份验证的用户是否已使用subscriptions().insert()
订阅channel_id
?
我可以调用之前subscriptions().list()
,以检查是否用户订阅:
def is_subscribed(youtube, channel_id):
is_subscription_response = youtube.subscriptions().list(
part='id',
mine='true',
forChannelId=channel_id
).execute()
if len(is_subscription_response["items"]) == 0:
return False
else:
return True
但是这会增加配额使用...
答
我也试过Subscriptions: insert
请求,并在通道中使用的是我已经订阅了,而且我没有收到错误subscriptionDuplicate
。我不知道为什么API没有返回这个错误。
因此,要回答你如何检查是否已验证的用户已经订阅了channel_id
问题,使用Subscriptions: list
知道所有你所订阅的频道。
以下是sample request,只需将channelId替换为您自己的channelId即可。
https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&channelId=YOUR_CHANNEL_ID&key={YOUR_API_KEY}
@KENDdi感谢,是的,我知道(我只是编辑今天我的问题,包括检查订阅功能),但是这会增加配额使用情况。也许这是一个'订阅()的API错误。insert()'... –
我会稍后做一些测试,如果我发现任何线索,我会通知你。 – KENdi
你是谁提出这个问题的人“https://code.google.com/p/gdata-issues/issues/detail?id=8935&q=subscriptionDuplicate&colspec=API%20ID%20Type%20Status%20Priority%20Stars%20Summary”我已经投票了这个问题。 – KENdi