contentful-managementでエントリーの一覧取得と新規作成をasyncでやってみる
contentful-managementのJavaScript用SDKを使ってみたので、忘れない内にメモします。
準備する
Contentfulのアカウントやスペースを作成します。作り方は、こちらの記事がわかりやすかったです。
【画像で説明】Contentfulの使い方。初期設定と各メニューについて学ぶ
Node.jsのプロジェクトに必要なパッケージをインストールします。
npm install dotenv
npm install contentful-management
package.json
と同じ階層に .env
ファイルを用意し、以下のように記述しておきます。
personal_access_token=パーソナルアクセストークン
space_id=対象のスペースID
environment_id=対象の環境ID。master等
パーソナルアクセストークンは、Delivery APIやPreview APIのAPI Keyとは別に、Contentful Management API専用のものを作成する必要があります。詳しい作り方は公式ページをご覧ください。
Personal Access Tokens
Contentfulからエントリー一覧を取得する
Contentfulでは、登録しているデータ1つ1つのことをエントリーと呼びます。(RDBでいうレコードに相当する単位)
エントリー一覧を取得するソースコードはこんな感じです。
// .envから環境変数として設定値を読み込む。
require('dotenv').config()
const env = process.env
// エラーが発生したときにCatchできるようにする。
process.on('unhandledRejection', console.dir);
// contentful-management用クライアントを作成する。
const contentful = require('contentful-management')
const client = contentful.createClient({
accessToken: env.personal_access_token
});
(async () => {
// スペースを取得する。
const space = await client.getSpace(env.space_id);
// 環境を取得する。
const environment = await space.getEnvironment(env.environment_id);
// エントリー一覧を取得する。
const entries = await environment.getEntries();
// エントリー一覧を表示する。
entries.items.forEach(item => console.log(item));
})();
Contentfulへエントリーを登録する
Contentfulでは、データを保管している領域のことをコンテンツモデルと呼びます。(RDBでいうテーブルに相当する単位)
そのコンテンツモデルに対し、エントリーを新規作成してみます。まず、ドラフト(下書き)で作成し、その後パブリッシュ(公開)します。
ソースコードはこんな感じです。
fields
の部分は、コンテンツモデルによって異なりますので、適宜読み替えてください。
もし、Contentfulの Settings > Locales
を ja
に変更していたら、 en-US
の部分は ja
に差し替えてください。
// .envから環境変数として設定値を読み込む。
require('dotenv').config()
const env = process.env
// エラーが発生したときにCatchできるようにする。
process.on('unhandledRejection', console.dir);
// contentful-management用クライアントを作成する。
const contentful = require('contentful-management')
const client = contentful.createClient({
accessToken: env.personal_access_token
});
(async () => {
// スペースを取得する。
const space = await client.getSpace(env.space_id);
// 環境を取得する。
const environment = await space.getEnvironment(env.environment_id);
// ドラフトでエントリーを作成する。
const draftEntry = await environment.createEntry('hoge_content_type', {
fields: {
id: {
'en-US': 'hoge_id'
},
name: {
'en-US': 'hoge_name'
}
}
});
// エントリーをパブリッシュする。
try {
const publishedEntry = await draftEntry.publish();
console.log(`${publishedEntry.sys.id} をパブリッシュしました。`);
} catch (err) {
console.error(err);
}
})();
'hoge_content_type'
はコンテンツモデルのIDです。こちらも適宜変更してください。
最後に
本記事作成にあたり、以下のページを参考にしました。わかりやすい情報ありがとうございました。