feat: finished searching genious
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
068c749c38
commit
f6caee41a8
@ -51,6 +51,90 @@ class Genius(Page):
|
||||
|
||||
return super().get_source_type(source)
|
||||
|
||||
def add_to_artwork(self, artwork: Artwork, url: str):
|
||||
if url is None:
|
||||
return
|
||||
|
||||
url_frags = url.split(".")
|
||||
if len(url_frags) < 2:
|
||||
artwork.append(url=url)
|
||||
return
|
||||
|
||||
dimensions = url_frags[-2].split("x")
|
||||
if len(dimensions) < 2:
|
||||
artwork.append(url=url)
|
||||
return
|
||||
|
||||
if len(dimensions) == 3:
|
||||
dimensions = dimensions[:-1]
|
||||
|
||||
try:
|
||||
artwork.append(url=url, width=int(dimensions[0]), height=int(dimensions[1]))
|
||||
except ValueError:
|
||||
artwork.append(url=url)
|
||||
|
||||
def parse_api_object(self, data: dict) -> Optional[DatabaseObject]:
|
||||
object_type = data.get("_type")
|
||||
|
||||
artwork = Artwork()
|
||||
self.add_to_artwork(artwork, data.get("header_image_url"))
|
||||
self.add_to_artwork(artwork, data.get("image_url"))
|
||||
|
||||
source: Source = Source(self.SOURCE_TYPE, data.get("url"), additional_data={
|
||||
"id": data.get("id"),
|
||||
"slug": data.get("slug"),
|
||||
"api_path": data.get("api_path"),
|
||||
})
|
||||
|
||||
if source.url is None:
|
||||
return None
|
||||
|
||||
if object_type == "artist":
|
||||
return Artist(
|
||||
name=data.get("name"),
|
||||
source_list=[source],
|
||||
artwork=artwork,
|
||||
)
|
||||
|
||||
if object_type == "album":
|
||||
self.add_to_artwork(artwork, data.get("cover_art_thumbnail_url"))
|
||||
self.add_to_artwork(artwork, data.get("cover_art_url"))
|
||||
|
||||
return Album(
|
||||
title=data.get("name"),
|
||||
source_list=[source],
|
||||
artist_list=[self.parse_api_object(data.get("artist"))],
|
||||
artwork=artwork,
|
||||
date=ID3Timestamp(**data.get("release_date_components", {})),
|
||||
)
|
||||
|
||||
if object_type == "song":
|
||||
self.add_to_artwork(artwork, data.get("song_art_image_thumbnail_url"))
|
||||
self.add_to_artwork(artwork, data.get("song_art_image_url"))
|
||||
|
||||
main_artist_list = []
|
||||
featured_artist_list = []
|
||||
|
||||
_artist_name = None
|
||||
primary_artist = self.parse_api_object(data.get("primary_artist"))
|
||||
if primary_artist is not None:
|
||||
_artist_name = primary_artist.name
|
||||
main_artist_list.append(primary_artist)
|
||||
for feature_artist in data.get("featured_artists", []):
|
||||
artist = self.parse_api_object(feature_artist)
|
||||
if artist is not None:
|
||||
featured_artist_list.append(artist)
|
||||
|
||||
return Song(
|
||||
title=clean_song_title(data.get("title"), artist_name=_artist_name),
|
||||
source_list=[source],
|
||||
artwork=artwork,
|
||||
feature_artist_list=featured_artist_list,
|
||||
artist_list=main_artist_list,
|
||||
)
|
||||
|
||||
return None
|
||||
|
||||
def general_search(self, search_query: str, **kwargs) -> List[DatabaseObject]:
|
||||
results = []
|
||||
|
||||
@ -68,25 +152,9 @@ class Genius(Page):
|
||||
for elements in traverse_json_path(data, "response.sections", default=[]):
|
||||
hits = elements.get("hits", [])
|
||||
for hit in hits:
|
||||
result = hit.get("result", {})
|
||||
hit_type = hit.get("type", result.get("_type"))
|
||||
|
||||
name = result.get("name")
|
||||
if name is None:
|
||||
continue
|
||||
source = Source(self.SOURCE_TYPE, result.get("url"), additional_data={
|
||||
"id": result.get("id"),
|
||||
})
|
||||
if source.url is None:
|
||||
continue
|
||||
image_url = result.get("header_image_url")
|
||||
|
||||
if hit_type == "artist":
|
||||
results.append(Artist(
|
||||
name=name,
|
||||
source_list=[source]
|
||||
))
|
||||
continue
|
||||
parsed = self.parse_api_object(hit.get("result"))
|
||||
if parsed is not None:
|
||||
results.append(parsed)
|
||||
|
||||
return results
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user