mirror of
https://github.com/sigma67/ytmusicapi.git
synced 2026-04-25 15:26:01 +03:00
[GH-ISSUE #215] Improve consistency: artist and duration fields #168
Labels
No labels
a/b
bug
documentation
enhancement
good first issue
help wanted
invalid
pull-request
question
wontfix
yt-error
yt-update
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/ytmusicapi#168
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @natumbri on GitHub (Jul 20, 2021).
Original GitHub issue: https://github.com/sigma67/ytmusicapi/issues/215
Hi,
Is there a method in the ytmusicapi equivalent to the
Search: list (related videos)in the YouTube Data API (https://developers.google.com/youtube/v3/docs/search/list):I noticed that
YTMusic.get_artistreturns related artists, which is close but not for tracks. AreYTMusic.get_watch_playlistandYTMusic.get_watch_playlist_shufflewhat I'm looking for? I'm going to try it, but the answer wasn't clear for me from the ReferenceCheers,
Nik
@sigma67 commented on GitHub (Jul 20, 2021):
Yes I think
get_watch_playlistis what you're looking for, although the matching algorithm is probably quite different from the YouTube Data API. It gets a list of personalized songs/music videos similar to the one you input. The YouTube Data API is much more generic and will also work with non-music videos.@natumbri commented on GitHub (Jul 20, 2021):
Thanks; works perfectly (authenticated and not).
Any particular reason it returns
{"tracks: [{..., "length": "4:47",...], ...}whenYTMusic.get_playlistreturns{..., "tracks: [{..., "duration": "4:47",...], ...}?@sigma67 commented on GitHub (Jul 20, 2021):
It's a different parser. Usually the keys are derived from the JSON returned by the YouTube Music API. For the watch endpoint the key is
lengthText. For the get_playlist I probably used duration because it's common in places likeget_album. Sorry that it's not really consistent, but they're semantically equivalent. Just the result of a growing project combined with inconsistently formatted data returned from the server.@natumbri commented on GitHub (Jul 20, 2021):
Yeah, I know how annoying it is to try to consistently decode the stuff from YouTube. Any plans to go back and make your API more consistent?
For example
I'm sure there are others.
No biggie, it just seems that greater consistency would make using your API easier.
Anyway, thanks for the package - I'm glad not to be scraping and parsing it myself anymore!
Cheers
Nik
@sigma67 commented on GitHub (Jul 20, 2021):
Thanks for the feedback, it's probably a good idea to do that. Of course it would be at the expense of backwards compatibility.
Regarding your bullets
get_song, where the reponse is mostly unparsed due to its complexity. The duration could probably be formatted as some kind of time object, but formatted durations (like 3m20s) are localization dependent and add a whole new layer of complexityartists, do you recall where you sawartist? I don't think byline is a thing anymore, but maybe I'm missing something@natumbri commented on GitHub (Jul 21, 2021):
get_albumreturnsartistas a list of dicts.get_watch_playlistreturnsbyline.I don't think I've checked, but the Reference suggests that
get_library_albumsreturnsartistsbut as a dict (not a list of dicts, like elsewhere).I agree there's quite a bit of complexity around times! Rather than a time object, I'd suggest something like seconds or ms, as an integer - the most basic representation of the information. Let people turn it into whatever sort of object they like once the API has returned the value. But that's just a personal preference.
You could probably avoid breaking backwards compatibility (mostly) by just picking a key that you like (say
lengthMs) and adding that to every dict that returns a duration (without removing the raw value currently returned by the parser). But then again, breaking backwards compatibility might not be a bad thing - forces people to update their code.@sigma67 commented on GitHub (Aug 3, 2021):
Some progress regarding the
artistskey in86790c07e2@natumbri commented on GitHub (Aug 3, 2021):
Looking good - it's very fiddly work, and breaks things, but I for one will appreciate the simplification it allows downstream.
Cheers
Nik