REST API エンドポイント /admin/api/2020-01/products.json
にアクセスし、Product 情報を取得しようとしています。
一度のリクエストでの取得上限は250であるため、
最後の行のproduct idを取得し、2回目以降のリクエストに since_id を指定してループ処理しています。
これで全商品が取得できるかと思いきや
どうも一部欠落しているようです。
コードが悪いのかと思い、ブラウザでURLを直接入力してテストしてみてもやはりレスポンスの数が
Product の総数と一致しません。
REST API エンドポイント /admin/api/2020-01/products/count.json
でproductの総数をチェックしてみたところ、810アイテムでしたが
上記のsince_idで1ページずつチェックした結果、2ページ + 86アイテムで 586アイテムしか取得できませんでした。
なにか他に全商品を取得する方法はありますでしょうか。それとも間違いを犯してしまっているのでしょうか。
解決済! ベストソリューションを見る。
成功
自己解決しました。
やはりどうやら Since_id というのは そのidから先の商品って感じでもなさそうです。
なぜこんな仕様なのか、なにに使うのかイメージがわきませんんが。。。
すべての商品情報が欲しい場合は
エンドポイント admin/api/2020-01/products.json
にアクセスした際にレスポンスヘッダーに返される値に含まれる
Link情報を使用します。
内部的にページネーション用のオブジェクトが作られている?らしく
このリンクには現在表示されているページの前後のページ用のURLが記載されています。
注意すべき点は、僕もハマったのですがphpなどで受け取ったレスポンスヘッダーを
文字列で出力してみても、このLinkに含まれるURL文字列は見た目には表示されません。
これでURL取得できないやん!!っとなりますが、ソースコードで見るとたしかに入ってますので安心してください。
なので情報としては取得できているので、あとは不要な部分をカットしてURLのみにして
イテレーションしてあげれば全商品の取得が可能になります。
なにかのお役に立てれば幸いです。