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つづつ更新を行っています。
以上です!
Webエンジニアをやっています
UX/UIデザインからプログラミング、DB設計、SEO、インフラ構築など幅広く対応してます
PHP/PHPUnit/Laravel/Vue/Nuxt/Docker/Terraform
ご連絡はTwitterのDMまで。