YouTube python API v3 HttpError 400 subscriptionDuplicate

时间:2017-01-23 14:21:49

标签: 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=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_idchannel_title

不应该提出HttpError 400

而且,如果我没有犯错并且这正是函数应该工作的方式,我该怎么做才能检查经过身份验证的用户是否已经仅使用{{1}订阅了channel_id }?

之前我可以致电subscriptions().insert(),检查用户是否已订阅:

subscriptions().list()

但这会增加配额使用量......

1 个答案:

答案 0 :(得分:0)

我还尝试了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}