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)
|
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]:
|
def general_search(self, search_query: str, **kwargs) -> List[DatabaseObject]:
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
@ -68,25 +152,9 @@ class Genius(Page):
|
|||||||
for elements in traverse_json_path(data, "response.sections", default=[]):
|
for elements in traverse_json_path(data, "response.sections", default=[]):
|
||||||
hits = elements.get("hits", [])
|
hits = elements.get("hits", [])
|
||||||
for hit in hits:
|
for hit in hits:
|
||||||
result = hit.get("result", {})
|
parsed = self.parse_api_object(hit.get("result"))
|
||||||
hit_type = hit.get("type", result.get("_type"))
|
if parsed is not None:
|
||||||
|
results.append(parsed)
|
||||||
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
|
|
||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user