YouTube python API v3 HttpError 400 subscriptionDuplicate



我正在使用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描述的频道,则该函数应该为subscriptionDuplicate提出e.resp.status = 400HttpError

尽管如此,如果我尝试订阅用户已经订阅的频道,该函数通常会返回一个subscription_idchannel_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了解您订阅的所有频道。

下面是示例请求,只需将 channelId 替换为您自己的 channelId。

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

相关内容

  • 没有找到相关文章

最新更新