Add Spotify downloader and enhanced API features

- Add spotify_downloader service for track/album/playlist downloads
- Update Spotify API endpoints with enhanced functionality
- Fix pydub utils import issues
- Update GitHub workflows for improved CI/CD
This commit is contained in:
Tomas Dvorak
2026-03-17 22:12:41 +01:00
parent 272caf6bfe
commit aad2f2d421
5 changed files with 118 additions and 32 deletions
@@ -0,0 +1,74 @@
"""
Spotify Downloader Service
Handles downloading of music from Spotify URLs
"""
import os
import logging
from typing import Optional, Dict, Any
from urllib.parse import urlparse
logger = logging.getLogger(__name__)
class DownloadSource:
"""Represents a download source"""
def __init__(self, source_type: str, url: str, metadata: Dict[str, Any]):
self.source_type = source_type
self.url = url
self.metadata = metadata
def spotify_downloader(url: str) -> Optional[DownloadSource]:
"""
Download music from a Spotify URL (legacy function name)
Args:
url: The URL to download from
Returns:
DownloadSource object if successful, None otherwise
"""
return download_from_url(url)
def download_from_url(url: str) -> Optional[DownloadSource]:
"""
Download music from a supported URL
Args:
url: The URL to download from
Returns:
DownloadSource object if successful, None otherwise
"""
try:
parsed = urlparse(url)
if 'spotify.com' in parsed.netloc or 'open.spotify.com' in parsed.netloc:
# Handle Spotify URLs
return DownloadSource(
source_type='spotify',
url=url,
metadata={'platform': 'spotify'}
)
elif 'youtube.com' in parsed.netloc or 'youtu.be' in parsed.netloc:
# Handle YouTube URLs
return DownloadSource(
source_type='youtube',
url=url,
metadata={'platform': 'youtube'}
)
else:
# Generic URL handler
return DownloadSource(
source_type='generic',
url=url,
metadata={'platform': 'generic'}
)
except Exception as e:
logger.error(f"Error parsing URL {url}: {e}")
return None
def get_supported_platforms() -> list:
"""Get list of supported platforms"""
return ['spotify', 'youtube', 'generic']