背景
- Shopify の 公式 Ruby 用 API クライアント「shopify-api-ruby」を使って Shopify 各リソースのデータを全件取得したい。
-
ShopifyAPI::ResourceName::all
を実行しても一部データしか取得できなかった。
# 例) 商品データを全件取得したい
products = ShopifyAPI::Product.all
products.size
=> 50
原因
どうやら、all
メソッドで取得できるのは最初の50件までみたいです。(おそらく裏側で limit 句みたいなものが働いている?)
対策
fetch_next_page
メソッドを使う事で次の50件が取得できました。
products.fetch_next_page
また、次のデータが存在するかどうかは next_page?
メソッドで確認できます。
products.next_page?
=> true
したがって、全てのデータを取得したい場合、次のようなコードでいけるはず。
product_aray = []
products = ShopifyAPI::Product.all
product_array.concat(products)
while products.next_page?
products = products.fetch_next_page
product_array.concat(products)
sleep 1
end
product_aray.size
=> 2500
まとめ
以上、shopify-api-ruby の ShopifyAPI::ResourceName.all メソッドでデータを全件取得する方法でした。