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