Instagram的GET / tags / <tag> / media / recent Pagination究竟如何工作?</tag>

时间:2013-12-17 03:08:09

标签: instagram

我正在尝试使用Real-time Photo Updates API来获取带有特定标记的所有图片。由于此API的更新实际上只告诉您 新内容存在(但不是它是什么,每当我收到有关更改内容的通知时,我都会使用我的标签来查询最近的媒体。

我遇到的问题是我经常收到该查询返回的重复媒体。文档说这个API会分页,但我根本无法使用它。

文档here表示要在查询字符串中使用min_idmax_id来控制分页,但它说:

  • MIN_ID - 在此min_id之前返回媒体。

  • MAX_ID - 在此max_id之后返回媒体。

这似乎是向后的(通常min应该返回高于最小值的项目,max应该返回低于最大值的项目,这样当你指定两者时你得到一个有界范围)。

我从查询中获取的实际JSON包括一个这样的分页对象:

"pagination":  {
    "next_max_tag_id": "1387272337517",
    "deprecation_warning": "next_max_id and min_id are deprecated for this endpoint; use min_tag_id and max_tag_id instead",
    "next_max_id": "1387272337517",
    "next_min_id": "1387272345517",
    "min_tag_id": "1387272345517",
    "next_url": "https://api.instagram.com/v1/tags/cats/media/recent?access_token=xxx&max_tag_id=1387272337517"
}

next_url属性中指定的参数为max_tag_id,而不是文档中所说的max_id

还有一个弃用警告,指出next_max_idmin_id已被弃用,但由于分页对象中有属性,因此我不知道查询参数是对象属性是不推荐使用的..

我认为这意味着属性,因为查询字符串从未使用next_max_id的参数,但是弃用消息说使用min_tag_idmax_tag_id并且没有{分页对象上的{1}}属性(只是max_tag_id)。

无论所有这些冲突的文档如何,我在查询字符串中传递的内容似乎并不重要 - 我继续在后续查询中获得重复媒体。有人可以帮我理解这个API吗?我真正想要的是获得自我上次查询以来新标记的媒体。

2 个答案:

答案 0 :(得分:22)

要获取特定标签的最新克数,请使用:

https://api.instagram.com/v1/tags/latergram/media/recent?access_token=TOKEN

根据该回复,您可以从响应中获取min_tag_id(在分页下)从相同标记中获取更新的克数并构建一个类似的URL:

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

或者你可以使用原始响应中的next_url参数(也在分页下)获得下一个(较旧的)克数,如下所示:

https://api.instagram.com/v1/tags/latergram/media/recent?access_token=TOKEN&max_tag_id=1387332905573

确保您的后续查询(针对特定标记的新克)使用最新响应返回的min_tag_id。我做了一些测试,并没有看到重复,但我使用的是#latergram而且那个帖子数量很大

答案 1 :(得分:7)

@zachallia已经回答了现场,但我认为草图不会受伤:

Instagram API says MIN_TAG_ID Return media before this min_tag_id. MAX_TAG_ID Return media after this max_tag_id.

这是违反直觉的,有点坚果的味道。但是,仍然可以理解它。

/tags/MYTAG/media/recent端点将为您提供克数,按照新标记MYTAG的方式排序。当然,你不会得到所有克,只要达到Instagram设定的限制:

|yesteryear ------------------ <---- LIMIT ----> now|

如果你像min_tag_id一样使用/tags/MYTAG/media/recent?min_tag_id=X,那么你将获得X和之前的克(也就是更老):

|yesteryear ------- <---- LIMIT ---> min ------- now|

如果你像max_tag_id一样使用/tags/MYTAG/media/recent?max_tag_id=Y,你将获得Y和之后的克(又名更新):

|yesteryear ------- max <---- LIMIT ---> ------- now|

这就是“max”表示“更新”和“min”表示“更老”的方式。