How to get a song recommendations for a playlist on Spotify APi - spotify

I am trying to get Spotify song recommendations through the Spotify API (basically, the list of recommended songs for a given playlist on the Spotify app). There is a get recommendations endpoint, but not with a playlist as a parameter: https://developer.spotify.com/documentation/web-api/reference/browse/get-recommendations/.

The recommendations endpoint can only be built off of songs, artists, or genres - not playlists. You can pass the data through as seed_tracks, seed_genres, or seed_artists. However, as a note, there can only be up to 5 seed values passed into the recommendations input (5 total, not 5 of each).
If you wanted to, you could try looping through your playlist in chunks of 5 and sending the track Spotify IDs to the recommendations endpoint, retrieving the result, and append the result to some array. This may be a bit "hacky" as the "recommendations" will only be based on the 5 songs passed through, not the whole playlist. Also, there may be a limit on Spotify's end.

Related

How to find data on the most-streamed songs of all time on Spotify, globally?

I'm working on a projected with Spotify data and I need a list of the most-streamed songs of all time on Spotify. (Not my own listening history, but the global stream counts) This information should be out there, because songs on Spotify publicly display their stream count, but there's no actual list of the most-streamed songs beyond the first 100 or 200. I want to be able to get as many songs as I want, or at least 1000 or 2000. I'm using python for this but could use something else if necessary. I've found SpotiPy, but it doesn't seem to have this capability as far as I can tell.
I looked for answers online but found nothing. And I've emailed Spotify and even gotten responses, but their responses weren't at all helpful. They either didn't understand my question or redirected me to their research and developer sites which don't see to have what I want.

Getting total number of streams and track release date through Spotify API

I'm trying to get a large list of songs released in year X, together with their number of plays/streams.
I've been using Spotify API, and I have a number of highly popular songs. Now, for my purposes, I also need a list of non-popular songs (low play counts). I am wondering if there is any strategy to get a list of songs (maybe last played ones?), and extract their release year and number of total plays?
I've been going through the API documentation and I can only find 'popularity', which seems different from total number of plays. Secondly, I haven't found a way to get a list of last played songs yet. Should I be considering another type of strategy?
I know that you can get a list of recently played songs of all users in certain user groups in last.fm. Perhaps there is something similar in Spotify API?
Unfortunately, there is no way to get play counts through the Spotify API, only the Popularity metric.

Is there a way to pull trending instagram hashtags in real-time?

