public IActionResult Get() { Program.EnsureTokenUpToDate(); var cache = Program.GetCache(); if (cache == null || cache.Tracks == null || cache.Tracks.Count == 0) { var config = new Config().Load(); WebClient client = new WebClient(); client.Headers.Clear(); client.Headers[HttpRequestHeader.Authorization] = $"Bearer {config.AccessToken}"; var recentstr = client.DownloadString("https://api.spotify.com/v1/me/player/recently-played?limit=50"); var recentType = new { items = new[] { new { track = new { artists = new[] { new { name = "string" } }, name = "string" } } } }; var recent = JsonConvert.DeserializeAnonymousType(recentstr, recentType); History history = new History(); foreach (var track in recent.items) { if (!history.Tracks.Any() || !history.Tracks.Last().Name.Equals(track.track.name) || !history.Tracks.Last().Artists.Contains(track.track.artists[0].name)) { history.Tracks.Add(new Track { Name = track.track.name, Artists = track.track.artists.Select(a => a.name).ToList(), YTSongLink = YouTube.GetFirstSongLink($"{track.track.name} - {track.track.artists[0].name}") }); } } var firstcurrstr = client.DownloadString("https://api.spotify.com/v1/me/player/currently-playing"); var currType = new { progress_ms = (ulong)0, item = new { artists = new[] { new { name = "string" } }, name = "string" } }; var firstcurr = JsonConvert.DeserializeAnonymousType(firstcurrstr, currType); System.Threading.Thread.Sleep(5); var secondcurrstr = client.DownloadString("https://api.spotify.com/v1/me/player/currently-playing"); var secondcurr = JsonConvert.DeserializeAnonymousType(secondcurrstr, currType); if (firstcurr != null && firstcurr.item != null && secondcurr != null && secondcurr.item != null) { history.CurrentTrack = new Track { Name = secondcurr.item.name, Artists = secondcurr.item.artists.Select(a => a.name).ToList(), IsPlaying = (firstcurr.progress_ms != secondcurr.progress_ms), YTSongLink = YouTube.GetFirstSongLink($"{secondcurr.item.name} - {secondcurr.item.artists[0].name}") }; } else { history.CurrentTrack = null; } history.Tracks = history.Tracks.Take(20).ToList(); Program.SetCache(history); return(new JsonResult(history)); } else { return(new JsonResult(cache)); } }