Social-Media-Beiträge von Python aus veröffentlichen

Social-Media-Beiträge von Python aus veröffentlichen

Poste und plane über 15 Netzwerke hinweg von Python aus. Funktionierende Beispiele, die pro Plattform wirklich erforderlichen Felder und wie man Überraschungen vermeidet.

Wenn deine Content-Pipeline in Python läuft, ob Scraper, Datenjob oder LLM-Workflow, sollte Veröffentlichen nicht heißen, auf etwas anderes auszuweichen.

Installieren und authentifizieren

pip install bulkpublish
from bulkpublish import BulkPublish

bp = BulkPublish("bp_your_key_here")

Der Client liest den Schlüssel auch aus BULKPUBLISH_API_KEY in der Umgebung, was die bessere Gewohnheit ist:

import os
from bulkpublish import BulkPublish

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

Zuerst einen Entwurf erstellen

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

Entwürfe sind in der App sichtbar, sodass du sehen kannst, was dein Code tatsächlich erzeugt hat, bevor es ein Publikum tut. Wechsle zu "scheduled", sobald du zufrieden bist.

Such deine Kanal-IDs, statt sie fest einzubauen:

channels = bp.channels.list()

Einen planen

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 ist ISO-8601 und timezone ein IANA-Name. Gib die Zeitzone bei allem Wiederkehrenden explizit an, sonst wandert deine Veröffentlichungszeit zweimal im Jahr um eine Stunde, wenn die Zeitumstellung greift.

Plattformspezifische Anforderungen

Das ist der Teil, der überrascht. Manche Plattformen brauchen Felder, die andere nicht brauchen, und platform_specific ist der Ort dafür. YouTube zum Beispiel verlangt einen Titel mit 1 bis 100 Zeichen.

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",
)

Fehlt ein erforderliches plattformspezifisches Feld, wird der Beitrag schon bei der Erstellung abgelehnt, statt später leise zu scheitern. Fang diese Ausnahme ab und protokolliere sie, denn in einer automatisierten Pipeline schaut niemand auf den Bildschirm.

Unterschiedlicher Text pro Plattform

platform_content nimmt Überschreibungen pro Plattform entgegen, wodurch ein einziger Aufruf mehrere Netzwerke bedient, ohne überall identischen Text zu versenden:

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",
)

Lohnt sich zu nutzen. Eine Pipeline, die identischen Text an fünfzehn Netzwerke sendet, ist genau das, was automatisiertes Posten offensichtlich macht.

Ratenlimits

FreeProBusiness
API-Anfragen/Tag305.00050.000
API-Schlüssel1510
Die 30 Anfragen pro Tag bei Free sind zum Ausprobieren der API gedacht. Eine echte Pipeline braucht einen bezahlten Tarif, und eine Schleife ohne Backoff verbrennt das kostenlose Kontingent in Sekunden.

Wenn ein LLM den Inhalt schreibt

Zwei Regeln, die in Python mehr zählen als anderswo, weil genau dort diese Pipelines meist leben.

Erstelle Entwürfe, keine veröffentlichten Beiträge, zumindest bis du es eine Weile beobachtet hast. Generierter Text ist auf eine Art selbstbewusst falsch, wie ein menschlicher Entwurf es nicht ist.

Lass das Modell niemals eine Tatsachenbehauptung über ein Produkt aufstellen. Preise und Limits ändern sich, und ein Modell produziert bereitwillig einen plausiblen Wert. Alles Faktische kommt aus einer Quelle.

Die Kurzfassung

pip install bulkpublish, mit deinem Schlüssel aus der Umgebung konstruieren, bp.posts.create aufrufen. Nutz platform_specific für erforderliche plattformspezifische Felder wie YouTube-Titel, platform_content für unterschiedlichen Text pro Netzwerk, gib bei allem Geplanten eine Zeitzone an und fang mit Entwürfen an.