shopify

ShopifyのGraphQL Storefront APIでJavaScriptでブログの記事を取得する方法

shopify logo

あまり深くは追えていませんが、ShopifyのGraphQL Storefront APIを使いJavaScriptでブログの値を取得した時のメモです。

GraphQL Storefront APIを使えば、topページなどでも簡単にブログ記事を表示できるのではないかと考えfor文50記事推奨問題や無駄なloopなどの解消になるかなと思い調べていた時のものです。ブログ関連の情報は少ないので誰かの役に立つかもしれないの残そうと思います。

GraphQL Storefront APIとは

簡単に言えば、Shopifyの商品や顧客データを Storefront API を使って取得できます。
そのためアプリやshopify環境ではないWebサイトなどにもShopifyのデータを受け渡すことが可能になります。

詳しくはShopifyのサイトをご確認ください。

https://shopify.dev/docs/api/storefront

Storefront APIのアクセストークンを取得

わかりやすく説明されている方がいたのでそちらを参考にStorefront APIのアクセストークンを取得していただければと思います。

参考サイト:ShopifyのStorefront API(ストアフロントAPI)を使って、自由自在にストア情報を表示しよう!|オカログ

ブログ記事をJSで取得するサンプルコード

shop名とアクセストークンを任意のものに書き換えると動きます。(blogに記事がないと何も表示されないと思いますが。)

const query = `{
  
    articles(first: 2) {
      edges {
        node {
        handle
        id
        image{
        url
        }
        blog{
        authors{
        firstName
        }
        handle
        id
        }
        }
      }
    }
  }`;



function apiCall(query) {
	return fetch("https://[shop-name].myshopify.com/api/2023-01/graphql.json", {
		//[shop-name]にはストアのURLを入力します。
		method: "POST",
		headers: {
			"Content-Type": "application/graphql",
			"X-Shopify-Storefront-Access-Token": "", //Storefront APIのアクセストークンを入力します
		},
		body: query,
	}).then((response) => response.json());
}

apiCall(query).then((response) => {
	console.log(response);
});

3行目あたりのarticles(first: 2)で最初の2件と指定して取得しています。lastやbeforeもあるらしいのですが、いまいち書き方わからず。

絞り込む場合

タグを絞り込む場合は条件を追加します。3行目あたりのarticlesの箇所に追加していきます。

const query = `{
  
    articles(first: 4, query:"tag:タグ名") {
      edges {
        node {
        handle
        id
        blog{
        authors{
        firstName
        }
        handle
        id
        }
        }
      }
    }
  }`;



function apiCall(query) {
	return fetch("https://[shop-name].myshopify.com/api/2023-01/graphql.json", {
		method: "POST",
		headers: {
			"Content-Type": "application/graphql",
			"X-Shopify-Storefront-Access-Token": "Storefront APIのアクセストークン",
		},
		body: query,
	}).then((response) => response.json());
}

apiCall(query).then((response) => {
	console.log(response);
});

query:”Categories:News”などにすればカテゴリを指定して取得することも可能です。

表示結果の例

APIなのでconsole画面を開いてJSを貼り付けるだけで取得できることが確認できます。

GraphQL Storefront API 取得画像

おわり

きっともっといろいろなことができるんだと思うのですが、なかなかdevサイトみても解読難しく、目的を果たして満足してしまいました。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です