检索超过 150 条 Instagram 评论

Posted

技术标签:

【中文标题】检索超过 150 条 Instagram 评论【英文标题】:Retrieving more than 150 Instagram comments 【发布时间】:2014-05-28 23:07:35 【问题描述】:

问题

我希望能够查看任何给定的Instagram 媒体上的所有 cmets,即使该媒体有超过 150 个 cmets。到目前为止,似乎不可能在 Instagram 网站上查看超过最近 20 cmets 的媒体,如果使用Instagram API Console 或Instagram API Libraries,则返回最近的 150 cmets,没有分页或查看附加 cmets 的选项。

我所尝试的

当然,我首先在提供的控制台和我自己的环境中尝试了记录在案的media comment query。在这两种情况下,最多返回 150 厘米。被难住了,我开始在网上寻找更多信息。

彻底阅读了Instagram API Documentation,测试了Instagram API Console 中的各种端点,阅读了Instagram 标签中的各种*** 问题和几个Instagram 主题的Instagram API Google Group 问题,我想知道是否有机会无证,我可以试试。

user recent media endpoint 文档包括max_idmax_timestamp 的参数,这些参数允许通过检索前面提到的max_idmax_timestamp 之前的媒体来翻阅任何给定用户的最新媒体。由于每条评论都带有created_timeid 属性,因此我尝试为各种评论ID 和时间戳添加max_idmax_timestamp 的参数(单独和一起),以尝试通过cmets 进行分页。我的尝试都没有奏效。

除非有人有其他建议,否则我现在处于停滞状态。

具体例子

使用Instagram API Console,我采取了以下步骤来尝试获取this photo 的所有cmets。

    通过OAuth2 令牌验证自己 对coltonlhaynes 运行用户搜索查询以获取用户id: 9610843 对用户 ID 运行用户最近的媒体查询:9610843 以获取最新的媒体 收集了有关最新媒体的信息(上面链接的照片) 媒体id: 698057751201132903_9610843 评论count: 1375 对媒体 ID 运行媒体评论查询:698057751201132903_9610843 以获取最近的 cmets 已收集有关最近最少评论的信息 created time: 1397460230 评论id: 698269477955776593 使用以下附加查询参数字符串对媒体 ID 运行媒体评论查询:698057751201132903_9610843 以尝试通过 cmets 进行分页,但收到与步骤 #6 相同的结果 ?max_timestamp=1397460230 ?max_id=698269477955776593 ?max_timestamp=1397460230&max_id=698269477955776593 ?max_id=698269477955776593&max_timestamp=1397460230

请注意

据我所知,这个问题没有解决方案,但由于 Instagram 开发团队 has stated 表示他们将不再监控 Google 群组,而是监控 ***,因此我将其放在这里。

【问题讨论】:

他们的文档甚至说这个端点获得了“a full list of comments on a media object”,这非常令人沮丧。写得很好的帖子。希望你能找到答案。 值得一提的是,点赞端点似乎仅限于最近的 120 个点赞。 现在,端点描述说:“获取媒体对象上最近 cmets 的列表。” :) 如果分页至少为 500 cmets,那就太好了。这对于大多数用途来说已经足够了...... API 控制台未找到instagram.com/developer/api-console 这方面有什么更新吗? 【参考方案1】:

好的,这将是一个非常“Hacky”的解决方案,我目前还没有准备好自己做这件事(由于家里没有 ADSL),但我可以提供一个分步指南,说明我将如何处理这个问题。

首先你需要一个名为"Charles Web Debuging Proxy"的工具

网站上有一个关于如何在 charles 中启用“SSL 调试”的教程,(这将要求您在移动设备上安装新的“根证书”,以使其认为 https 交易由 charles 签名实际上是由 instagram.com 签名的)

现在将您的移动设备设置为通过上述代理路由所有请求(必须安装在您的本地 wi-fi 网络上。)

转到 https://www.google.com 并检查 charles 是否记录了请求和响应。

一旦所有这些设置正确,您就可以查看 instagram 应用程序本身用于生成所述评论页面的 API 调用。

【讨论】:

【参考方案2】:

这根本不是“hacky”。​​

由于 Instagram 提供了您可以在此处接收所有 cmets 的链接: https://instagram.com/developer/endpoints/comments/

您所要做的就是循环浏览 Instagram 为您提供的链接。我已经这样做了。我使用 Api 来做到这一点。

  public function getUserMediaComments($id, $limit = 0) 
    return $this->_makeCall('media/'.$id.'/comments', true, array('count' => $limit));
  

$id 是图片的 media_id。如果您使用图片 ID 遍历该函数,您将收到所有 cmets。

当我发现这种方式时并没有那么难。

您也可以在探查它的同时这样做。 :

$comments = json_decode(file_get_contents('https://api.instagram.com/v1/' . 'media/'. $image->id . '/comments?access_token='. $data->access_token));

它都会返回图片的 cmets 数组。

【讨论】:

没有。这远非解决方案。我不确定你在完成什么。您无法收到所有的 cmets。您需要向他们的 GraphQL 端点发送一个请求,以获取超过 150 个限制的额外 cmets。 count ?无法获得 151 - 300 件物品?【参考方案3】:

这里的通用答案是“不,这是不可能的通过常规端点”。

Instagram 已更新 Rate Limits2015 年 11 月 17 日之后)。 Instagram 平台上的所有速率限制均针对每个访问令牌单独控制,并在 1 小时滑动窗口内进行控制。实时应用比沙盒模式下的应用具有更高的速率限制。

在全局上下文中哪个状态下一个限制:

全球速率限制

应用全局速率限制,包括由 1 小时滑动窗口内每个访问令牌的应用程序,无论 特定端点。速率限制也适用于无效或格式错误 请求。

沙盒速率限制:500/小时 直播速率限制:5000/小时

加上对 cme​​ts 端点的单独限制:

端点特定的速率限制

用于发布(POST 或 DELETE)的端点具有针对每个端点应用的速率限制。 您的 OAuth 客户端对这些端点进行的任何调用也是 计入上述全球速率限制。

沙盒 /media/media-id/cmets:30 个/小时 直播 /media/media-id/cmets:60/小时

如果您的应用超过了这些速率限制中的任何一个,您将收到带有429 (Too Many Requests) 的 HTTP 响应代码的响应。

只要 Instagram 平台根据 access token 对其进行控制,您就可以使用具有多个访问令牌的多线程实现更大的限制。但它有一些警告:1. 并非所有内容都可以与多个访问令牌并行,因为上下文会有所不同。 2.可能与Platform Policy和TOS相矛盾

【讨论】:

【参考方案4】:

按照@Farside 所说,我不相信可以通过书籍做到这一点。但是,您可以通过使用 Selenium 并在 Python 中抓取所有 cmets 来做到这一点。您可以使用the InstaPy libary。他们有快速入门模板,让这一切变得非常简单。

【讨论】:

以上是关于检索超过 150 条 Instagram 评论的主要内容,如果未能解决你的问题,请参考以下文章

华为手机怎么注册instagram

在 uitableview 底部创建一个文本字段并发送按钮,例如 Instagram 评论部分

instagram国内怎么注册不了安卓

不能在公共 Instagram 帐户上抓取超过 12 个帖子

如何以全尺寸查看 instagram 个人资料图片? [关闭]

从 Google Places API 获得超过 5 条评论