Add soundcloud support

This commit is contained in:
BarsTiger
2023-11-13 23:08:58 +02:00
parent e99ba9daa3
commit bc2663c17c
22 changed files with 391 additions and 7 deletions

View File

@@ -0,0 +1,55 @@
from attrs import define
from ..common.song import BaseSongItem
from .driver import SoundCloudDriver
@define
class SongItem(BaseSongItem):
@classmethod
def from_soundcloud(cls, song_item: dict):
return cls(
name=song_item['title'],
id=str(song_item['id']),
artists=[],
thumbnail=(song_item['artwork_url'] or song_item['user']['avatar_url'] or
'https://soundcloud.com/images/default_avatar_large.png')
.replace('large.jpg', 't300x300.jpg'),
preview_url=None
)
@property
def all_artists(self):
return None
@define
class Songs(object):
driver: SoundCloudDriver
async def search(self, query: str, limit: int = 30) -> list[SongItem] | None:
r = await self.driver.search(query, limit=limit)
if r is None:
return None
return [SongItem.from_soundcloud(item) for item in r][:limit]
async def search_one(self, query: str) -> SongItem | None:
return (await self.search(query, limit=1) or [None])[0]
async def from_id(self, song_id: str) -> SongItem | None:
r = await self.driver.get_track(song_id)
if r is None:
return None
return SongItem.from_soundcloud(r)
async def from_url(self, url: str) -> SongItem | None:
r = await self.driver.resolve_url(url)
if r is None:
return None
return SongItem.from_soundcloud(r)