ModalTranscriberMCP / src /interfaces /podcast_downloader.py
richard-su's picture
Upload folder using huggingface_hub
b5df735 verified
"""
Podcast downloading interface definitions
"""
from abc import ABC, abstractmethod
from typing import Dict, Any, Optional, Tuple
from dataclasses import dataclass
from enum import Enum
class PodcastPlatform(Enum):
"""Podcast platform enumeration"""
APPLE = "apple"
XIAOYUZHOU = "xyz"
SPOTIFY = "spotify"
GENERIC = "generic"
@dataclass
class PodcastInfo:
"""Podcast episode information"""
title: str
audio_url: str
episode_id: str
platform: PodcastPlatform
duration: Optional[float] = None
description: Optional[str] = None
@dataclass
class DownloadResult:
"""Download operation result"""
success: bool
file_path: Optional[str]
podcast_info: Optional[PodcastInfo]
error_message: Optional[str] = None
class IPodcastDownloader(ABC):
"""Interface for podcast downloading operations"""
@abstractmethod
async def extract_podcast_info(self, url: str) -> PodcastInfo:
"""Extract podcast information from URL"""
pass
@abstractmethod
async def download_podcast(
self,
url: str,
output_folder: str = "downloads",
convert_to_mp3: bool = False,
keep_original: bool = False
) -> DownloadResult:
"""Download podcast from URL"""
pass
@abstractmethod
def get_supported_platforms(self) -> list[PodcastPlatform]:
"""Get list of supported platforms"""
pass
@abstractmethod
def can_handle_url(self, url: str) -> bool:
"""Check if this downloader can handle the given URL"""
pass