70

问题

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

我试过的

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

彻底阅读了Instagram API 文档,在Instagram API Console中测试了各种端点,并阅读了 Instagram 标签中的各种 StackOverflow 问题和Instagram API Google Group关于几个 Instagram 主题的问题,我想知道是否有可能没有记录的东西我可以试试。

用户最近媒体端点文档包括参数max_id和,这些参数允许通过检索在或max_timestamp之前出现的媒体来翻阅任何给定用户的最新媒体。由于每个评论都带有和属性,我尝试为各种评论 ID 和时间戳添加参数和(单独和一起),以尝试对评论进行分页。我的尝试都没有奏效。max_idmax_timestampcreated_timeidmax_idmax_timestamp

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

具体例子

使用Instagram API 控制台,我采取了以下步骤来尝试获取这张照片的所有评论。

  1. 验证了自己的OAuth2令牌
  2. 运行用户搜索查询coltonlhaynes以获取用户id: 9610843
  3. Ran a user recent media query for user id:9610843获取最近的媒体
  4. 收集了有关最新媒体的信息(上面链接的照片)
    • 媒体id: 698057751201132903_9610843
    • 评论count: 1375
  5. 对媒体 ID 进行媒体评论查询:698057751201132903_9610843获取最新评论
  6. 收集有关最近最少评论的信息
    • created time: 1397460230
    • 评论id: 698269477955776593
  7. 为媒体 ID 运行媒体评论查询:698057751201132903_9610843使用以下附加查询参数字符串尝试浏览评论,但收到与步骤 #6 相同的结果
    • ?max_timestamp=1397460230
    • ?max_id=698269477955776593
    • ?max_timestamp=1397460230&max_id=698269477955776593
    • ?max_id=698269477955776593&max_timestamp=1397460230

请注意

据我所知,这个问题没有解决方案,但由于 Instagram 开发团队表示他们将不再监控 Google Group,而是监控 StackOverflow,所以我把它放在这里。

4

4 回答 4

11

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

首先,您需要一个名为 “Charles Web Debuging Proxy”的工具

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

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

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

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

于 2015-01-25T15:05:59.667 回答
2

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

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

哪个国家在全球范围内的下一个限制:

全球速率限制

全局速率限制适用于包括应用程序在1 小时滑动窗口内每个访问令牌进行的所有 API 调用,而与特定端点无关。速率限制也适用于无效或格式错误的请求。

  • 沙盒速率限制:500/小时
  • 实时速率限制:5000/小时

加上评论端点的单独限制:

端点特定的速率限制

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

  • 沙盒 /media/media-id/评论:30 / 小时
  • 直播 /media/media-id/评论:60/小时

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

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

于 2016-04-12T13:44:56.653 回答
0

这根本不是“hacky”。

由于 Instagram 提供了您可以在此处收到所有评论的链接: 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 遍历该功能,您将收到所有评论。

当我发现这种方式时,这并不难。

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

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

它都为您返回图片评论的数组。

于 2015-10-06T08:31:46.820 回答
0

根据@Farside 所说,我不相信可以通过书籍来做到这一点。但是,您可以通过使用 Selenium 并在 Python 中抓取所有注释来做到这一点。您可以使用InstaPy 库。他们有快速入门模板,使其变得非常容易。

于 2021-02-19T00:37:16.543 回答