search
LoginSignup
3

More than 1 year has passed since last update.

posted at

updated at

Organization

contentful-managementでエントリーの一覧取得と新規作成をasyncでやってみる

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 > Localesja に変更していたら、 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です。こちらも適宜変更してください。

最後に

本記事作成にあたり、以下のページを参考にしました。わかりやすい情報ありがとうございました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3