商品ごとの注文数を取得したい

AI-generated summary

Shopify Admin GraphQL APIで、商品ごとの「当日の注文数」を取得したいという相談。orders(first: 70, query: "created_at:>TODAY status:any") では当日の全注文を取り切れず、first を大きくするとクエリコスト制限でエラーになる点が課題になっていた。

提案された対応は次の2点。

  • ページネーション: hasNextPage とカーソルを使い、複数ページに分けて全件取得する方法。
  • Bulk API: 大量データ向けの仕組みで、一括処理後に結果をダウンロードするURLからデータを取得する方法。

投稿者は、現在の取得結果が一部であることを理解し、ページネーションで順次取得できそうだと認識した。Bulk APIについても、レスポンス本体ではなくダウンロードURL経由で必要データを得る方式として理解している。

結論として、解決策の方向性は示されており、ページネーションとBulk APIの両方を試す段階。最終的にどちらを採用したかまではまだ共有されておらず、議論は実装確認待ちの状態。

Public App内で、商品ごとの当日の注文数を取得したいと思い、GraphQL Admin APIを利用して開発を進めております。

下記のような内容のQueryでは、ある程度は取得できますが、当日の全ての注文を取得できているとは言えない(最初の70件の注文だけになってしまう)なと・・

{
  orders(first: 70, query: "created_at:>TODAY status:any") {
    edges {
      node {
        id
        createdAt
        lineItems(first: 5) {
          edges {
            node {
              id
              name
              title
              variantTitle
              variant {
                id
              }
            }
          }
        }
      }
    }
  }
}

そこで、

first: 70

の「70」を「1000」とかに増やしてみても、クエリコスト?の制限でエラーが発生してしまいます・・

何か良い方法があればご教示いただければ幸いです。

下記のページネーションを使うのはいかがでしょうか?

https://shopify.dev/concepts/graphql/pagination

また、大量データ用のBulk API もあります。

https://shopify.dev/docs/admin-api/graphql/reference/bulk-operations

@junichiokamura

ご回答ありがとうございます!

下記のページネーションを使うのはいかがでしょうか?> > https://shopify.dev/concepts/graphql/pagination

なるほど、こういったアプローチがあるんですね!

取得できたデータが全てではなく一部であった場合は、次ページが存在するので(hasNextPage が true)、

カーソルを変更して次ページ分のデータを取得し続けていければ、全てのデータを取得できそうですね。

また、大量データ用のBulk API もあります。> > https://shopify.dev/docs/admin-api/graphql/reference/bulk-operations

このアプローチでも取得できそうですね!

欲しいデータは、レスポンスには含まれていなくて、欲しいデータがダウンロードできるURLが含まれているんですかね。

そして、そのダウンロード用URLにアクセスし、欲しいデータを手に入れられる、というイメージですね。

どちらも試してみたいと思います、非常に助かりました!