Post to multiple social media platforms via the unified social posting API with automatic provider fallback.
Location: [your-project-root]/social-posting-api/
Environment:
cd [your-project-root]/social-posting-api
source venv/bin/activate
Required env vars in .env:
POSTFORME_API_KEY - Primary provider (PostForMe)LATE_API_KEY - Fallback provider (LATE)from social_posting import SocialPostingClient
from dotenv import load_dotenv
load_dotenv()
client = SocialPostingClient()
print("Providers:", client.available_providers)
for acc in client.get_accounts():
print(f" {acc.platform}: {acc.username}")
result = client.post(
content="Your post content here",
platforms=["twitter", "linkedin"]
)
print(f"Success: {result.success}, Provider: {result.provider}")
result = client.post(
content="Check out these photos!",
platforms=["instagram"],
media_urls=[
"https://example.com/image1.jpg",
"https://example.com/image2.jpg"
]
)
from datetime import datetime
result = client.post(
content="Scheduled post",
platforms=["linkedin"],
scheduled_for=datetime(2025, 1, 15, 9, 0) # UTC
)
| Platform | Text Only | With Media | Notes |
|---|---|---|---|
| ---------- | ----------- | ------------ | ------- |
| Twitter/X | ✅ | ✅ | 280 char limit |
| ✅ | ✅ | Best for professional content | |
| ❌ | ✅ | Requires media | |
| ✅ | ✅ | ||
| TikTok | ❌ | ✅ | Video preferred |
| Threads | ✅ | ✅ | |
| Bluesky | ✅ | ✅ | |
| ❌ | ✅ | Requires media | |
| YouTube | ❌ | ✅ | Video only |
#!/usr/bin/env python
"""Post to social media platforms."""
import sys
sys.path.insert(0, '[your-project-root]/social-posting-api')
from social_posting import SocialPostingClient
from dotenv import load_dotenv
load_dotenv('[your-project-root]/social-posting-api/.env')
def post_to_social(content: str, platforms: list, media_urls: list = None):
"""Post content to specified platforms."""
client = SocialPostingClient()
# Check which platforms are connected
accounts = client.get_accounts()
connected = [a.platform for a in accounts]
# Filter to only connected platforms
valid_platforms = [p for p in platforms if p in connected]
if not valid_platforms:
print(f"No connected accounts for: {platforms}")
print(f"Connected: {connected}")
return None
# Post
result = client.post(
content=content,
platforms=valid_platforms,
media_urls=media_urls
)
if result.success:
print(f"Posted via {result.provider}")
print(f" Post ID: {result.post_id}")
else:
print(f"Failed: {result.error}")
return result
# Example usage
if __name__ == "__main__":
post_to_social(
content="Hello from the social posting API!",
platforms=["instagram"],
media_urls=["https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1080"]
)
Always check what's connected first:
cd [your-project-root]/social-posting-api
source venv/bin/activate && python -c "
from social_posting import SocialPostingClient
from dotenv import load_dotenv
load_dotenv()
client = SocialPostingClient()
for acc in client.get_accounts():
print(f'{acc.platform}: {acc.username}')
"
source venv/bin/activate && python -c "
from social_posting import SocialPostingClient
from dotenv import load_dotenv
load_dotenv()
client = SocialPostingClient()
result = client.post(
content='''Your content here''',
platforms=['platform1', 'platform2'],
media_urls=['https://example.com/image.jpg'] # Optional
)
print(f'Success: {result.success}')
print(f'Provider: {result.provider}')
print(f'Post ID: {result.post_id}')
"
To connect Twitter or other platforms:
.env will auto-detect new accounts| Error | Cause | Solution |
|---|---|---|
| ------- | ------- | --------- |
| "No connected accounts" | Platform not linked | Connect via provider dashboard |
| "Instagram requires media" | Text-only post | Add at least 1 image URL |
| "HTTP 401" | Invalid API key | Check .env file |
| "All providers failed" | Both providers down | Try again later |
For open source announcements:
# Post to developer platforms
result = client.post(
content="Just open-sourced my multi-provider social posting API!\n\nFeatures:\n- Automatic fallback between providers\n- Supports 9+ platforms\n- Simple Python interface\n\nGitHub: https://github.com/[your-username]/social-posting-api",
platforms=["twitter", "linkedin"]
)
For visual content:
# Instagram carousel
result = client.post(
content="Behind the scenes of building [Your Product]",
platforms=["instagram"],
media_urls=[
"https://example.com/image1.jpg",
"https://example.com/image2.jpg",
"https://example.com/image3.jpg"
]
)
Canlah AI — Run performance marketing without breaking your brand.
共 2 个版本