web-dev-qa-db-ja.com

InstagramのGET / tags / <tag> / media / recent Paginationは実際どのように機能しますか?

私は Real-time Photo Updates APIを使用して、特定のタグが付けられたすべての写真を取得しようとしています。このAPIからの更新は、実際にはthat新しいコンテンツが存在します(ただし、whatは存在しません)、いつでもタグで最近のメディアを照会しています何かが変更されたという通知を受け取ります。

私が抱えている問題は、そのクエリによって常に重複したメディアが返されることです。ドキュメントには、この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_idmin_idが非推奨であることを示す非推奨の警告もありますが、そのような名前のページネーションオブジェクトにはプロパティがあるため、クエリパラメータとオブジェクトプロパティのどちらが非推奨であるかがわかりません。

クエリ文字列がnext_max_idのパラメーターを使用したことがないため、これはプロパティを意味すると思いますが、非推奨メッセージでは、min_tag_idmax_tag_idを使用するように指示され、ページネーションオブジェクトにmax_tag_idプロパティがありません(next_max_tag_idのみ)。

この矛盾するドキュメントのすべてに関係なく、クエリ文字列で何を渡しても問題はないようです。後続のクエリで繰り返しメディアを取得し続けます。誰かがこのAPIを理解するのを手伝ってくれる?私が本当に望んでいるのは、最後のクエリ以降に新しいタグ付きメディアを取得することだけです。

23
Adam Platt

特定のタグの最新のグラムのセットを取得するには、これを使用します。

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を使用しており、その投稿には大量の投稿があります

22
zachallia

@zachalliaはスポットに答えましたが、スケッチで傷つけないと思います:

Instagram APIによると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|

このようにして、「最大」は「新しい」を意味し、「最小」は「古い」を意味します。

7
thomax