Taito
1
Graph QL もしくは REST APIで、特定のcollectionの商品を全て取得したいです。
調べていたのですが、Graph QLでは、下記のように1つのコレクションに対して、商品個数を決めて商品情報を取得しているかと思います。
全ての商品IDを取得したい場合はどのような方法で取得すれば良いですか?
よろしくお願いいたします。
collection(id: "${collectionId}") {
products(first: 250) {
edges {
node {
id
}
}
}
}
補足
▼達成したいこと
カートに入っている商品が特定コレクションに入っていたら、という条件を設けたいです
→liquidではなく、カスタム・公開アプリの前提でお願いいたします。
Qcoltd
2
@Taito 様
下記の投稿を拝見する限りでは、2023年4月13日の時点では、1度のクエリで全ての商品を取得する方法はなかったようです。
https://community.shopify.com/topic/2018636
そして、おそらく今もないので、
下記のヘルプのようにpageinfoを利用して、
クエリを何度か叩く必要がありそうです。
https://shopify.dev/docs/api/usage/pagination-graphql#forward-pagination
また、
即時性はないと思うのですが、BulkOperationを利用するという方法もあるかもしれません。
https://shopify.dev/docs/api/usage/bulk-operations/queries
上記、ご存知の上でのご質問でしたら、本回答はスルーしてください。
ご参考まで。
(キュー田辺)
Taito
3
@Qcoltd 様
お世話になっております。
ご返信ありがとうございます。
やはりそうですよね。。
ただ、下記記事を参考にコレクション内の商品を取得してみたのですが、いかがでしょうか。
https://community.shopify.com/post/2187861
const { admin, session } = await shopify.unauthenticated.admin(storeUrl);
const collectionProducts = await admin.rest.resources.Collection.products({ session, id: collectionId });
let productIds = [];
if (collectionProducts) {
productIds = collectionProducts.products.map(product => product.id);
}
今の所取得できているので、問題ないかと考えているのですが、何か問題点等ありそうでしょうか。
Qcoltd
4
@Taito 様
そちらの方法ですと、250件を超えて商品情報を取得できるということでしょうか?
最初の投稿に、first:250を指定されていたのでご存知だと思いますが、
https://www.shopify.com/jp/blog/partner-graphql-rate-limits
RESTの場合、レスポンスで返ってくるのは250アイテムまでです。
とありますので、
コレクションに所属する商品の数が250以内なのであれば、
全て取得できるかと思います。
もし、250件を超えて取得できている場合は、
ドキュメントと食い違っているということになりますので、
念のため、Shopifyに問題ないか確認をとった方がいいかもしれませんね。
回答をくれる可能性は低いですがShopifyサポートにお問い合わせいただくか、
https://github.com/Shopify
に記載のある engineering@shopify.engineering にお問い合わせいただくか、
でしょうか。
大した情報がなく恐縮です。
(キュー田辺)
Taito
5
@Qcoltd 様
失念しておりました。
ありがとうございます。
このあと250商品以上をテストする予定でございますので、また分かりましたらこちらに記載させていただきます。
詳細の情報までありがとうございます。
Taito
6
@Qcoltd 様
お世話になっております。
ご返信お待たせいたしました。
250商品以上試したところやはり不可能でした。
Graph QLを使用して、取得しようと思います。
その際、現在うまく行っていないので、またご質問させていただくかと存じます。
よろしくお願いいたします。