Contentfulのコンテンツ(エントリー)を一括更新する

Contentfulのコンテンツ(Entry)を一括で更新したい機会がありコードを書いたのでサンプルコードを残します。

エントリを一括更新するにはContentful Management APIを使用します。
各言語向けにライブラリが用意されており、今回はJavaScript版のライブラリを使用しています。(Nodeとブラウザの両方に対応している様です)

エントリーを取得&更新するコードのサンプル

以下のコードは、エントリーをまとめて取得して、1つづつ更新していく処理のサンプルになります。
ページングの処理は入っていないので必要に応じて追加してください。

const contentful = require('contentful-management');

(async () => {
    const client = contentful.createClient({
        accessToken: '<CONTENTFUL_MANAGEMENT_TOKEN>'
    });

    const space = await client.getSpace('<SPACE_ID>');

    const environment = await space.getEnvironment('master');
    const entries = await environment.getEntries({
        content_type: 'your content type',
        limit: 1000,
    });

    const total = entries.total;
    for (let i = 0; i < total; i++) {
        const entry = entries.items[i];

        // 公開状態ではないEntryはスキップする
        if (!entry.isPublished()) {
            console.log('スキップ', {i, total, id: entry.sys.id});
            continue;
        }

        console.log('更新開始', {i, total, id: entry.sys.id});
        
        /*
         * ココにエントリーを変更する処理を書く
         */
        entry.fields.sampleText = 'aaaa'
        
        try {
            // 更新と公開を行う
            await (await entry.update()).publish();
        } catch (e) {
            console.error('更新失敗', {i, total, id: entry.sys.id});
            console.error(e);
        }
    }
})();

API制限について

リクエスト回数に制限があり1秒あたり7回が上限のようです。
今回はこの制限に引っかからないために1つづつ更新を行っています。

公式ドキュメント: https://www.contentful.com/developers/docs/references/content-management-api/#/introduction/api-rate-limits

以上です!

コメントする