REST API で Product 情報の全部を取得できない

解決済
WEBUILD
Shopify Partner
31 9 25

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アイテムしか取得できませんでした。

なにか他に全商品を取得する方法はありますでしょうか。それとも間違いを犯してしまっているのでしょうか。

 

 

0 件の「いいね!」
WEBUILD
Shopify Partner
31 9 25

成功

自己解決しました。
やはりどうやら Since_id というのは そのidから先の商品って感じでもなさそうです。
なぜこんな仕様なのか、なにに使うのかイメージがわきませんんが。。。

すべての商品情報が欲しい場合は

エンドポイント admin/api/2020-01/products.json

にアクセスした際にレスポンスヘッダーに返される値に含まれる

Link情報を使用します。
内部的にページネーション用のオブジェクトが作られている?らしく

このリンクには現在表示されているページの前後のページ用のURLが記載されています。

 

公式リファレンスはこちら 

 

注意すべき点は、僕もハマったのですがphpなどで受け取ったレスポンスヘッダーを

文字列で出力してみても、このLinkに含まれるURL文字列は見た目には表示されません。

これでURL取得できないやん!!っとなりますが、ソースコードで見るとたしかに入ってますので安心してください。

 

なので情報としては取得できているので、あとは不要な部分をカットしてURLのみにして

イテレーションしてあげれば全商品の取得が可能になります。

なにかのお役に立てれば幸いです。