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