我正在尝试使用Real-time Photo Updates API来获取带有特定标记的所有图片。由于此API的更新实际上只告诉您 新内容存在(但不是它是什么,每当我收到有关更改内容的通知时,我都会使用我的标签来查询最近的媒体。
我遇到的问题是我经常收到该查询返回的重复媒体。文档说这个API会分页,但我根本无法使用它。
文档here表示要在查询字符串中使用min_id
和max_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_id
和min_id
已被弃用,但由于分页对象中有属性,因此我不知道查询参数是对象属性是不推荐使用的..
我认为这意味着属性,因为查询字符串从未使用next_max_id
的参数,但是弃用消息说使用min_tag_id
和max_tag_id
并且没有{分页对象上的{1}}属性(只是max_tag_id
)。
无论所有这些冲突的文档如何,我在查询字符串中传递的内容似乎并不重要 - 我继续在后续查询中获得重复媒体。有人可以帮我理解这个API吗?我真正想要的是获得自我上次查询以来新标记的媒体。
答案 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”表示“更老”的方式。