Instagram实时API发布速率

Instagram实时API发布速率,instagram,Instagram,我正在使用实时API中的标记订阅构建一个应用程序,我有一个与容量规划相关的问题。我们可能会有大量用户同时发布订阅的标签,所以问题是API实际发布到订阅处理端点的频率有多高?例如,如果100个用户在一两秒钟内发布到#testhashtag,我会收到100条帖子吗,还是API会将这些帖子作为一个更新批处理在一起?一个相关的问题:是否存在发送帖子的最大速率(例如,每秒一次或每十秒一次等)?Instagram API似乎缺少关于发送更新数量和速率限制的详细信息。从[API文档][1]中: 极限 好一点。

我正在使用实时API中的标记订阅构建一个应用程序,我有一个与容量规划相关的问题。我们可能会有大量用户同时发布订阅的标签,所以问题是API实际发布到订阅处理端点的频率有多高?例如,如果100个用户在一两秒钟内发布到#testhashtag,我会收到100条帖子吗,还是API会将这些帖子作为一个更新批处理在一起?一个相关的问题:是否存在发送帖子的最大速率(例如,每秒一次或每十秒一次等)?

Instagram API似乎缺少关于发送更新数量和速率限制的详细信息。从[API文档][1]中:

极限 好一点。如果您发送的请求太多太快,我们将返回一个503错误代码(服务器不可用)

每个访问令牌或客户端id的总请求数限制为每小时5000个请求。实际上,这意味着您应该(在可能的情况下)对用户进行身份验证,以便限制远远超出给定用户的能力范围

换句话说,您需要检查503并相应地限制您的应用程序。我不知道他们会阻止你多久,但最好完全避免。我建议您通过在自己的代码上放置一个速率限制机制来管理这一点,例如通过一个带有速率控制的队列来推送API请求。这还可以让您在遇到限制时重试,从而不会丢失任何更新

此外,由于API文档中的以下内容,实时更新情况下的队列等机制更具相关性:

您应该构建您的系统以接受每个负载的多个更新对象,尽管通常只包含一个更新对象。此外,您应该在2秒钟的超时时间内确认POST——如果您需要对接收到的信息进行更多处理,您可以在异步任务中这样做

关于更新的数量,API可以向您发送1个或多个更新。这样做的问题是,你完全可以扼杀你的API调用,因为我认为你不能批量调用特定的媒体项,至少在我看来,你不能使用官方的python或ruby客户端或API控制台

这意味着,如果您收到500个更新,要么作为一个服务器请求,要么分成多个,这都无关紧要,因为无论哪种方式,您都需要去获取这些项目。从我在实际应用程序中观察到的情况来看,这些似乎与我们的配额不符,但是配额本身似乎不稳定地消耗资源。也就是说,有时我们根本看不到电话被占用,而另一些时候,可用电话的减少量远远超过我们实际拨打的电话。我的建议是保守一点,把5000作为最好的猜测,而不是绝对的。您可以通过解析它们发回的其中一个头来检查其余的调用

使用常识,别傻了,使用速率限制机制应该可以保证您的安全,并且有利于处理由于停机(这种情况比您想象的要多)、网络中断和意外速率限制而导致的故障。您可以尝试在池机制中使用不同的API密钥,但这可能违反TOS,如果他们通过IP做任何事情,您必须将其拆分为具有不同IP的不同机器

我最后的建议是重组你的应用程序,不要完全依赖订阅机制。它不太可靠,而且在API方面非常昂贵。只有当你只需要在应用程序中做一些不需要回拨Instgram的事情,或者你的项目数量很少,或者你可以过滤掉大部分项目,以避免在符合特定业务规则时回拨Instagram accept,这才是真正有用的

相反,您可以执行诸如查询标签或用户(例如:最近的媒体)之类的操作,并以这种方式进行扩展。通常,这允许您通过一个请求获取100个项目,而不是100个请求获取100个项目。如果您真的想变得可爱,那么至少可以异步合并订阅通知,并在将重复特征(如标记)合并到单个bucket中时,将类似的通知合并到单个批处理请求中。有点像map/reduce,但是在一个小数据集上。当然,您可以不时对自己的数据进行实际的映射/缩减,作为保持异步的另一种方式。同样,要小心不要重击instagram,而只是使用map/reduce以一种对你的应用有用的方式批量处理你的通话


希望有帮助。

谢谢,这很有帮助。我的应用程序正在订阅标签,我们在订阅ping时需要的所有信息都是通过
/tags/tag name/media/recent
端点提供的,而不需要获取单个照片中的数据,所以听起来速率限制不应该是太大的障碍。在我的终端添加一些机制,最多每10秒只命中标记端点一次,而不管POST速率如何,都应该注意这一点。关于订阅不可靠的评论是很好的建议;添加标记端点的定期轮询应该可以解决这个问题。听起来不错。对于其他人来说,如果不清楚,另一个选择是合并OAuth并获得每个用户发出请求的权限。这意味着授权您的应用程序使用instagram的每个用户可以使用5000个请求。当然,这也意味着您正在调用API,为什么您仍然有一个有效的OAuth令牌。但是,如果您只是制作一个服务器应用程序,那么您只能使用自己的oauth令牌/客户端id。