mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-04 20:43:04 +00:00
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:
@@ -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']
|
||||
Reference in New Issue
Block a user