Skip to content

Releases: sigma67/ytmusicapi

v0.19.1

18 Aug 14:17
Compare
Choose a tag to compare

Fixes 🐞

  • get_album, get_library_upload_album: fixed crash caused by audioPlaylistId returned in different JSON keys to different users

v0.19.0

04 Aug 14:53
Compare
Choose a tag to compare

Features ✨

  • search: Support the new library search that was rolled out globally this week. For this purpose, a new scope parameter was introduced for search. It can take uploads or library values depending on the alternative search scope intended. Consequentially, uploads is no longer passed using the filter argument. The filter argument can be used without a scope (global YouTube Music catalogue search, as previously), or with the new library search. All existing filters work with the library search except the videos filter, as you cannot add videos to your library (only to liked playlist)
  • get_charts: get latest chart data from YouTube Music. This further contributes to ytmusicapi's implementation of the Explore tab in YouTube Music, after the moods and genres implementation in 0.18.0. The function retrieves all data shown on the /charts page and takes a country code as parameter, or ZZ for global charts.

Changes ⚒

  • BREAKING: to improve consistency across the project, the key artists is now used whenever a list of artists with (name,id) dictionary is provided (instead of artist). This affects get_album, get_library_upload_songs, get_library_upload_album,get_library_upload_artist. See #215

Fixes 🐞

  • get_library_upload_albums: a key in the data structure was changed in a recent YouTube update, the function should now work again without issue

v0.18.0

05 Jul 08:25
Compare
Choose a tag to compare

Features ✨

