我正在尝试列出我管理的频道的所有订阅者。
对于API来说,这似乎是一个非常简单的用例。我正在使用python来通过参数击youtube/v3/subscriptions
端点:
part=snippet
mySubscribers=true
pageToken
(用于分页)这非常适合多次页面迭代。
在此过程中的某个时刻,页面调用之一将返回404 SubscriberNotFound
。目前,我最好的 guess 是,如果我频道的订阅者的订阅设置为私有,则返回404。这是该错误的完整JSON响应:
{
"error": {
"errors": [
{
"domain": "youtube.subscription",
"reason": "subscriberNotFound",
"message": "The subscriber identified with the request cannot be found.",
"locationType": "parameter",
"location": "channelId"
}
],
"code": 404,
"message": "The subscriber identified with the request cannot be found."
}
}
我可以跳过那些特定的用户,但这似乎是不可能的,因为我需要下一个pageToken
来跳过该页面。请注意,上面的响应如何仅描述错误,即否pageToken
。
因此,我无法继续提取后续页面并生成列表。
为了确保我的代码没有问题,我在API资源管理器中在线匹配了失败调用的参数(包括pageToken
),并收到了相同的响应,并且缺少后续的pageToken。
似乎整个页面的搜索结果都会失败,尽管其中只有一个用户具有私人订阅(或导致404错误的原因),但其中的所有用户都将失败。因此,即使API仍返回了下一个pageToken
,允许我跳过该页面,我也将跳过具有可用数据的用户。
例如,如果我的maxResults
设置为50,而只有1个用户导致整个页面的数据价值变成404,那么我将缺少49个本应从该页面抓取的订户。
但是,在这种情况下,一种解决方法是将maxResults
设置为1。这也不尽人意(但是,再次,不能立即跳过页面)。
是否有一种方法可以从本质上“过滤”我的频道的订阅者,这些订阅者的订阅设置为private(或导致404的原因)?我似乎在文档中找不到任何内容。如果有办法做到这一点,它将完全避免这两个问题(完全失败或不必要地跳过“良好”数据)。
如果没有针对此特定问题的解决方法,是否可以通过其他方法生成我所有订阅者的列表?
非常感谢您的帮助!!我感到被击败了哈哈。
在尝试1000多种方法来解决此问题的过程中,我还尝试通过查看以64为底的间隔来猜测pageToken
的进度。它们似乎是区分大小写的字母数字字符串,会迭代线性地,所以我试图确定该步长并将其添加到先前的pageToken
(以64为基数的整数)中。这看起来很有希望,但是超级阴暗,我最终遇到了问题。无论如何,似乎并不需要这样的解决方案。哈哈。