public void GetDynamicPlaylist_WhereMoodAndStyle_CanSteerDynamicPlaylistByMood(string title, string styles, string moods) { //arrange TermList styleTerms = new TermList(); foreach (string s in styles.Split(',')) { styleTerms.Add(s); } TermList moodTerms = new TermList(); foreach (string s in moods.Split(',')) { moodTerms.Add(s); } DynamicArgument dynamicArgument = new DynamicArgument { Adventurousness = 0.4, Type = "artist-description", Variety = 0.4 /* variety of artists */ }; dynamicArgument.Styles.AddRange(styleTerms); dynamicArgument.Moods.AddRange(moodTerms); //act using (EchoNestSession session = new EchoNestSession(ConfigurationManager.AppSettings.Get("echoNestApiKey"))) { //act DynamicPlaylistResponse searchResponse = session.Query <Dynamic>().Execute(dynamicArgument); //assert Assert.IsNotNull(searchResponse); Assert.IsNotNull(searchResponse.Songs); Assert.IsTrue(searchResponse.Songs.Any()); // arrange next part of test string sessionId = searchResponse.SessionId; // output Console.WriteLine("Dynamic Playlist Session Id: {0}", sessionId); Console.WriteLine(); Console.WriteLine("Songs for : {0}", title); foreach (SongBucketItem song in searchResponse.Songs) { Console.WriteLine("\t{0} ({1})", song.Title, song.ArtistName); } Console.WriteLine(); Console.WriteLine("Steering Playlist by mood = -happy"); Console.WriteLine(); dynamicArgument = new DynamicArgument { SteerMood = "-happy", SessionId = sessionId }; searchResponse = session.Query <Dynamic>().Execute(dynamicArgument); Console.WriteLine("Next song in dynamic playlist for : {0}", title); foreach (SongBucketItem song in searchResponse.Songs) { Console.WriteLine("\t{0} ({1})", song.Title, song.ArtistName); } Console.WriteLine(); Console.WriteLine("Steering Playlist by tempo = +10% (tempo^1.1)"); Console.WriteLine(); dynamicArgument = new DynamicArgument { Steer = "tempo^1.1", SessionId = sessionId }; searchResponse = session.Query <Dynamic>().Execute(dynamicArgument); Console.WriteLine("Next song in dynamic playlist for : {0}", title); foreach (SongBucketItem song in searchResponse.Songs) { Console.WriteLine("\t{0} ({1})", song.Title, song.ArtistName); } Console.WriteLine(); } }
public bool MoveNext(CancellationToken token) { if (string.IsNullOrEmpty(_sessionId)) { using (var session = new EchoNestSession(EchoNestModule.ApiKey)) { var argument = new DynamicArgument(); argument.Type = "artist-radio"; argument.Artist.Add(_initialArtistName); argument.Dmca = true; var response = session.Query <Dynamic>().Execute(argument); if (response.Status.Code == ResponseCode.Success) { _sessionId = response.SessionId; var song = response .Songs .FirstOrDefault(s => s.ArtistName.Equals(_initialArtistName, StringComparison.InvariantCultureIgnoreCase)); if (song == null) { song = response.Songs.FirstOrDefault(); } if (song != null) { if (token.IsCancellationRequested) { token.ThrowIfCancellationRequested(); } var queryResult = _radio.GetTracksByName(_initialArtistName + " " + song.Title); if (!queryResult.Any()) { queryResult = _radio.GetTracksByName(_initialArtistName); } _currentTracks = queryResult .Where(s => s.Artist.Equals(_initialArtistName, StringComparison.InvariantCultureIgnoreCase)) .Take(1) .ToArray(); if (!_currentTracks.Any()) { _toastService.Show("Unable to find any tracks matching the query"); return(false); } return(true); } } else { _toastService.Show(response.Status.Message); } } } else { using (var session = new EchoNestSession(EchoNestModule.ApiKey)) { if (token.IsCancellationRequested) { token.ThrowIfCancellationRequested(); } var argument = new DynamicArgument { SessionId = _sessionId }; if (_likesCurrentTrack.HasValue) { if (!_likesCurrentTrack.Value) { argument.Ban = "artist"; } } if (_currentTrackRating.HasValue) { argument.Rating = Convert.ToInt32(_currentTrackRating.GetValueOrDefault(1)); } var response = session.Query <Dynamic>().Execute(argument); _likesCurrentTrack = null; _currentTrackRating = null; if (response.Status.Code == ResponseCode.Success) { var song = response.Songs.FirstOrDefault(); if (song != null) { var queryResult = _radio.GetTracksByName(song.ArtistName + " " + song.Title); if (!queryResult.Any()) { queryResult = _radio.GetTracksByName(song.ArtistName); } _currentTracks = queryResult .Where(s => s.Artist.Equals(song.ArtistName, StringComparison.InvariantCultureIgnoreCase)) .Take(1) .ToArray(); if (!_currentTracks.Any()) { _toastService.Show("Unable to find any tracks matching the query"); if (response.Songs.Any()) { return(MoveNext(token)); } return(false); } return(true); } } else { _toastService.Show(response.Status.Message); } } } return(false); }