YouTube python API v3 HttpError 400订阅副本

YouTube python API v3 HttpError 400订阅副本,python,youtube-api,youtube-data-api,Python,Youtube Api,Youtube Data Api,我正在使用YouTube python API v3向oauth2认证用户订阅新频道 def add_subscription(youtube, channel_id): add_subscription_response = youtube.subscriptions().insert( part='id,snippet', body=dict( snippet=dict( resourceId=dict( channelId

我正在使用YouTube python API v3向oauth2认证用户订阅新频道

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
从表面上看(或者,我理解…),如果用户已经订阅了
channel\u id
所描述的频道,那么对于
subscriptionDuplicate
,函数应该使用
e.resp.status
=
400
来引发
HttpError

尽管如此,如果我尝试订阅用户已经订阅的频道,该函数通常会返回
subscription\u id
channel\u title

它不应该引发HttpError 400吗

而且,如果我没有犯错误,而且这正是函数应该工作的方式,那么我可以做些什么来检查经过身份验证的用户是否已经订阅了
channel\u id
,只使用
subscriptions().insert()

我可以在之前调用
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
但这会增加配额使用率…

我也尝试了请求,并在我已经订阅的频道中使用它,但我没有收到错误
subscriptionDuplicate
。我不知道为什么API没有返回这个错误

因此,要回答有关如何检查经过身份验证的用户是否已订阅
频道id
,请使用了解您订阅的所有频道

这是最简单的方法,只需将channelId替换为您自己的channelId即可

https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&channelId=YOUR_CHANNEL_ID&key={YOUR_API_KEY}
我还尝试了这个请求,并在我已经订阅的频道中使用它,但没有收到错误
subscriptionDuplicate
。我不知道为什么API没有返回这个错误

因此,要回答有关如何检查经过身份验证的用户是否已订阅
频道id
,请使用了解您订阅的所有频道

这是最简单的方法,只需将channelId替换为您自己的channelId即可

https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&channelId=YOUR_CHANNEL_ID&key={YOUR_API_KEY}

@KENDdi谢谢,是的,我知道(我今天刚刚编辑了我的问题,加入了检查订阅的功能),但这会增加配额使用率。可能这是订阅()的API错误。insert()…我稍后会做一些测试,如果我发现任何关于它的线索,我会通知你。你是提交此问题的人吗?“我已经投票了此问题。@KENDdi谢谢,是的,我知道(我今天刚刚编辑了我的问题,包括检查订阅的函数),但这将增加配额使用。可能这是订阅()的API错误。插入()…我稍后会做一些测试,如果我发现任何线索,我会通知你。你是提交此问题的人吗?我已经投票了。