studio / publisher /router.py
Ava2lon's picture
Upload 115 files
59215bb verified
Raw
History Blame Contribute Delete
2.48 kB
from publisher.platforms.facebook import publish_facebook
from publisher.platforms.reels import publish_reels
from publisher.platforms.shorts import publish_shorts
from publisher.platforms.tiktok import publish_tiktok
PUBLISHERS = {
"tiktok": publish_tiktok,
"reels": publish_reels,
"shorts": publish_shorts,
"facebook": publish_facebook,
}
async def publish_all(
source,
platforms,
metadata=None,
hashtags=None,
thumbnail=None,
schedule_time=None,
):
results = {}
metadata = metadata or {}
hashtags = hashtags or {}
caption = metadata.get("metadata") if isinstance(metadata, dict) else str(metadata)
tag_value = hashtags.get("hashtags", hashtags) if isinstance(hashtags, dict) else hashtags
if isinstance(tag_value, str):
tag_value = [tag.strip() for tag in tag_value.split(",") if tag.strip()]
for platform in platforms:
publisher = PUBLISHERS.get(platform)
if not publisher:
results[platform] = {"status": "skipped", "error": "Unsupported platform"}
continue
platform_payload = {
"video_path": source,
"caption": caption or "",
"hashtags": tag_value or [],
"thumbnail": thumbnail,
"schedule_time": schedule_time,
}
try:
results[platform] = await publisher(platform_payload)
except Exception as exc:
results[platform] = {"status": "failed", "error": str(exc)}
return results
async def publish(payload):
if isinstance(payload, dict):
source = payload.get("source") or payload.get("video_path")
platforms = payload.get("platforms", [])
metadata = payload.get("metadata")
hashtags = payload.get("hashtags")
thumbnail = payload.get("thumbnail")
schedule_time = payload.get("schedule_time")
else:
source = getattr(payload, "source", None) or getattr(payload, "video_path", None)
platforms = getattr(payload, "platforms", [])
metadata = getattr(payload, "metadata", None)
hashtags = getattr(payload, "hashtags", None)
thumbnail = getattr(payload, "thumbnail", None)
schedule_time = getattr(payload, "schedule_time", None)
return await publish_all(
source=source,
platforms=platforms,
metadata=metadata,
hashtags=hashtags,
thumbnail=thumbnail,
schedule_time=schedule_time,
)