static MockInfoProvider() { string path = Path.Combine("Data", "NewBeatSaver", "List", "Latest", "Latest_0.json"); string pageText = File.ReadAllText(path); Uri? uri = null; Songs = BeatSaverReader.ParseSongsFromPage(pageText, uri, true).ToArray(); }
protected static async Task <ScrapedSong?> GetSongFromUriAsync(Uri uri, CancellationToken cancellationToken) { IWebResponseMessage?response = null; try { response = await WebUtils.GetBeatSaverAsync(uri, cancellationToken).ConfigureAwait(false); response.EnsureSuccessStatusCode(); if (response.Content == null) { return(null); } string pageText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); return(BeatSaverReader.ParseSongsFromPage(pageText, uri, true).FirstOrDefault()); } catch (WebClientException ex) { string errorText = string.Empty; if (ex.Response != null) { if (ex.Response.StatusCode == 404) { return(null); } errorText = ex.Response.StatusCode switch { 408 => "Timeout", _ => "Site Error", }; } string message = $"Exception getting page: '{uri}'"; throw new SongInfoProviderException(message, ex); } catch (OperationCanceledException) { throw; } catch (AggregateException ae) { string message = $"Exception while trying to get details from '{uri}'"; throw new OperationCanceledException(message, ae); } catch (Exception ex) { string message = $"Exception while trying to get details from '{uri}'"; throw new SongInfoProviderException(message, ex); } finally { response?.Dispose(); } }
public void AdvancedSearch() { var url = @"https://beatsaver.com/api/search/advanced?q=uploaded:[2019-01-01 TO 2019-01-02] AND metadata.difficulties.easy:true AND metadata.songName:*e*"; var response = WebUtils.GetBeatSaverAsync(new Uri(url), CancellationToken.None).Result; var songs = BeatSaverReader.ParseSongsFromPage(response.Content.ReadAsStringAsync().Result, url); url = @"https://beatsaver.com/api/search/advanced?q=uploaded:[2019-01-01 TO 2019-01-02] AND metadata.difficulties.easy:true AND metadata.songName:e"; response = WebUtils.GetBeatSaverAsync(new Uri(url), CancellationToken.None).Result; songs = BeatSaverReader.ParseSongsFromPage(response.Content.ReadAsStringAsync().Result, url); url = @"https://beatsaver.com/api/search/advanced?q=metadata.songName:bomb"; response = WebUtils.GetBeatSaverAsync(new Uri(url), CancellationToken.None).Result; songs = BeatSaverReader.ParseSongsFromPage(response.Content.ReadAsStringAsync().Result, url); url = @"https://beatsaver.com/api/search/text/?q=bomb"; response = WebUtils.GetBeatSaverAsync(new Uri(url), CancellationToken.None).Result; songs = BeatSaverReader.ParseSongsFromPage(response.Content.ReadAsStringAsync().Result, url); }
public void ParseSongsFromPage_Test() { string pageText = File.ReadAllText(@"Data\BeatSaverListPage.json"); Uri uri = null; var songs = BeatSaverReader.ParseSongsFromPage(pageText, uri); Assert.IsTrue(songs.Count == 10); foreach (var song in songs) { Assert.IsFalse(song.DownloadUri == null); Assert.IsFalse(string.IsNullOrEmpty(song.Hash)); Assert.IsFalse(string.IsNullOrEmpty(song.MapperName)); Assert.IsFalse(string.IsNullOrEmpty(song.RawData)); Assert.IsFalse(string.IsNullOrEmpty(song.SongName)); } var firstSong = JObject.Parse(songs.First().RawData); string firstHash = firstSong["hash"]?.Value <string>(); Assert.IsTrue(firstHash == "27639680f92a9588b7cce843fc7aaa0f5dc720f8"); string firstUploader = firstSong["uploader"]?["username"]?.Value <string>(); Assert.IsTrue(firstUploader == "latte"); }
public void Success() { string path = Path.Combine("Data", "NewBeatSaver", "List", "Latest", "Latest_0.json"); string pageText = File.ReadAllText(path); Uri uri = null; var songs = BeatSaverReader.ParseSongsFromPage(pageText, uri, true); Assert.AreEqual(20, songs.Count); foreach (var song in songs) { Assert.IsFalse(song.DownloadUri == null); Assert.IsFalse(string.IsNullOrEmpty(song.Hash)); Assert.IsFalse(string.IsNullOrEmpty(song.LevelAuthorName)); Assert.IsFalse(string.IsNullOrEmpty(song.RawData)); Assert.IsFalse(string.IsNullOrEmpty(song.Name)); } var firstSong = JObject.Parse(songs.First().RawData); string firstHash = firstSong["versions"].First()["hash"]?.Value <string>(); Assert.AreEqual("e2512e6fbf85059d9fd9b429f62b2e618dd4d7e9", firstHash); string firstUploader = firstSong["uploader"]?["name"]?.Value <string>(); Assert.AreEqual("itzrimuru", firstUploader); }