Comment publier des posts sur les réseaux sociaux depuis Node.js

Comment publier des posts sur les réseaux sociaux depuis Node.js

Publiez sur 15 réseaux depuis Node avec un seul appel API. Des exemples fonctionnels pour créer, programmer et joindre des médias, plus les erreurs à éviter.

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 :

FreeProBusiness
Requêtes API/jour305 00050 000
Clés API1510
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é.