Add tidal search

This commit is contained in:
Nathan Thomas 2023-12-21 20:36:52 -08:00
parent f11a1105c9
commit 5e81860090
2 changed files with 23 additions and 8 deletions

View File

@ -104,7 +104,7 @@ class TidalClient(Client):
logger.debug(item)
return item
async def search(self, query: str, media_type: str, limit: int = 100) -> dict:
async def search(self, media_type: str, query: str, limit: int = 100) -> list[dict]:
"""Search for a query.
:param query:
@ -115,12 +115,14 @@ class TidalClient(Client):
:type limit: int
:rtype: dict
"""
# TODD: paginate
params = {
"query": query,
"limit": limit,
}
assert media_type in ("album", "track", "playlist", "video")
return await self._api_request(f"search/{media_type}s", params=params)
assert media_type in ("album", "track", "playlist", "video", "artist")
resp = await self._api_request(f"search/{media_type}s", params=params)
return [resp]
async def get_downloadable(self, track_id: str, quality: int):
params = {

View File

@ -97,6 +97,7 @@ class TrackSummary(Summary):
date_released = (
item.get("release_date")
or item.get("streamStartDate")
or item.get("album", {}).get("release_date_original")
or item.get("display_date")
or item.get("date")
@ -137,19 +138,23 @@ class AlbumSummary(Summary):
)
or "Unknown"
)
num_tracks = item.get("tracks_count", 0) or len(
item.get("tracks", []) or item.get("items", []),
num_tracks = (
item.get("tracks_count", 0)
or item.get("numberOfTracks", 0)
or len(
item.get("tracks", []) or item.get("items", []),
)
)
date_released = (
item.get("release_date_original")
or item.get("release_date")
or item.get("releaseDate")
or item.get("display_date")
or item.get("date")
or item.get("year")
or "Unknown"
)
# raise Exception(item)
return cls(id, name, artist, str(num_tracks), date_released)
@ -196,7 +201,7 @@ class PlaylistSummary(Summary):
@classmethod
def from_item(cls, item: dict):
id = item["id"]
id = item.get("id") or item.get("uuid") or "Unknown"
name = item.get("name") or item.get("title") or "Unknown"
creator = (
(item.get("publisher_metadata") and item["publisher_metadata"]["artist"])
@ -205,7 +210,12 @@ class PlaylistSummary(Summary):
or item.get("user", {}).get("name")
or "Unknown"
)
num_tracks = item.get("tracks_count") or item.get("nb_tracks") or -1
num_tracks = (
item.get("tracks_count")
or item.get("nb_tracks")
or item.get("numberOfTracks")
or -1
)
description = item.get("description") or "No description"
return cls(id, name, creator, num_tracks, description)
@ -242,6 +252,9 @@ class SearchResults:
elif source == "deezer":
for item in page["data"]:
results.append(summary_type.from_item(item))
elif source == "tidal":
for item in page["items"]:
results.append(summary_type.from_item(item))
else:
raise NotImplementedError