Moods & genres feature contributed by @impliedchaos (#205 , #210 ). See the two new methods below.

  • get_mood_categories: Fetch “Moods & Genres” categories from YouTube Music. Results are clustered by category. Equivalent to what's shown here: https://music.youtube.com/moods_and_genres
  • get_mood_playlists: Fetch the playlists offered for a specific mood/genre returned by get_mood_categories.

Fixes 🐞

  • updated setup behavior to not include bad headers that might corrupt requests (#199)

v0.17.3

23 May 21:54
Compare
Choose a tag to compare

Fixes 🐞

  • added get_signatureTimestamp: can be used to retrieve the current signatureTimestamp for correct streaming links from get_song. (thanks @impliedchaos )

v0.17.2

22 May 09:22
Compare
Choose a tag to compare

Fixes 🐞

  • get_song: added optional signatureTimestamp parameter. This parameter is needed to get correct streaming links in the streamingData key. The correct value of this parameter changes daily. If not provided, a default value is used, which is usually correct but could be wrong for some hours late in the day. Therefore, if you notice issues with the streaming links, retrieve the signatureTimestamp from YouTube and provide it as a parameter. For more information on how to retrieve it, see here: #196 (comment)

Thanks to @KoljaWindeler, @impliedchaos and @Simo for helping debug this issue

v0.17.1

19 May 19:01
Compare
Choose a tag to compare

Fixes 🐞

  • get_streaming_data was merged into get_song (no longer available)
  • get_song now uses a different YouTube Music endpoint due to a server side change. As a result, different data is returned. Please check the documentation here

v0.17.0

17 May 13:00
Compare
Choose a tag to compare

Features ✨

  • get_playlist_suggestions: for playlists with less than 100 items, YouTube Music suggests additional songs to add to the playlist. You can now retrieve these suggestions with ytmusicapi by first calling get_playlist, and passing the suggestions_token to get_playlist_suggestions
  • search: now supports the recently introduced featured_playlists, community_playlists filters

Changes ⚒

  • POSSIBLY BREAKING setup procedure has changed. Instead of taking only one or two headers from the user input, now most of the user headers are used for actual requests. This should hopefully make requests match browser requests more closely
  • init: x-goog-visitor-id header is now retrieved dynamically on instantiation if it is not provided in the authentication headers. Therefore, to avoid an extra request on initialization, you should include the x-goog-visitor-id in your headers_auth.json. The purpose of this change was that previously a fixed id was used for the entire project, which would cause errors when that id was no longer recognized as valid by Google

Fixes 🐞

  • get_artist, get_user: fail silently if playlistId or thumbnails are missing for video
  • get_library_artists, get_library_subscriptions: fix error if artist thumbnail is missing
  • get_watch_playlist: some tracks were wrapped and therefore missing in the returned results. this is now fixed
  • search: make uploads search more error proof (#193)
  • search: fix missing duration for unavailable videos

v0.16.0

22 Apr 11:55
Compare
Choose a tag to compare

Features ✨

  • get_album_browse_id: get an album's browseId based on it's audioPlaylistId (OLAK...). This is based on the redirect that happens when you open a link in YouTube Music with an audioPlaylistId

Changes ⚒

  • BREAKING get_album endpoint has changed for some users due to an ongoing YouTube beta (#173). With this release, get_album will always work, but the format of the data might look different from the documentation if you have the update. Please check if this applies to your account. The documentation will be updated for the new format once the beta is released to all users. For reference, an example of the new format is provided below. A big thanks to @jake-g for providing access to his account to test this update ahead of time.

Fixes 🐞

  • search: fixed a crash if the playlist author was missing for a playlist
  • search: for songs with artists without browseId, these artists are now also returned in the result. This also applies to get_watch_playlist
  • get_artist_albums: fixed an exception for singles missing a release year (#188, thanks @grray )
  • get_artist: fix crash if related artist is missing subscriber number
  • fixed feedbackTokens, which were incorrectly None when a song was already in the library. Now the correct tokens are returned regardless of the current library status

New get_album format

{
  "title": "Revival",
  "type": "Album",
  "thumbnails": [
    {
      "url": "https://lh3.googleusercontent.com/b-euORTq-_MSzc3SyI0QOjLqnCBJbWuMmH1YlyJKAVvJfOpPqv3bFH-KSDoQwV9e8Xey1X2NRo9xZ2U=w60-h60-l90-rj",
      "width": 60,
      "height": 60
    }
  ],
  "description": "Revival is the ninth studio ...",
  "artists": [
    {
      "name": "Eminem",
      "id": "UCedvOgsKFzcK3hA5taf3KoQ"
    }
  ],
  "year": "2017",
  "trackCount": 19,
  "duration": "1 hour, 17 minutes",
  "audioPlaylistId": "OLAK5uy_nMr9h2VlS-2PULNz3M3XVXQj_P3C2bqaY",
  "tracks": [
    {
      "videoId": "iKLU7z_xdYQ",
      "title": "Walk On Water (feat. Beyoncé)",
      "artists": [
        {
          "name": "Eminem",
          "id": "UCedvOgsKFzcK3hA5taf3KoQ"
        }
      ],
      "album": null,
      "likeStatus": "INDIFFERENT",
      "thumbnails": null,
      "isAvailable": true,
      "isExplicit": true,
      "duration": "5:03",
      "feedbackTokens": {
        "add": "AB9zfpJC...",
        "remove": "AB9zfpJT..."
      }
    }
  ]
}

0.15.1

07 Apr 11:39
Compare
Choose a tag to compare

Fixes 🐞

  • search: fixed a crash if a playlist is missing the author

v0.15.0

25 Mar 12:33
Compare
Choose a tag to compare

Features ✨

  • added related artist section to get_artist (thanks @mikefreemanwd )

Changes ⚒

  • get_watch_playlist: also accepts playlist browse ids as parameter (starting with "VLPL")
  • BREAKING get_watch_playlist: associated radio playlist is now at the top level of the dictionary as it is the same for every video in the list
  • get_artist: ValueError is now returned if the provided channel Id has no music content (thanks @mikefreemanwd )

Note: get_album may be broken right now for some users due to ongoing testing of a data structure on YouTube's side. A fix is currently being worked on and will be release when the change is live for all users (#173).