Cómo publicar en redes sociales desde Python

Cómo publicar en redes sociales desde Python

Publica y programa en 15 redes desde Python. Ejemplos funcionales, los campos por plataforma que realmente son obligatorios y cómo evitar sorpresas.

Si tu flujo de contenido está en Python, ya sea un scraper, un trabajo de datos o un flujo con un LLM, publicar no debería significar recurrir a otra cosa.

Instalar y autenticar

pip install bulkpublish
from bulkpublish import BulkPublish

bp = BulkPublish("bp_your_key_here")

El cliente también lee BULKPUBLISH_API_KEY del entorno, que es el mejor hábito:

import os
from bulkpublish import BulkPublish

bp = BulkPublish(os.environ["BULKPUBLISH_API_KEY"])

Crea primero un borrador

post = bp.posts.create(
    content="Launching our new product today!",
    channels=[
        {"channelId": 1, "platform": "x"},
        {"channelId": 2, "platform": "linkedin"},
    ],
    status="draft",
)

Los borradores son visibles en la app, así que puedes ver qué produjo realmente tu código antes de que lo vea una audiencia. Pasa a "scheduled" cuando estés conforme.

Busca tus ID de canal en lugar de fijarlos en el código:

channels = bp.channels.list()

Programa una publicación

post = bp.posts.create(
    content="Launching our new product today!",
    channels=[{"channelId": 1, "platform": "x"}],
    status="scheduled",
    scheduled_at="2026-04-10T09:00:00Z",
    timezone="America/New_York",
)

scheduled_at es ISO-8601 y timezone es un nombre IANA. Indica la zona horaria de forma explícita para cualquier cosa recurrente, o tu hora de publicación se desplazará una hora dos veces al año cuando cambie el horario de verano.

Requisitos por plataforma

Esta es la parte que sorprende a la gente. Algunas plataformas necesitan campos que otras no, y platform_specific es donde van. YouTube, por ejemplo, exige un título de entre 1 y 100 caracteres.

post = bp.posts.create(
    content="Behind the scenes on this month's build.",
    channels=[{"channelId": 5, "platform": "youtube"}],
    media_files=[file_id],
    platform_specific={"youtube": {"title": "How we ship every week"}},
    status="scheduled",
    scheduled_at="2026-04-10T09:00:00Z",
)

Si falta un campo obligatorio de una plataforma, la publicación se rechaza al crearla en lugar de fallar en silencio más tarde. Captura esa excepción y regístrala, porque en un flujo automatizado nadie está mirando la pantalla.

Texto distinto por plataforma

platform_content admite sobrescrituras por plataforma, que es cómo una sola llamada publica en varias redes sin enviar el mismo texto a todas:

bp.posts.create(
    content="Default text for anything not overridden.",
    platform_content={
        "x": "The short version.",
        "linkedin": "The longer version, with the reasoning behind it.",
    },
    channels=[
        {"channelId": 1, "platform": "x"},
        {"channelId": 2, "platform": "linkedin"},
    ],
    status="draft",
)

Merece la pena usarlo. Un flujo que difunde el mismo texto a quince redes es justo lo que delata una publicación automatizada.

Límites de velocidad

FreeProBusiness
Solicitudes de API/día305.00050.000
Claves de API1510
Las 30 solicitudes diarias del plan Free son para evaluar la API. Un flujo real necesita un plan de pago, y un bucle sin espera progresiva agota la cuota gratuita en segundos.

Si un LLM escribe el contenido

Dos reglas que importan más en Python que en cualquier otro sitio, porque es donde suelen vivir estos flujos.

Crea borradores, no publicaciones publicadas, al menos hasta que lo hayas observado un tiempo. El texto generado se equivoca con confianza de formas que un borrador humano no.

Nunca dejes que el modelo afirme un dato sobre un producto. Los precios y los límites cambian, y un modelo producirá encantado uno plausible. Todo lo factual viene de una fuente.

La versión corta

pip install bulkpublish, crea el cliente con tu clave desde el entorno, llama a bp.posts.create. Usa platform_specific para los campos obligatorios por plataforma como los títulos de YouTube, platform_content para texto distinto por red, indica una zona horaria en cualquier cosa programada y empieza con borradores.