Contentfulで管理しているブログ記事を一括公開する

公開日時
更新日時

先日の記事でContentfulで管理しているブログ記事を一括更新するようにした。

ただ、公開済みの記事の場合は、更新した後にPublishを実行しないと記事が反映されないため、記事の一括公開スクリプトを作ることにした。

一括更新時に合わせて公開処理を行う手もあるが、一括置換以外にも細かい調整を加えたかったため、更新と公開でスクリプトを分けることにした。

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

const sleep = (msec) => new Promise((resolve) => setTimeout(resolve, msec));

(async () => {
  const client = contentful.createClient({
    accessToken: process.env.ACCESS_TOKEN,
  });

  const space = await client.getSpace(process.env.SPACE_ID);
  const master = await space.getEnvironment("master");

  const entries = await master.getEntries({
    content_type: "post",
    limit: 1000,
  });

  const length = entries.items.length;
  for (let i = 0; i < length; i++) {
    const entry = entries.items[i];
    if (entry.isUpdated()) {
      await entry.publish();
      console.log(`published: ${entry.sys.id}`);
      await sleep(200);
    } else {
      console.log(`skipped: ${entry.sys.id}`);
    }
  }
})();

公開済みの記事に更新があるかは entry.isUpdated() で取得できるので更新があった場合のみ publish() を行うようにした。

参考


Related #contentful

GridsomeとContentfulとCircleCIを組み合わせて予約投稿ができるようにする

CircleCIのSchedule Jobsを使って定期ビルドするようにした

Contentfulに予約投稿機能が追加された

独自の予約投稿機能を作る必要がなくなって便利になった

Contentfulの料金プラン改定

嬉しいアップデート

ContentfulのContent modelにvalidationを設定する

slugに正規表現のvalidationを設定した

Contentful GraphQL APIで最終更新日時を取得する

sys.publishedAtで最終更新日時が取得できる

Contentfulの記事をAlgoliaのインデックスに登録する

Contetful Webhookの変換Helperが便利