Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Made for you" playlists by Spotify cause error #2254

Open
rhyst opened this issue Dec 3, 2024 · 3 comments
Open

"Made for you" playlists by Spotify cause error #2254

rhyst opened this issue Dec 3, 2024 · 3 comments
Labels
Bug Unexpected problem or unintended behavior that needs to be fixed

Comments

@rhyst
Copy link

rhyst commented Dec 3, 2024

System OS

Docker

Python Version

3.13 (CPython)

Install Source

Other

Install version / commit hash

4.2.10

Expected Behavior vs Actual Behavior

If you have a "Made for you" playlist in your library then the download all-user-playlists fails.

Steps to reproduce - Ensure to include actual links!

  1. Add a "Made for you" playlist to your library (example https://open.spotify.com/playlist/37i9dQZF1EId51c7hllKL5?si=d1a464c37ef04ed0)
  2. Run the command docker run --rm spotdl/spotify-downloader download all-user-playlists

Traceback

[07:57:19] DEBUG    MainThread - Downloader settings:          downloader.py:129
                    {'audio_providers': ['youtube-music'],
                    'lyrics_providers': ['genius', 'azlyrics',
                    'musixmatch'], 'genius_token':
                    'token',
                    'playlist_numbering': False,
                    'playlist_retain_track_cover': False,
                    'scan_for_songs': False, 'm3u': '{list}',
                    'output': '{artist}/{album}/{title}',
                    'm3u_output': '#EXTINF:{duration},
                    {artists} - {title}.{output-ext}',
                    'overwrite': 'skip', 'search_query': None,
                    'ffmpeg': 'ffmpeg', 'bitrate': None,
                    'ffmpeg_args': None, 'format': 'mp3',
                    'save_file': None, 'filter_results': True,
                    'album_type': None, 'threads': 1,
                    'cookie_file': '/config/yt-cookies.txt',
                    'restrict': None, 'print_errors': False,
                    'sponsor_block': False, 'preload': False,
                    'archive': None, 'load_config': True,
                    'log_level': 'DEBUG', 'simple_tui': False,
                    'fetch_albums': False, 'id3_separator':
                    '/', 'ytm_data': False, 'add_unavailable':
                    False, 'generate_lrc': False,
                    'force_update_metadata': False,
                    'only_verified_results': False,
                    'sync_without_deleting': False,
                    'max_filename_length': None,
                    'yt_dlp_args': None, 'detect_formats':
                    None, 'save_errors': None,
                    'ignore_albums': None, 'proxy': None,
                    'skip_explicit': False, 'log_format':
                    None, 'redownload': False,
                    'skip_album_art': False,
                    'create_skip_file': False,
                    'respect_skip_file': False,
                    'sync_remove_lrc': False}
[07:57:19] DEBUG    MainThread - FFmpeg path: ffmpeg           downloader.py:147
[07:57:19] DEBUG    MainThread - Found 0 known songs           downloader.py:182
[07:57:21] DEBUG    MainThread - Archive: 0 urls               downloader.py:237
[07:57:21] DEBUG    MainThread - Downloader initialized        downloader.py:239
[07:57:21] INFO     MainThread - Processing query: saved           search.py:140
[07:57:23] INFO     MainThread - Processing query:                 search.py:140
                    all-user-playlists
[07:57:23] DEBUG    MainThread - Took 2 seconds               entry_point.py:174

[07:57:23] ERROR    MainThread - An error occurred            entry_point.py:177
                    ╭── Traceback (most recent call last) ──╮
                    │ /spotdl/console/entry_point.py:160 in │
                    │ entry_point                           │
                    │                                       │
                    │   157 │   try:                        │
                    │   158 │   │   # Pick the operation to │
                    │   159 │   │   # based on the name and │
                    │ ❱ 160 │   │   OPERATIONS[arguments.op │
                    │   161 │   │   │   query=arguments.que │
                    │   162 │   │   │   downloader=download │
                    │   163 │   │   )                       │
                    │                                       │
                    │ /spotdl/console/download.py:25 in     │
                    │ download                              │
                    │                                       │
                    │   22 │   """                          │
                    │   23 │                                │
                    │   24 │   # Parse the query            │
                    │ ❱ 25 │   songs = get_simple_songs(    │
                    │   26 │   │   query,                   │
                    │   27 │   │   use_ytm_data=downloader. │
                    │   28 │   │   playlist_numbering=downl │
                    │                                       │
                    │ /spotdl/utils/search.py:280 in        │
                    │ get_simple_songs                      │
                    │                                       │
                    │   277 │   │   elif request == "saved" │
                    │   278 │   │   │   lists.append(Saved. │
                    │   279 │   │   elif request == "all-us │
                    │ ❱ 280 │   │   │   lists.extend(get_al │
                    │   281 │   │   elif request == "all-us │
                    │   282 │   │   │   lists.extend(get_us │
                    │   283 │   │   elif request == "all-us │
                    │                                       │
                    │ /spotdl/utils/search.py:426 in        │
                    │ get_all_user_playlists                │
                    │                                       │
                    │   423 │   return [                    │
                    │   424 │   │   Playlist.from_url(playl │
                    │   425 │   │   for playlist in user_pl │
                    │ ❱ 426 │   │   if playlist["owner"]["i │
                    │   427 │   ]                           │
                    │   428                                 │
                    │   429                                 │
                    ╰───────────────────────────────────────╯
                    TypeError: 'NoneType' object is not
                    subscriptable

Other details

No response

@rhyst rhyst added the Bug Unexpected problem or unintended behavior that needs to be fixed label Dec 3, 2024
@rhyst rhyst changed the title "Made for" playlists by Spotify cause error "Made for you" playlists by Spotify cause error Dec 3, 2024
@kamilkosek
Copy link

Hi , I think this wont work anymore with the default Spotify Web-API :
https://developer.spotify.com/blog/2024-11-27-changes-to-the-web-api

@rhyst
Copy link
Author

rhyst commented Dec 4, 2024

I think it should be filtered out? Seems like it just need to check if the playlist has an owner.

@kamilkosek
Copy link

You can’t even get the playlist details via api if it is an Algorithmic and Spotify-owned editorial playlists. You can filter it out with the id because they are all starting with the same 6 characters.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Unexpected problem or unintended behavior that needs to be fixed
Projects
None yet
Development

No branches or pull requests

2 participants