Nodeからソーシャルプラットフォームに公開するには通常、プラットフォームごとに1つのOAuthフロー、1つのメディアパイプライン、1つの公開モデルが必要で、そのそれぞれが常に変化し続けます。これは単一のクライアントでそれを実現します。
インストールと認証
npm install bulkpublish
import { BulkPublish } from 'bulkpublish';
const bp = new BulkPublish({ apiKey: process.env.BULKPUBLISH_API_KEY });
アカウントの開発者設定からキーを取得してください。ソースコードにではなく環境変数に保管しましょう。
下書きを作成する
いきなり公開するのではなく、ここから始めましょう。下書きはアプリ内で見えるため、何かがオーディエンスに届く前に、あなたのコードが何を生成したかを正確に確認できます。
const post = await bp.posts.create({
content: 'Check out our latest update!',
channels: [
{ channelId: 1, platform: 'facebook' },
{ channelId: 2, platform: 'x' },
{ channelId: 3, platform: 'linkedin' },
],
status: 'draft',
});
各チャンネルはchannelIdとplatformを持つオブジェクトです。あなたのものを見つけるには次のようにします。
const channels = await bp.channels.list();
使い捨てスクリプトのチャンネルIDを、長く使われるコードにハードコードしないでください。都度検索するか、デプロイなしで変更できる設定に保存しましょう。
予約投稿にする
const post = await bp.posts.create({
content: 'Check out our new feature!',
channels: [{ channelId: 1, platform: 'instagram' }],
mediaFiles: [uploadedFile.id],
postFormat: 'reel',
status: 'scheduled',
scheduledAt: '2026-04-10T14:00:00Z',
timezone: 'America/New_York',
});
一緒に理解しておく価値のある2つのフィールドがあります。scheduledAtはISO-8601形式のタイムスタンプで、timezoneはIANAのタイムゾーン名です。タイムゾーンを明示的に渡すことで、年に2回1時間ずれていくのではなく、夏時間の切り替えをまたいでも定期実行のロジックが正しく振る舞うようになります。
メディア
メディアは先にアップロードし、投稿を作成する際にIDで参照します。
const file = await bp.media.upload(/* … */);
await bp.posts.create({
content: 'New drop.',
mediaFiles: [file.id],
channels: [{ channelId: 1, platform: 'instagram' }],
status: 'scheduled',
scheduledAt: '2026-04-10T14:00:00Z',
});
プラットフォームごとにメディアのルールは異なり、それらは公開時ではなく投稿がキューに入る前に検証されます。それがスクリプトに求める振る舞いです。今すぐ捕捉してログに残せる却下であって、翌朝9時の静かな失敗ではありません。
利用できるリソース
このクライアントはposts、channels、channel sets、media、labels、schedules、RSSフィード、analytics、platformsを公開しています。つまりスクリプトは作成以上のことができます。キューにあるものを調べたり、クォータを確認したり、公開後にメトリクスを取得したりできます。
押さえておく価値のあること
最初のバージョンでいきなり本番公開しないこと。 下書きを作成して確認し、それからscheduledに切り替えましょう。コストはゼロで、コード上では見えない書式の問題を捕捉できます。
レート制限を扱うこと。 あなたのプランの割り当ては実際の上限です。
| Free | Pro | Business | |
|---|---|---|---|
| APIリクエスト/日 | 30 | 5,000 | 50,000 |
| APIキー | 1 | 5 | 10 |
| Freeの1日30回はAPIを試すためのサイズで、何かを運用するためのものではありません。リトライループに入ったスクリプトは数秒でそれを使い果たします。 |
自分でプランの数字を生成しないこと。 スクリプトが投稿本文を生成するなら、製品の数字をそこに含めないでください。事実に関わるものはすべて、次の価格変更後に誤りとなるテンプレートではなく、ソースから取得すべきです。
まとめ
npm install bulkpublishを実行し、APIキーでクライアントを作成し、コンテンツとチャンネルを添えてbp.posts.createを呼び出します。まず下書きから始め、チャンネルIDはハードコードせずに検索し、予約するものにはすべてタイムゾーンを渡し。