public static SongInfo GetSongByKey(string key)
        {
            string        url      = BEATSAVER_DETAILS_BASE_URL + key;
            string        pageText = "";
            BeatSaverSong song     = new BeatSaverSong();

            try
            {
                var pageTask = WebUtils.TryGetStringAsync(url);
                pageTask.Wait();
                pageText = pageTask.Result;
                if (string.IsNullOrEmpty(pageText))
                {
                    Logger.Warning($"Unable to get web page at {url}");
                    return(null);
                }
            }
            catch (HttpRequestException)
            {
                Logger.Error($"HttpRequestException while trying to populate fields for {key}");
                return(null);
            }
            catch (AggregateException ae)
            {
                ae.WriteExceptions($"Exception while trying to get details for {key}");
            }
            catch (Exception ex)
            {
                Logger.Exception("Exception getting page", ex);
            }
            song           = ParseSongsFromPage(pageText).FirstOrDefault();
            song.ScrapedAt = DateTime.Now;
            return(ScrapedDataProvider.GetOrCreateSong(song));
        }
        /// <summary>
        /// Creates a SongInfo from a JObject. Sets the ScrapedAt time for the song.
        /// </summary>
        /// <param name="song"></param>
        /// <returns></returns>
        public static BeatSaverSong ParseSongFromJson(JObject song)
        {
            //JSONObject song = (JSONObject) aKeyValue;
            string songIndex = song["key"]?.Value <string>();
            string songName  = song["name"]?.Value <string>();
            string author    = song["uploader"]?["username"]?.Value <string>();
            string songUrl   = "https://beatsaver.com/download/" + songIndex;

            if (BeatSaverSong.TryParseBeatSaver(song, out BeatSaverSong newSong))
            {
                newSong.ScrapedAt = DateTime.Now;
                SongInfo songInfo = ScrapedDataProvider.GetOrCreateSong(newSong);

                songInfo.BeatSaverInfo = newSong;
                return(newSong);
            }
            else
            {
                if (!(string.IsNullOrEmpty(songIndex)))
                {
                    // TODO: look at this
                    Logger.Warning($"Couldn't parse song {songIndex}, skipping.");// using sparse definition.");
                    //return new SongInfo(songIndex, songName, songUrl, author);
                }
                else
                {
                    Logger.Error("Unable to identify song, skipping");
                }
            }
            return(null);
        }
Exemplo n.º 3
0
        public void TryParseBeatSaverTest()
        {
            string jsonStr    = File.ReadAllText("test_detail_page.json");
            JToken singleSong = JToken.Parse(jsonStr);
            bool   successful = BeatSaverSong.TryParseBeatSaver(singleSong, out BeatSaverSong song);

            Console.WriteLine($"{song.name}");
            Assert.IsTrue(successful);
        }
Exemplo n.º 4
0
        private void LoadSongsFromBeatSaver(HtmlDocument pageDocument)
        {
            try
            {
                var SongList = pageDocument.DocumentNode.SelectNodes("(//div[contains(@style,'margin-bottom: 15px;')])");

                foreach (var song in SongList)
                {
                    string SongName = "", PictureSrc = "", BeatSaverUrl = "", DownloadLink = "", Downloads = "";

                    var HeaderNode = song.Descendants("h2").FirstOrDefault();
                    if (HeaderNode != null)
                    {
                        SongName     = WebUtility.HtmlDecode(HeaderNode.InnerText.Trim());
                        BeatSaverUrl = HeaderNode.Descendants("a").FirstOrDefault().GetAttributeValue("href", "null");
                    }

                    var PictureSrcNode = song.Descendants("img").FirstOrDefault();
                    if (PictureSrcNode != null)
                    {
                        PictureSrc = PictureSrcNode.GetAttributeValue("src", "null");
                    }

                    var DownloadLinkNode = song.Descendants("a").Where(d => d.InnerText == "Download Zip").FirstOrDefault();
                    if (DownloadLinkNode != null)
                    {
                        DownloadLink = DownloadLinkNode.GetAttributeValue("href", "null");
                    }

                    var AddBeatSaverSong = new BeatSaverSong
                    {
                        PictureSrc   = PictureSrc,
                        SongName     = SongName,
                        BeatSaverUrl = BeatSaverUrl,
                        DownloadLink = DownloadLink
                    };

                    BeatSaverSongsList.Add(AddBeatSaverSong);
                }
            }
            catch
            {
            }
        }