Skip to content

Releases: sigma67/ytmusicapi

v0.11.0

30 Nov 15:05
Compare
Choose a tag to compare

Features ✨

  • support continuations for search and search_uploads with new limit parameter (#95, thanks @natumbri )
  • add option to ignore spelling correction for search (#91, thanks @osum4est )
  • added sort order option to library functions get_library_songs, get_library_albums, get_library_artists, get_library_subscriptions, get_library_upload_songs, get_library_upload_albums, get_library_upload_artists (#102, thanks @ide-an )
  • new get_streaming_data call to get authenticated AAC stream data for subscribed users (#108, thanks @corrmaan )

Fixes 🐞

  • Small documentation fix for get_library_artists

v0.10.2

09 Nov 10:58
Compare
Choose a tag to compare

Features ✨

  • added isAvailable flag for songs in playlists (thanks @czifumasa )
  • added duration for uploaded items

Changes 🛠

  • The origin header is now used instead of x-origin. This should not break existing setups
  • 3PAPISID is now used instead of SAPISID for authorization, assuming that they are always equal. If not, please create an issue
  • added X-Goog-AuthUser to required headers (for users with multiple Google accounts)

Fixes 🐞

  • fixed uploads search (server-side changes)
  • updated default headers to fix get_artist_albums and get_user_playlists for non-authenticated users
  • remove_playlist_items: invalid items are now removed from the provided list
  • fixed possible key error in get_continuations if YouTube does not provide data as requested

v0.10.1

04 Oct 18:36
Compare
Choose a tag to compare

Changes ⚒

  • potentially breaking: changed get_library_albums returned artists key to dict with name/id

Fixes 🐞

  • update get_library_albums parsing to new YT Web display format - the values now correspond to the keys
  • get_playlist: parse setVideoId for unplayable items (allows removing unplayable items from playlists)

v0.10.0

17 Sep 12:36
Compare
Choose a tag to compare

Features ✨

  • validated requests are now available for get_library_songs (#52, thanks @czifumasa ). This opt-in behavior allows requests to be repeated up to 3 times since the API is often unreliable and provides less than the expected 25 items
  • search now supports an "uploads" filter to search your uploads
  • added support for Python's with statements (@alexmercerind). Usage:
from ytmusicapi import YTMusic

with YTMusic() as ytmusic:
    print(ytmusic.search('NoCopyrightSounds'))
  • (since 0.9.2) new method remove_history_items allows removing items from history
  • (since 0.9.2) add_playlist_items now supports source playlists, duplicate check

Fixes 🐞

  • get_library_songs, get_library_upload_songs, get_library_artists now return an empty list if the library is empty (instead of an error)
  • fixed an error that would occur when continuation_contents were missing from a continuation (sometimes occurs for get_library_songs)
  • unauthenticated requests to get_album now always contain all tracks (#75, thanks @alexmercerind )
  • using upload_song no longer pollutes the YTMusic instance headers - it should be fine now to reuse the instance after uploading a song (#79)
  • potentially breaking: fixed get_watch_playlist, which was broken by server-side lyrics update

v0.9.2

27 Aug 11:24
Compare
Choose a tag to compare

Features ✨

  • add_playlist_items now supports source playlists, duplicate check
  • new method remove_history_items: Remove items from your account's play history (must be retrieved with get_history before)

Fixes 🐞

  • Fix watch_playlist byline argument - broken by YouTube Music update (#54)
  • Fix get_song if release/production missing
  • Local setup fixed on MacOS (en_US.UTF-8)
  • lowercase is used when parsing headers for better compability with users copying headers from Chromium

v0.9.1

24 Jul 20:33
Compare
Choose a tag to compare

This release fixes a packaging issue with v0.9.0 and makes the package usable again. Below the changes for the 0.9.0 release.

Features ✨

  • get_watch_playlist, get_watch_playlist_shuffle: You can now get watch playlists. Watch playlists are the the playlists of suggested songs that appear in YouTube Music when you press play on a song
  • get_user, get_user_playlists: You can now get information about other users and their uploaded videos and playlists
  • Song metadata is now available via get_song
  • Additional languages are supported since v0.8.1 (fr,it,es,de,ja)

Changes ⚒

  • Potentially breaking: get_playlist now returns a dictionary instead of a string for the author key. It contain's the author's channel id along and the name it previously provided in separate keys id and name

Fixes 🐞

  • Many fixes for get_artist to work with more artists (thanks @grray )
    • Fix exception when album has no year (on artist page)
    • Fix exception when artist has no thumbnail
    • Fix for albums without publication year
    • Fix for artist page, if it has no buttons
    • Fixed: KeyError when artist doesn't have subscribers count
  • Fix continuations to always retrieve at least the specified limit, even if YTMusic returns less than per_page. The get_library_songs endpoint is currently unreliable on YouTube's end, so the behavior of continuations was changed to always fetch more than limit songs, even if the API returns less than expected
  • User-provided headers are no longer rejected. Previously only the cookie would be kept, which meant users using a non-primary Google Account with YouTube Music were unable to use the API (#46)

v0.9.0

24 Jul 13:37
Compare
Choose a tag to compare

superseded by 0.9.1 due to an issue with package publishing


v0.8.1

09 Jul 17:23
Compare
Choose a tag to compare

Some quality of life features and fixes for playlist interaction are featured in this minor release.

Features ✨

  • Proxy support (thanks @OzymandiasTheGreat )
  • ytmusicapi now support localization! You can get song data in one of 6 languages: en, de, fr, it, es, ja

Fixes 🐞

  • added subscription properties to get_artist (#35):
    subscribers, subscribed and channelId are now available
  • fixed bugs in playlist parsing (unavailable and uploaded songs) (#30)
  • fixed library album parsing
  • fixed get_artist when artist views are missing (#33)

v0.8.0

31 May 21:31
Compare
Choose a tag to compare

Features ✨

  • Support for getting private artists and albums: get_library_upload_artist, get_library_upload_album

  • Like status is now reported for tracks, when it is provided by YouTube Music. This includes the following methods:

    • get_history, get_library_songs, get_playlist
    • get_artist, get_album
    • get_library_upload_songs, get_library_upload_artist, get_library_upload_album
  • Thumbnails are now provided for tracks, albums and artists where available. This applies to the same methods as for like status above and additionally

    • search
    • get_library_upload_artists, get_library_upload_albums
  • collaborative playlists are now supported (thanks @nforro )

  • delete uploaded albums in addition to individual songs with delete_upload_entity

Changes ⚒

  • BREAKING delete_uploaded_song renamed to delete_upload_entity to reflect new behavior
  • get_uploaded_songs now returns ids for uploaded song artist/album, or None if not available
  • song and view counts are now returned as int (get_artist, get_playlist)
  • raw headers can be passed as a string with linebreaks to the setup function with the new optional parameter headers_raw

Fixes 🐞

  • Fix key error for get_artist caused by server-side removal of video title link
  • Fix get_artist for artists without description or with few songs
  • Fix get_playlist for playlists with more than 1,000 songs
  • Fixed some errors for unplayable playlist items

v0.7.1

18 May 16:21
Compare
Choose a tag to compare

Some quality of life features and fixes for playlist interaction are featured in this minor release.

Features ✨

  • create_playlist supports video_ids and source_playlist parameters
  • edit_playlist allows moving playlist items (thanks @nforro )
  • edit_playlist allows adding a playlist to another playlist

Fixes 🐞

  • create_playlist now returns the full response if there was an error (i.e. the quota may be exhausted, check #19)
  • get_playlist no longer returns deleted songs
  • get_playlist no longer throws an error if playlist has no description (thanks @hematogender )