Publier sur des plateformes sociales depuis Node signifie normalement un flux OAuth, un pipeline média et un modèle de publication par plateforme, chacun changeant continuellement. Ceci le fait via un client unique.
Installer et s’authentifier
npm install bulkpublish
import { BulkPublish } from 'bulkpublish';
const bp = new BulkPublish({ apiKey: process.env.BULKPUBLISH_API_KEY });
Obtenez une clé depuis les paramètres développeur de votre compte. Gardez-la dans une variable d’environnement, pas dans le code source.
Créer un brouillon
Commencez ici plutôt que par une publication immédiate. Un brouillon est visible dans l’application, vous pouvez donc voir exactement ce que votre code a produit avant que quoi que ce soit n’atteigne une audience.
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',
});
Chaque canal est un objet avec un channelId et une platform. Pour trouver les vôtres :
const channels = await bp.channels.list();
Ne codez pas en dur des identifiants de canal issus d’un script ponctuel dans quoi que ce soit de durable. Recherchez-les, ou stockez-les dans une configuration où ils peuvent être modifiés sans déploiement.
En programmer une
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',
});
Deux champs qui valent la peine d’être compris ensemble. scheduledAt est un horodatage ISO-8601, et timezone est un nom de fuseau IANA. Passer le fuseau horaire explicitement est ce qui fait que la logique récurrente se comporte sensément à travers les changements d’heure d’été, plutôt que de dériver d’une heure deux fois par an.
Médias
Le média est d’abord téléversé, puis référencé par son id lors de la création de la publication :
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',
});
Les règles média de chaque plateforme diffèrent, et elles sont validées avant que la publication ne soit mise en file plutôt qu’au moment de la publication. C’est le comportement que vous voulez d’un script : un rejet que vous pouvez attraper et journaliser maintenant, pas un échec silencieux à 9h demain.
Les ressources disponibles
Le client expose les publications, canaux, ensembles de canaux, médias, labels, programmations, flux RSS, analyses et plateformes. Un script peut donc faire plus que créer : consulter ce qui est en file, vérifier le quota, récupérer des métriques après publication.
Ce qu’il vaut la peine de bien faire
Ne publiez jamais directement dès la première version. Créez des brouillons, examinez-les, puis passez à scheduled. Le coût est nul et cela attrape des problèmes de formatage invisibles dans le code.
Gérez les limites de débit. L’allocation de votre forfait est un vrai plafond :
| Free | Pro | Business | |
|---|---|---|---|
| Requêtes API/jour | 30 | 5 000 | 50 000 |
| Clés API | 1 | 5 | 10 |
| Les 30 par jour de Free sont dimensionnés pour essayer l’API, pas pour faire tourner quoi que ce soit. Un script dans une boucle de nouvelle tentative les épuisera en quelques secondes. |
Ne générez pas vos propres faits sur le forfait. Si votre script écrit le texte des publications, gardez les chiffres du produit en dehors. Tout élément factuel devrait provenir d’une source plutôt que d’un modèle qui deviendra faux après le prochain changement de tarification.
En résumé
npm install bulkpublish, créez un client avec votre clé API, appelez bp.posts.create avec le contenu et les canaux. Commencez par des brouillons, recherchez les identifiants de canal plutôt que de les coder en dur, passez un fuseau horaire avec tout ce qui est programmé.