检索超过 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_id
和max_timestamp
的参数,这些参数允许通过检索前面提到的max_id
或max_timestamp
之前的媒体来翻阅任何给定用户的最新媒体。由于每条评论都带有created_time
和id
属性,因此我尝试为各种评论ID 和时间戳添加max_id
和max_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 Limits(2015 年 11 月 17 日之后)。 Instagram 平台上的所有速率限制均针对每个访问令牌单独控制,并在 1 小时滑动窗口内进行控制。实时应用比沙盒模式下的应用具有更高的速率限制。
在全局上下文中哪个状态下一个限制:
全球速率限制
应用全局速率限制,包括由 1 小时滑动窗口内每个访问令牌的应用程序,无论 特定端点。速率限制也适用于无效或格式错误 请求。
沙盒速率限制:500/小时 直播速率限制:5000/小时
加上对 cmets 端点的单独限制:
端点特定的速率限制
用于发布(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 评论的主要内容,如果未能解决你的问题,请参考以下文章
在 uitableview 底部创建一个文本字段并发送按钮,例如 Instagram 评论部分
不能在公共 Instagram 帐户上抓取超过 12 个帖子