Esempio n. 1
0
        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");
        }
Esempio n. 5
0
        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);
        }