web-dev-qa-db-fra.com

Comment fonctionne GET / tags / <tag> / media / Pagination récente d'Instagram?

J'essaie d'utiliser l'API Mises à jour des photos en temps réel pour obtenir toutes les photos avec une balise spécifique au fur et à mesure qu'elles apparaissent. Comme les mises à jour de cette API ne vous disent vraiment que un nouveau contenu existe (mais pas ce que c'est), je recherche des médias récents avec mon tag chaque fois Je reçois la notification que quelque chose a changé.

Le problème que j'ai est que je reçois constamment des médias en double retournés par cette requête. La documentation indique que cette API effectue la pagination, mais je ne peux pas la faire fonctionner du tout.

La documentation ici dit d'utiliser min_id et max_id dans votre chaîne de requête pour contrôler la pagination, mais il dit:

  • MIN_ID - Retourne le média avant ce min_id.

  • MAX_ID - Retourne le média après ce max_id.

Cela semble à l'envers (normalement, min devrait renvoyer des éléments au-dessus du minimum et max devrait renvoyer des éléments en dessous du maximum afin que lorsque vous spécifiez les deux, vous obtenez une plage limitée).

Le JSON réel que je récupère de mes requêtes comprend un objet de pagination comme celui-ci:

"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"
}

Le paramètre spécifié dans le next_url la propriété est max_tag_id, ne pas max_id comme le dit la documentation.

Un avertissement de dépréciation indique également que next_max_id et min_id sont obsolètes, mais comme il y a des propriétés dans l'objet de pagination avec des noms comme ça, je ne sais pas si les paramètres de la requête ou les propriétés de l'objet sont obsolètes ..

Je pense que cela signifie les propriétés, car la chaîne de requête n'a jamais utilisé un paramètre de next_max_id, mais le message de dépréciation dit d'utiliser min_tag_id et max_tag_id et il n'y a pas de max_tag_id propriété sur l'objet de pagination (juste un next_max_tag_id).

Indépendamment de toute cette documentation conflictuelle, peu importe ce que je passe dans ma chaîne de requête - je continue à obtenir des médias répétés dans les requêtes suivantes. Quelqu'un peut-il m'aider à comprendre cette API? Tout ce que je veux vraiment, c'est obtenir des médias balisés qui sont nouveaux depuis ma dernière requête.

23
Adam Platt

Pour obtenir le dernier ensemble de grammes pour une balise particulière, utilisez ceci:

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

À partir de cette réponse, vous pouvez obtenir des grammes plus récents à partir de la même balise en prenant le min_tag_id à partir de la réponse (sous pagination) et créez une URL comme ceci:

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

Ou vous pouvez obtenir le prochain ensemble de grammes (plus ancien) en utilisant le paramètre next_url de la réponse d'origine (également sous pagination), qui ressemble à:

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

Assurez-vous que vos requêtes suivantes (pour les nouveaux grammes d'une balise particulière) utilisent le min_tag_id renvoyé par la dernière réponse. J'ai fait quelques tests et je n'ai pas vu de doublons, mais j'utilisais #latergram et celui-ci a un volume élevé de messages

22
zachallia

@zachallia a répondu sur place, mais je pense que cela ne peut pas faire de mal avec un croquis:

Comme le dit l'API Instagram : MIN_TAG_ID Return media before this min_tag_id. MAX_TAG_ID Return media after this max_tag_id.

C'est contre-intuitif, avec une saveur légèrement noisette. Mais encore, il est possible de le comprendre.

Le /tags/MYTAG/media/recent endpoint vous donnera des grammes, classés selon la façon dont ils ont été marqués avec MYTAG. Vous n'obtiendrez pas tous les grammes, bien sûr, jusqu'à la limite fixée par Instagram:

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

Si tu utilises min_tag_id ainsi /tags/MYTAG/media/recent?min_tag_id=X vous obtiendrez des grammes de X et avant (aka plus ancien):

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

Si tu utilises max_tag_id ainsi /tags/MYTAG/media/recent?max_tag_id=Y vous obtiendrez des grammes de Y et après (aka plus récent):

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

C'est ainsi que "max" signifie "plus récent" et "min" signifie "plus ancien".

7
thomax