In PySpotify, trying to remove a track from a playlist without knowing the position of the track in the playlist - spotify

I am trying to remove a track from a playlist and the information I know about the track is the spotify URI, the name of the track and the artist. However, I don't know the position of the track in the playlist.
The function to remove the track is the following:
spotify.Playlists.remove_tracks(tracks)
Parameters: tracks (list of int) – A list of track positions to be removed from the playlist
I haven't found any callbacks or class method that would provide this information except upon adding the track to the playlist, which may have happened in another session.
Has anyone done this successfully and if so, could you point me to how you were able to do it?
Thanks

I haven't used PySpotify myself, but looking at the docs, it says that a Playlist is an iterable sequence of Tracks. I think you should be able to iterate over the tracks and use str(spotify.Link.from_track(track)) to get the link for each track. Then you can easily enough look for the indices that match your track URI.

Related

Can I replace songs inside a playlist with a position index

I would like to know if there is any way to replace songs inside a playlist with a position index, just like the add tracks endpoint.
When I add "position" to my body parameters I get an error telling me to add "range_start" as if I was calling the reorder endpoint.
Looks like the Replace takes the same parameters for this as Reorder endpoint, although the documentation doesn't state this, the Web Console at Reorder or replace a Playlist's Tracks does - I didn't actually know this until I checked that myself, as had assumed only the entire playlist could be replaced

How to know if a Google Photos album has changed

I'm using Google Photos API to access albums.
Users can have in an album anything from a single photo to thousands of photos.
Is there a way to get something like an ETag to know if an album has changed since a previous known state?
Currently, the only way I could find is to iterate over all the images, and having to do that in 100 photos each time can take a lot of calls just to find out at the end that nothing has changed.
You want to know whether the album of Google Photos has been changed.
I could understand like above. Unfortunately, in the current stage, there are no metadata like the modified date when the contents in the album were changed. So in my case, I use the following workaround. Please think of this as just one of several workarounds.
Workaround:
If the number of photos in the album is changed, it can be known by the property of mediaItemsCount.
If the cover photo is changed, it can be known by the property of coverPhotoBaseUrl.
If several photos in a album are changed without increasing and decreasing the number of photos, unfortunately, in the current stage, I think that it is required to confirm the creationTime, filename and so on using the method of mediaItems.list.
By confirming from above in order, I can know about the change of the album.
References:
Method: albums.list
Method: albums.get
Method: mediaItems.list

Youtube search using the google API

I am using the google API and I wanted to do a youtube search.
I request a search with https://www.googleapis.com/youtube/v3/search?part=snippet&q=[word that I searched for]&key=my_keyto get the items array. I noticed though that the items array does not return the results in the same order as when you search youtube yourself.
Ex: if I search for the word 'bad' the first result in the items array is the "Young Lex ft AwKarin - BAD ( Official Music Video Clip )" while if I searched like a youtube user its the "Michael Jackson - Bad (Shortened Version)".
Perhaps they are not ordered and I have to order them using a property or something I have missed.
So my question is how can I make the items array return as the first item the first result that would have appeared in the youtube search.
edit: I have tried adding chart=MostPopular leaving to default videoCategoryId, but it still showed the same first result.
Well, it seems that the YouTube acts like that and it is a natural behavior of it. The only possible way that you can do to match the API and the YouTube site itself is by passing the same filter for it. Example is upload date and viewCount.
Here is the example request for viewCount.
https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.search.list?part=snippet&maxResults=10&order=viewCount&q=spider&_h=1&
and this is for the YouTube site
https://www.youtube.com/results?q=spider&sp=CAM%253D
Hope this slight information helps you.

libspotify API: track index

Is there any way to get the track index in an album? or given a track URI, is it possible to know its index or offset in the album (assume the track belongs to an album) without walking through the whole album?
Thanks.
Yes he is referring to sp_track_index, wich is only accessible through a album browse.
see libspotify documentation for sp_track_index here
What you need to do is something along the lines of:
call sp_albumbrowse_create for the album of sp_track that you have
wait for the callback fired when created/loaded
get sp_track_index from that track. Preferably you put the specific track in userdata to be passed on to the callback to be used with comparison.
Note: getting sp_track_index outside of an browse, will always return 0.
See Browse example here
You have to do an album browse for the target album. Once you've done that, you can get the track's index.

libspotify API: number of albums is different when browsing the same artist

I'm trying to use the existing example browse.c to get the number of albums of an artist by given an artist uri. The return value of sp_artistbrowse_num_albums(browse) is different every time when I run the command browse spotify:artist:3fMbdgg4jU18AjLCKBhRSm. Why?
Do I understand correctly that the callback artistbrowse_complete_cb is invoked once only when browsing is complete, but callback metadata_updated is invoked whenever metadata is updated?
Thanks.
Do I understand correctly that the callback artistbrowse_complete_cb is invoked once only when browsing is complete, but callback metadata_updated is invoked whenever metadata is updated?
That's correct. As I've said before, metadata_updated means "some metadata has been updated somewhere", and there are more specific callbacks like artistbrowse_complete_cb for more targeted operations like artist browsing.
As to why it keeps changing — it's a bit odd as the number of albums for an artist doesn't normally oscillate much, but albums can be added and removed on a daily basis. It's best to just accept what you're told and keep your UI up-to-date.

Resources