【问题标题】:Instagram realtime get post from callbackInstagram 实时从回调中获取帖子
【发布时间】:2014-01-30 14:27:55
【问题描述】:

是的,这真的让我很紧张,但 Instagram 必须对他们的血腥文档做点什么。

我已经尝试了一周时间在不刷新页面的情况下使用新的 Instagram 帖子实时更新我的​​网站。 Twitter 相当简单,但 instagram 只是一团糟。基本上我使用实时 Instagram API,回调和所有这些东西都工作正常,但是感谢 Instagram,它不会从新帖子中返回我的 ID,回调只返回一些基本的东西:

[{"changed_aspect": "media", "object": "tag", "object_id": "nofilter", "time": 1391091743, "subscription_id": xxxxx, "data": {}}]

有了这些数据,除了标签,你什么都不是,但我也知道这个回调之前的标签,所以没关系。它实际上只告诉我有一个新帖子。我尝试在页面加载时执行与此回调发生时相同的请求,并获取比页面上已有的帖子更新的帖子。不幸的是,我还没有成功。我从上次发布的 instagram 帖子中选择了 ID,并检查了它是否在回调请求中,它不是。

我做错了什么?

非常感谢您的帮助,谢谢!

编辑:

我想指出,这不仅是实时 API 的问题,而且是普通 API 的问题。我只是不知道如何比较数据,所以我的数据库(普通 api)或我的网站(实时)中没有重复。我找不到任何向我解释如何比较数据的教程或文档(是的,我可能是盲人)。我只能找到 min_id 和 max_id,但没有解释这些 id 包含什么。我用结果中的 id 检查了这些 id,但它们不匹配。这不是媒体项目的 ID。

我还检查了 next_url,在我的逻辑思维中,这应该是指向下一页的 URL(如 Twitter)。

我看错了吗?

【问题讨论】:

  • 您是如何从帖子中获取数据的?我遇到了麻烦,即使我使用的是 file_get_contents('php://input');
  • @CoolHandLukeUK 有什么错误吗?
  • 不。然后我对其进行 JSON 解码并 print_r 结果(只是为了查看它)我得到它的 1 输出到屏幕。见:stackoverflow.com/questions/29783318/…

标签: api callback instagram


【解决方案1】:

好吧,用我的旧答案,我改变了我这样做的方式。下面是我现在的做法。

我的实时订阅仍然等待 10 次点击,当我达到 10 次时,我会发送一个新线程(如果尚未运行)。

同步线程向我的数据库查询一个值,我需要我使用的最后一个 min_tag_id。然后我查询:

https://api.instagram.com/v1/tags/*/media/recent?access_token=*&min_tag_id=*

在这里试试:https://api.instagram.com/v1/tags/montreal/media/recent?access_token=*

您将获得 20 个结果和一个 min_tag_id 值。将其附加到您的网址,您会看到没有结果。等待几秒钟并刷新。最终你会得到一些媒体,以及一个新的 min_tag_id。

(你可以忽略他们给你的“next_url”值,你不会使用它)。

基本上你只需要存储那个 min_tag_id 并查询,直到你没有更多的结果,这意味着你已经完成了。

【讨论】:

  • 您确定应该使用 min_tag_id 而不是 max_tag_id?
【解决方案2】:

当您收到订阅推送时,您需要查询该端点(标签/最近)。

我通常会启动一个同步线程来执行此操作,因此我可以在 2 秒内回复 Instagram。

然后您解析该端点并查找“下一个 url”值。

继续查询该端点,解析媒体并转到下一个 url,直到找到停止条件。

对我来说,我尝试匹配数据库中的 10 条连续记录。基本上从标签中,我在满足我的业务规则时存储媒体。

【讨论】:

  • 了解您的端点,但我仍然没有得到停止查询所需的条件。假设我每晚都做一个 cronjob,我今晚拉了我的第一个项目,最后一页没有填满(那个页面上只有 2 个项目)。它们被放入我的数据库中。明天晚上,我再次使用您在上面看到的端点提取数据。我怎么知道什么时候停止? 'next_url' 不是我的下一页的 url,而不是我的下一个项目吗?我不应该根据每个帖子中的唯一“ID”找到我的停止条件吗? (我试过 ID,但不起作用)。
【解决方案3】:

Instagram 文档准确无误,实际上写得很好。

实时 API 工作正常。如文档中所述:

更改的数据不包含在有效负载中,因此由您决定 您希望如何获取新数据。例如,您可以只决定 为特定用户获取新数据,或经过一定数量的 照片已发布。

http://instagram.com/developer/realtime/

您只会收到订阅对象发生更新的通知。由您决定调用 API 以找出该数据是什么。

您可以使用之前存储在自己的服务器或数据库中的访问令牌调用/tags/[tag-name]/media/recent。然后,您应该能够将从该端点返回的数据与您之前检索到的任何数据进行比较,并且只需提取您还没有的对象。

【讨论】:

  • 我已经按照您在此处所说的进行了操作,但是它不起作用,我正在将我的数据与从实时回调中获得的数据进行匹配,但没有任何匹配项。不可能有 25 个(或一页上有多少个)新帖子,因为它不是一个非常活跃的主题标签。如果 ID 永远不匹配,我该如何比较?
  • 来自实时 API 和媒体端点的数据应该匹配。当您调用媒体端点时,由您决定哪些数据是“新的”。这完全取决于您是在每次收到更新通知时调用端点,还是按预定时间间隔(即每 10 分钟)调用端点。通过与系统中已经记录的内容进行比较,您应该能够在每次调用媒体端点时确定您已经捕获了哪些对象。
  • 您能否详细说明我如何与您系统中已记录的内容进行比较?
猜你喜欢
  • 2019-11-30
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多