Skip to content

Commit

Permalink
search: fix missing artists when filtering songs/videos (#655)
Browse files Browse the repository at this point in the history
* search: fix missing artists when filtering songs/videos

* search: fix missing artists when filtering songs/videos
  • Loading branch information
sigma67 authored Oct 5, 2024
1 parent 77e40b7 commit e995ae5
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 2 deletions.
1 change: 1 addition & 0 deletions tests/mixins/test_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ def test_search_filters(self, yt_auth):
query = "hip hop playlist"
results = yt_auth.search(query, filter="songs")
assert len(results) > 10
assert all(len(item["artists"]) > 0 for item in results)
assert all(item["resultType"] == "song" for item in results)
results = yt_auth.search(query, filter="videos")
assert len(results) > 10
Expand Down
1 change: 1 addition & 0 deletions ytmusicapi/parsers/i18n.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ def __init__(self, language):
@i18n
def get_search_result_types(self):
return [
_("album"),
_("artist"),
_("playlist"),
_("song"),
Expand Down
5 changes: 3 additions & 2 deletions ytmusicapi/parsers/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def get_search_result_type(result_type_local, result_types_local):
if result_type_local not in result_types_local:
result_type = "album"
else:
result_type = UNIQUE_RESULT_TYPES[result_types_local.index(result_type_local)]
result_type = ALL_RESULT_TYPES[result_types_local.index(result_type_local)]

return result_type

Expand Down Expand Up @@ -154,7 +154,8 @@ def parse_search_result(data, search_result_types, result_type, category):
search_result["year"] = None
flex_item = get_flex_column_item(data, 1)
runs = flex_item["text"]["runs"]
runs_offset = (len(runs[0]) == 1) * 2 # ignore the first run if it is a type specifier (like "Song")
# ignore the first run if it is a type specifier (like "Single" or "Album")
runs_offset = (len(runs[0]) == 1 and runs[0]["text"].lower() in search_result_types) * 2
song_info = parse_song_runs(runs[runs_offset:])
search_result.update(song_info)

Expand Down

0 comments on commit e995ae5

Please sign in to comment.