I'm working on an app that would automatically generate instagram hashtags for the user, allowing them to snap a photo, get auto hashtags, and post right away. Is there a way I can pull the most trending instagram hashtags in real-time and have the app generate them for every user at the time they're posting?
No, there is no direct way to get this information from the API. Though you might be able to get clever with the endpoints that are there and figure out what's trending that way.
You could query a user using the users endpoint, search through all the hashtags they've used on the last 100 or so media captions, and then infer "trendy" hashtags that way.
You could query a hashtag using the hashtags endpoint, search through all the hashtags used on the last 100 or so media captions, and then infer "trendy" hashtags that way.
One thing that I do in my app (https://app.promoplanner.net) is I look at the frequency of posts for a given hashtag (i.e. what's the average time between each post for a given hashtag). Small time deltas tell me that a hashtag is popular.
Either way, you need to start your query with either a user or a hashtag, you can't as a broad question like what's trending. You can only ask questions like "what's trending relative to #kesha" or "what's trending relative to #urbanfarming"

Create top lists using Spotify Web Api

Anyone have a good ide how I can create music top lists using Spotify or echonest Web API?
For example create a top 25 list of music from the 80's of the genre rock in Sweden. Or the most streamed tracks on the global market of genre pop for the year 2010.
Using the Search endpoint, you can retrieve tracks by genre within some year interval. It also accepts a market parameter, but the order is not guaranteed to be by popularity though.
https://api.spotify.com/v1/search?type=track&q=genre:pop+year:1980-2020&market=SE
This is probably as close as you can get using the Web API as it is today.
There are playlists that are updated with the most popular tracks in most (if not all) markets, although not by genre. For Sweden's Top 50, see http://open.spotify.com/user/spotify/playlist/7jmQBEvJyGHPqKEl5UcEe9.

Spotify Metadata API: Search By Artist

The original plan was to write this as a blog post, entitled "Inefficiencies in the Spotify Metadata API : Or, How the Jackson 5 killed my Browser", but changed my mind at the last minute as I have a habit of missing the obvious in documentation,perhaps an undocumented feature might exist which I have missed, or someone else has solved the issue - so hence this question has a certain blog-post tone about it!
I am developing a small web-app, mostly for a small group of people, which will allow anyone to update a Spotify playlist. As not everyone has Spotify (though I don't know why!), the page will update a database with songs, as App running in Spotify on my laptop polls the database for updates, then using the Spotify Apps API, the playlist is updated, and anyone subscribing to the playlist gets the update. This is ok, though I would like to use push rather than poll, but that's a topic for another day.
I searched around for a Javascript library to use with the Spotify Metadata API, and found one (https://github.com/palmerj3/SpotifyJS) though it was basically a wrapper and still required you to parse the JSON yourself. Thinking I could go one better and put some basic parsing in for the most common fields (title, artist, album, Spotify URI) I started working on my own library/JQuery plugin.
Search by track is not a problem, it's a single call to the spotify metadata API, the results are easily parsed, matching the returned artist with the requested artist (if present) makes for an easy search by title/artist.
Search by Artist (obtain a list of all songs by a particular artist) though, appears to be a pain-in-the-**! As best as I can tell from the docs, this is the process.
Search for the artist: this will return a list of artists which match the query
For each artist, lookup their albums: this will return a list albums
Lookup each album and retrieve a track list
Compare the artist for each track with the search artist, if it matches output
The first step will return a small list of artist matches, Foo Fighters has 2, Silverchair 1, and The Jackson 5 has 4. This small list turns into a larger number of album matches - from memory Foo Fighters returned 112, which then turns into even larger number of track lists. From a Javascript/JQuery perspective, this leads to daisy-chained AJAX request, for each step, and at each step massive numbers of, nearly concurrent GET requests against the Spotify servers.
The initial version I wrote cheated and used synchronous AJAX, and worked ok, as each request must complete before the next would start, though, this would lock the browser up for some time, and removed the possibility of using feedback to the user that the system was running. I then switched to asynchronous requests and all hell broke loose! You immediately hit issues with rate limiting on the Spotify end, which returns resoponses with 502 bad gateway (not listed in the spotify docs as a status by the way), or 503 - both of which JQuery interpreted as status code 0 - which was interesting, requiring debugging in Firebug. I throttled the requests down on the client side, I found that 1 every second was about right, to avoid rate limiting and ensure I got a response containing data each time, however, this then causes massive lock ups in the browser as it had upwards of 30 or 40 GET requests in parallel, all returning pretty much at the same time (though some requests responded after 15+ seconds!) and then parsing all the JSON responses.
I looked into alleviating the load by using a server-side approach, though this has downsides as well:
1. you don't avoid the basic issue in that the API can not handle the task in an efficient manner
2. for a busy site, the bandwidth usage will be against the server, which will also present a single IP, for multiple users you will soon hit the rate limit due to parallel users
The server side does offer caching though which could be beneficial, to this end I found a PHP Library - metatune (https://github.com/mikaelbr/metatune) advertised as the "The ultimate PHP Wrapper for the Spotify Metadata API", but unfortunately only offers the same basic lookup/search as the Spotify Metadata API - i.e.: no listing of all songs by an artist.
Thus, I have now disabled searching by artist, until I find a suitable solution.
Assuming I have not missed anything, it seems, to me at least, to not be an efficient API design, as it encourages you to make large numbers of requests to the Spotify servers, which is not good for me as a client, and not good for Spotify as a server. I can't help but think that if there was a request such as:
ws.spotify.com/search/1/artist.json?q=foo+fighters&extras=tracks
then the issues discussed here would be alleviated, a single request would cover what requires 3 sets of multiple requests currently; rate limiting wouldn't be as big an issue; the overheads to process the data on the client are greatly reduced; the overheads for Spotify to handle would be reduced and the entire service would be more efficient. The fact that the request would return a very large data set is not an issue, as the API already splits data into "pages".
So, my questions to the crowd:
1. Have I missed something obvious in the documentation, or is there a secret request?
2. In the absence of an API request, does anyone have a suggestion on how to make my system more efficient?
3. Has anyone solved this issue before?
Thanks for reading! Took a long time to get to the questions, but I felt it necessary to provide as much reasoning to find the best solution, and also, it illustrates the deficiency in the API, which I hope someone from Spotify will notice!
Finally as an aside, projects like this make me feel like we've swapped Flash for Javascript but the performance is still as bad! Anyone else feel the same?
Cheers!
sockThief
Unless I'm missing something, does this do what you want?
http://ws.spotify.com/search/1/track.json?q=artist:foo+fighters
The artist: prefix tells the search service to only match on artist. You can read more about the advanced search syntax (which also works in the client) here.

Resources