Contentfulで管理しているブログ記事を一括更新する
Contentfulで管理している記事(content)を一括で更新したい場合、「Content Management API」を使うと手軽に更新ができる。
js SDKが提供されているのでこれを利用する。
yarn add contentful-management
Spaceの管理画面の「Content management tokens」でアクセストークンを発行し、↓のjsを実行すれば最大1000記事の文字列置換が一括で行える。
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];
const content = entry.fields.content["ja-JP"]
const updatedContent = content
.replace(/Some/g, "some"); // TODO: 変換したい文字列を指定
if (content !== updatedContent) {
entry.fields.content = { "ja-JP": updatedContent };
const updatedEntry = await entry.update();
console.log(`updated: ${updatedEntry.sys.id}`);
await sleep(200);
} else {
console.log(`skipped: ${entry.sys.id}`);
}
}
})();
秒間7requestのAPI制限があるので、1記事更新ごとに200msec sleepするようにしている。
By default the Contentful Management API enforces rate limits of 7 requests per second. Higher rate limits may apply depending on your current plan.