Pourquoi Python pour l\'automatisation des réseaux sociaux
Python est le langage de reference pour l\'automatisation. Il est lisible, a un ecosysteme massif, et il est parfait pour des scripts qui tournent selon un planning. Et quand il s\'agit de publier sur les reseaux sociaux par programme, l\'alternative a utiliser une API comme Upload-Post est de construire des integrations OAuth pour chaque plateforme vous-meme. Ca veut dire gerer l\'API Content Posting de TikTok, l\'API Graph d\'Instagram, l\'Données API de YouTube, etc. Chacune avec son propre flux d\'authentification, ses limites de taux et ses particularites.
Avec l'Social media publishing API, vous faites un seul appel API et ca publie sur les dix plateformes. Le SDK Python rend ca encore plus simple.
Configurer votre environnement
1. Installer le SDK
pip install upload-post 2. Obtenir votre cle API
Creez un compte gratuit sur app.upload-post.com et generez une cle API depuis le tableau de bord des cles API. Stockez-la comme variable d\'environnement :
export UPLOAD_POST_API_KEY="your-api-key-here" 3. Connecter vos comptes sociaux
Dans le tableau de bord Upload-Post, creez un profil (par ex. "mybrand") et connectez vos comptes TikTok, Instagram, YouTube et tout autre que vous voulez utiliser. Le nom du profil est ce que vous referencerez dans votre code.
Votre premier upload : publier une vidéo
import os
from upload_post import UploadPostClient
client = UploadPostClient(
api_key=os.environ["UPLOAD_POST_API_KEY"]
)
response = client.upload_video(
video_path="my-video.mp4",
title="Notre nouveau produit en action",
user="mybrand",
platforms=["tiktok", "instagram", "youtube"]
)
if response["success"]:
for platform, result in response["results"].items():
if result["success"]:
print(f"{platform}: {result['url']}")
else:
print(f"{platform}: upload failed")
else:
print("Upload failed:", response) C\'est un script fonctionnel. Lancez-le et votre video est en ligne sur trois plateformes. Maintenant, faisons-le faire plus.
Post photos and carousels
response = client.upload_photos(
photos=["slide-1.jpg", "slide-2.jpg", "slide-3.jpg"],
title="Lookbook de la collection d\'été",
description="Chaque pièce, fabriquée au Portugal. Achetez le lien dans la bio.",
user="mybrand",
platforms=["instagram", "tiktok", "linkedin"]
)
print(response) Instagram cree un carrousel, TikTok cree un diaporama, et LinkedIn affiche un post multi-images. Chaque plateforme recoit le format qu\'elle prefere.
Post text content
Pour les posts uniquement texte (pensez threads Twitter, mises a jour LinkedIn, ou soumissions Reddit) :
response = client.upload_text(
title="Nous venons de déployer une énorme mise à jour de notre API. Voici ce qui a changé...",
user="mybrand",
platforms=["x", "linkedin", "threads", "bluesky"]
)
print(response) Si votre texte depasse la limite de caracteres sur une plateforme, l\'API le gere intelligemment. Sur X, un texte de plus de 280 caracteres devient automatiquement un thread. Sur Threads, le decoupage se fait a 500 caracteres. Sur Bluesky, a 300.
Utiliser des paramètres spécifiques par plateforme.
Le parametre title definit la legende par defaut pour toutes les plateformes, mais vous voudrez souvent un texte different pour chacune. Voici comment personnaliser par plateforme :
import requests
import os
API_KEY = os.environ["UPLOAD_POST_API_KEY"]
with open("product-demo.mp4", "rb") as video:
response = requests.post(
"https://api.upload-post.com/api/upload",
headers={"Autorisation": f"Clé API {API_KEY}"},
files={"video": video},
data={
"user": "mybrand",
"title": "Check this out",
# Platform specific titles
"tiktok_title": "POV : votre produit se vend tout seul #ecommerce #dropshipping",
"instagram_title": "Nouvelle sortie. Lien dans la bio pour un accès anticipé.",
"youtube_title": "Démonstration du produit | Revue complète",
"youtube_description": "Dans cette vidéo, nous vous montrons exactement comment cela fonctionne...",
"linkedin_title": "Ravi de partager notre dernier lancement de produit avec la communauté.",
# Platform specific settings
"platform[]": ["tiktok", "instagram", "youtube", "linkedin"],
"privacy_level": "PUBLIC_TO_EVERYONE",
"media_type": "REELS",
"tags[]": ["product", "demo", "review"],
"privacyStatus": "public",
}
)
print(response.json())
Cet exemple utilise la librairie requests directement au lieu du SDK, ce qui vous donne acces a chaque parametre de l\'API. Consultez la reference API complete pour toutes les options disponibles par plateforme.
Planifiez des posts pour plus tard
from datetime import datetime, timedelta
# Schedule for tomorrow at 9 AM
tomorrow_9am = (datetime.now() + timedelta(days=1)).replace(
hour=9, minute=0, second=0, microsecond=0
)
response = client.upload_video(
video_path="tomorrows-content.mp4",
title="Bonjour ! Contenu frais pour votre fil",
user="mybrand",
platforms=["tiktok", "instagram"],
scheduled_date=tomorrow_9am.isoformat(),
timezone="America/New_York"
)
print(f"Planifié ! ID de la tâche : {response['job_id']}")
print(f"Sera publié à : {response['scheduled_date']}") Vous pouvez planifier jusqu\'a 365 jours a l\'avance. Pour plus de details sur la planification et le systeme de file d\'attente, lisez notre guide de planification.
Build a complete automation: folder monitoring
Voici un script pratique qui surveille un dossier pour de nouveaux fichiers video et les uploade automatiquement. C\'est ideal pour les agences qui recoivent du contenu client dans un dossier partage :
import os
import time
import json
from upload_post import UploadPostClient
client = UploadPostClient(
api_key=os.environ["UPLOAD_POST_API_KEY"]
)
WATCH_FOLDER = "/path/to/content/inbox"
PROCESSED_FILE = "/path/to/content/processed.json"
CHECK_INTERVAL = 60 # seconds
def load_processed():
if os.path.exists(PROCESSED_FILE):
with open(PROCESSED_FILE) as f:
return set(json.load(f))
return set()
def save_processed(processed):
with open(PROCESSED_FILE, "w") as f:
json.dump(list(processed), f)
def upload_video(filepath):
filename = os.path.basename(filepath)
title = filename.rsplit(".", 1)[0].replace("-", " ").replace("_", " ")
response = client.upload_video(
video_path=filepath,
title=title,
user="mybrand",
platforms=["tiktok", "instagram", "youtube"],
add_to_queue=True,
async_upload=True
)
return response
print(f"Watching {WATCH_FOLDER} for new videos...")
processed = load_processed()
while True:
for filename in os.listdir(WATCH_FOLDER):
if filename in processed:
continue
if not filename.lower().endswith((".mp4", ".mov")):
continue
filepath = os.path.join(WATCH_FOLDER, filename)
print(f"New file detected: {filename}")
try:
result = upload_video(filepath)
print(f" Queued successfully: {result.get('job_id', 'done')}")
processed.add(filename)
save_processed(processed)
except Exception as e:
print(f" Error: {e}")
time.sleep(CHECK_INTERVAL) Lancez ce script en arriere-plan (ou comme service systemd) et chaque fois que quelqu\'un depose une video dans le dossier, elle est publiee sur toutes vos plateformes connectees. Si vous avez besoin de quelque chose de plus robuste, envisagez d\'utiliser n8n ou Make.com pour un workflow gere.
Travailler avec l\'API directement (sans le SDK)
Si vous preferez ne pas utiliser le SDK ou avez besoin d\'un controle plus fin, vous pouvez utiliser la librairie requests directement. Voici l\'equivalent de l\'upload via le SDK :
import requests
API_KEY = "your-api-key-here"
API_URL = "https://api.upload-post.com/api/upload"
# Upload a video
with open("video.mp4", "rb") as f:
response = requests.post(
API_URL,
headers={"Autorisation": f"Clé API {API_KEY}"},
files={"video": ("video.mp4", f, "video/mp4")},
data={
"user": "mybrand",
"title": "Publié avec des requêtes Python",
"platform[]": ["tiktok", "instagram"],
}
)
print(response.status_code)
print(response.json()) Valider votre clé API
Avant de lancer un gros lot, c\'est une bonne idee de verifier que votre cle fonctionne et de consulter les limites de votre plan :
response = requests.get(
"https://api.upload-post.com/api/uploadposts/me",
headers={"Autorisation": f"Clé API {API_KEY}"}
)
data = response.json()
print(f"Email : {data['email']}")
print(f"Plan : {data['plan']}") Bonnes pratiques de gestion d\'erreurs
Quand vous construisez des scripts de production, gerez ces scenarios courants :
import requests
def upload_with_retry(video_path, title, platforms, max_retries=3):
for attempt in range(max_retries):
try:
with open(video_path, "rb") as f:
response = requests.post(
"https://api.upload-post.com/api/upload",
headers={"Autorisation": f"Clé API {API_KEY}"},
files={"video": f},
data={
"user": "mybrand",
"title": title,
"platform[]": platforms,
"async_upload": "true",
},
timeout=120
)
if response.status_code == 200:
return response.json()
elif response.status_code == 429:
# Rate limited, check usage
usage = response.json().get("usage", {})
print(f"Rate limited. Used {usage.get('count')}/{usage.get('limit')}")
return None
elif response.status_code == 401:
print("Invalid API key")
return None
else:
print(f"Attempt {attempt + 1} failed: {response.status_code}")
except requests.exceptions.Timeout:
print(f"Attempt {attempt + 1} timed out, retrying...")
print(f"Tous les {max_retries} essais ont échoué pour {video_path}")
return None View upload history
Vous pouvez recuperer votre historique d\'uploads pour verifier ce qui est passe ou construire un tableau de bord de reporting :
response = requests.get(
"https://api.upload-post.com/api/uploadposts/history?page=1&limit=20",
headers={"Autorisation": f"Clé API {API_KEY}"}
)
for entry in response.json()["history"]:
status = "OK" if entry["success"] else "FAILED"
print(f"[{status}] {entry['platform']} - {entry['post_title']} - {entry['post_url']}") Prochaines étapes
Maintenant que vous avez les bases, voici quelques idees de ce que vous pouvez construire ensuite :
- Connectez votre script à un CMS ou une base de données pour que le nouveau contenu soit publié automatiquement.
- Utilisez l\'approche d'upload en masse pour traiter des bibliotheques de contenu entieres
- Recyclez des vidéos longues en clips courts avec FFmpeg et l\'API Upload-Post
- Construisez une integration marque blanche si vous construisez un produit SaaS qui a besoin de publication sociale
- Explorez nos modeles n8n pour des workflows propulses par l\'IA qui generent et publient du contenu automatiquement