Graph QL もしくは REST APIで、特定のcollectionの商品を全て取得したい。

Graph QL もしくは REST APIで、特定のcollectionの商品を全て取得したいです。

調べていたのですが、Graph QLでは、下記のように1つのコレクションに対して、商品個数を決めて商品情報を取得しているかと思います。

全ての商品IDを取得したい場合はどのような方法で取得すれば良いですか?

よろしくお願いいたします。

collection(id: "${collectionId}") {
        products(first: 250) {
          edges {
            node {
              id
            }
          }
        }
      }

補足

▼達成したいこと

カートに入っている商品が特定コレクションに入っていたら、という条件を設けたいです

→liquidではなく、カスタム・公開アプリの前提でお願いいたします。

@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

上記、ご存知の上でのご質問でしたら、本回答はスルーしてください。

ご参考まで。

(キュー田辺)

@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);
  }

今の所取得できているので、問題ないかと考えているのですが、何か問題点等ありそうでしょうか。

@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 にお問い合わせいただくか、

でしょうか。

大した情報がなく恐縮です。

(キュー田辺)

@Qcoltd

失念しておりました。

ありがとうございます。

このあと250商品以上をテストする予定でございますので、また分かりましたらこちらに記載させていただきます。

詳細の情報までありがとうございます。

@Qcoltd

お世話になっております。

ご返信お待たせいたしました。

250商品以上試したところやはり不可能でした。

Graph QLを使用して、取得しようと思います。

その際、現在うまく行っていないので、またご質問させていただくかと存じます。

よろしくお願いいたします。