Подтвердить что ты не робот

Как работает Instagram GET/tags/<tag>/media/недавняя разбивка на страницы?

Я пытаюсь использовать API обновлений в реальном времени, чтобы получить все изображения с определенным тегом по мере их поступления. Поскольку обновления из этого API действительно только скажу вам, что существует новый контент (но не то, что он есть), я запрашиваю последние медиа с моим тегом всякий раз, когда получаю уведомление о том, что что-то изменилось.

Проблема, с которой я сталкиваюсь, заключается в том, что я постоянно получаю дублирующиеся носители, возвращаемые этим запросом. В документации говорится, что этот API выполняет разбиение на страницы, но я не могу заставить его работать вообще.

Документация здесь говорит использовать 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, и нет свойства max_tag_id в разбивке на страницы объект (только a next_max_tag_id).

Независимо от всей этой противоречивой документации, кажется, не имеет значения, что я передаю в строке запроса - я продолжаю получать повторяющиеся носители в последующих запросах. Может ли кто-нибудь помочь мне понять этот API? Все, что я действительно хочу, это получить тегированные носители, новые с момента моего последнего запроса.

4b9b3361

Ответ 1

Чтобы получить самый новый набор граммов для определенного тега, используйте это:

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, и у него был большой объем сообщений

Ответ 2

@zachallia ответила на это место, но я полагаю, что это не повредит эскизом:

Как API-интерфейс Instagram говорит: 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 и после (aka newer):

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

То, что "max" означает "более новые" и "мин", означает "старше".