Esempio n. 1
0
        public async Task <ActionResult <SearchItem> > GeneratePlaylist(string keyword = "")
        {
            //must be a user access token
            var accessToken = ""; //await GetAccessToken();

            SpotifyWebAPI api = new SpotifyWebAPI
            {
                AccessToken = accessToken,
                TokenType   = "Bearer"
            };

            var randomOffset = random.Next(0, 1000);
            var randomSearch = keyword == "" ? GetRandomSearch() : keyword;

            TuneableTrack tar = new TuneableTrack
            {
                Popularity = random.NextDouble() >= 0.5 ? 80 : 100
            };

            var             genre = GetGenreSeed(keyword);
            Recommendations rec   = api.GetRecommendations(genreSeed: genre, target: tar, market: random.NextDouble() >= 0.5 ? "GB" : "US");

            var newPlaylist = api.CreatePlaylist("rsacr1m9ge9ur5tdceead2ziy", "Wholeschool Playlist " + _nameGenerator.Generate(), true, false, $"Auto generated playlist for {keyword} on {DateTime.Now.ToShortDateString()}");

            ErrorResponse response = api.ReplacePlaylistTracks(newPlaylist.Id, rec.Tracks.Select(s => s.Uri).ToList());

            if (!response.HasError())
            {
                Console.WriteLine("success");
            }

            return(Ok(new { newPlaylist.Name, newPlaylist.Uri, newPlaylist.Href, newPlaylist.Id }));
        }
        public string GetRecommendations(List <string> artistSeed = null, List <string> genreSeed = null,
                                         TuneableTrack target     = null, TuneableTrack min       = null, TuneableTrack max = null, int limit = 20, string market = "")
        {
            limit = Math.Min(100, limit);
            StringBuilder builder = new StringBuilder($"{spotifyAPIBase}/recommendations");

            builder.Append("?limit=" + limit);
            if (artistSeed?.Count > 0)
            {
                builder.Append("&seed_artists=" + string.Join(",", artistSeed));
            }
            if (genreSeed?.Count > 0)
            {
                builder.Append("&seed_genres=" + string.Join(",", genreSeed));
            }
            if (target != null)
            {
                builder.Append(target.BuildUrl("target"));
            }
            if (min != null)
            {
                builder.Append(min.BuildUrl("min"));
            }
            if (max != null)
            {
                builder.Append(max.BuildUrl("max"));
            }
            if (!string.IsNullOrEmpty(market))
            {
                builder.Append("&market=" + market);
            }
            return(builder.ToString());
        }
Esempio n. 3
0
        public JObject GetRecommendations(List <string> artistSeed = null, List <string> genreSeed = null,
                                          TuneableTrack target     = null, TuneableTrack min       = null, TuneableTrack max = null, int limit = 2, string market = "")
        {
            var token = GetToken();

            if (token == null || string.IsNullOrEmpty(token))
            {
                throw new InvalidOperationException("Invalid or missing access token!");
            }

            return(_client.GetData(_urlBuilder.GetRecommendations(artistSeed, genreSeed, target, min, max, limit, market), token));
        }
        public SeveralTracks GetRecommendations(
            List <string> genres      = null,
            List <string> artists     = null,
            List <string> tracks      = null,
            TuneableTrack targetTrack = null)
        {
            var recommendations = _webApi.GetRecommendations(
                artistSeed: artists,
                genreSeed: genres,
                trackSeed: tracks,
                target: targetTrack,
                limit: 25,
                market: "SE");

            var trackIdList = recommendations.Tracks.Select(t => t.Id).ToList();

            return(_webApi.GetSeveralTracks(trackIdList));
        }
Esempio n. 5
0
        // Gets recommendations from spotify.
        private Recommendations GenerateRecommendations()
        {
            List <string> genreSeed = new List <string>
            {
                "rock",
                "pop"
            };

            TuneableTrack minValues = new TuneableTrack
            {
                Popularity = 70
            };

            TuneableTrack maxValues = new TuneableTrack
            {
                Popularity = 100
            };

            return(SpotifyHelper.Instance.Api.GetRecommendations(genreSeed: genreSeed, limit: 1, market: "SE", min: minValues, max: maxValues));
        }
Esempio n. 6
0
 /// <summary>
 /// Set Parameter
 /// </summary>
 /// <param name="parameters">Parameters</param>
 /// <param name="prefix">Prefix</param>
 /// <param name="tuneableTrack">Tuneable Track Object</param>
 public static void SetParameter(
     this TuneableTrack tuneableTrack,
     Dictionary <string, string> parameters,
     string prefix)
 {
     if (tuneableTrack != null)
     {
         foreach (PropertyInfo info in typeof(TuneableTrack).GetProperties())
         {
             if (info.CanRead)
             {
                 object value = info.GetValue(tuneableTrack, null);
                 if (value != null)
                 {
                     parameters.Add($"{prefix}_{info.GetDescription()}",
                                    value.ToString());
                 }
             }
         }
     }
 }
Esempio n. 7
0
        public ActionResult Tracks(FormModel model)
        {
            var spotifyApi  = new SpotifyIntegration.SpotifyIntegration();
            var tracksModel = new TracksModel();

            if (model.Name != null && model.Name.ToLower() == "tom araya")
            {
                tracksModel.TrackList = spotifyApi.GetSingleTrack("4Yx9Tw9dTgQ8eGCq3PRDyn");
            }
            else
            {
                var targetTrack = new TuneableTrack()
                {
                    Valence      = model.Valence / 100,
                    Danceability = model.FeelLikeDancing / 100,
                };

                if (model.SelectedGenres.Length + model.SelectedArtists.Length + model.SelectedTracks.Length > 5)
                {
                    model.Genres       = FormModelListItemHelper.GetGenres();
                    model.Tracks       = FormModelListItemHelper.GetTracks();
                    model.Artists      = FormModelListItemHelper.GetArtists();
                    model.ErrorMessage =
                        "Whoops, according to Spotify you can only select a total of 5 tracks, genres and artists for recommendations. Deselect a few and try again and sorry for the inconvenience.";
                    return(View("~/Views/Genre/Genre.cshtml", model)); //RedirectToRoute("Genre", model);
                }

                tracksModel.TrackList = spotifyApi.GetRecommendations(
                    artists: model.SelectedArtists.ToList(),
                    tracks: model.SelectedTracks.ToList(),
                    genres: model.SelectedGenres.ToList(),
                    targetTrack: targetTrack);
            }

            return(View(tracksModel));
        }