Beispiel #1
0
        public async Task <IMusicGenreGetResponse> GetMusicGenreAsync(IMusicGenreGetRequest request)
        {
            if (WebBrowserNavigator.WebBrowser.Url?.AbsoluteUri != ChunithmNetUrl.MusicGenre)
            {
                await WebBrowserNavigator.NavigateAsync(ChunithmNetUrl.MusicGenre);
            }

            {
                var documente      = WebBrowserNavigator.WebBrowser.Document;
                var musicGenreForm = documente.GetElementById("music_genre");
                var genre          = musicGenreForm.GetElementsByTagName("select").OfType <HtmlElement>().FirstOrDefault();
                genre.SetAttribute("value", request.GenreCode.ToString());
            }

            var   musicGenre = WebBrowserNavigator.InvokeScriptAsync("formSubmitAddParam", new[] { "music_genre", ToDifficultyParam(request.Difficulty) });
            await musicGenre;

            var response = new MusicGenreGetResponse(WebBrowserNavigator.WebBrowser);

            if (response.Success)
            {
                var musicGenreParser = new MusicGenreParser();
                response.MusicGenre = musicGenreParser.Parse(WebBrowserNavigator.WebBrowser.DocumentText);
            }
            return(response);
        }
Beispiel #2
0
        public async Task <IMusicGenreGetResponse> GetMusicGenreAsync(IMusicGenreGetRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (WebBrowserNavigator.WebBrowser.Address != ChunithmNetUrl.MusicGenre)
            {
                await WebBrowserNavigator.LoadAsync(ChunithmNetUrl.MusicGenre);
            }

            await WebBrowserNavigator.EvaluatePageMoveScriptAsync($@"
var genreSelecter  = document.getElementsByName('genre')[0];
genreSelecter.value = { request.GenreCode };
formSubmitAddParam('music_genre','{ ToDifficultyParam(request.Difficulty) }');
");

            var   responseAsync = MusicGenreGetResponse.CreateResponseAsync(WebBrowserNavigator.WebBrowser);
            await responseAsync;
            var   response = responseAsync.Result;

            if (response.Success)
            {
                var musicGenreParser = new MusicGenreParser();
                response.MusicGenre = musicGenreParser.Parse(response.DocumentText);
            }
            return(response);
        }
Beispiel #3
0
        private async void 楽曲更新ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var maxLevel = 14;
            var loadNum  = maxLevel + 1;

            Console.WriteLine($"楽曲の取得中... (1/{loadNum})");

            var   musicGenre = chunithmNetBackgroundConnector.GetMusicGenreAsync(Utility.GENRE_ALL_CODE, Difficulty.Master);
            await musicGenre;

            if (!musicGenre.Result.Success)
            {
                Console.WriteLine("!! Failed !!");
                Console.WriteLine("Error Code : " + musicGenre.Result.ErrorCode);
                Console.WriteLine(musicGenre.Result.ErrorMessage);
                return;
            }
            var musicGenreDocument = musicGenre.Result.DocumentText;

            var musicLevelDocuments = new List <string>();

            for (var i = 1; i <= maxLevel; i++)
            {
                Console.WriteLine($"楽曲の取得中... ({i + 1}/{loadNum})");
                var   musicLevel = chunithmNetBackgroundConnector.GetMusicLevelAsync(i);
                await musicLevel;
                if (!musicLevel.Result.Success)
                {
                    Console.WriteLine("!! Failed !!");
                    Console.WriteLine("Error Code : " + musicLevel.Result.ErrorCode);
                    Console.WriteLine(musicLevel.Result.ErrorMessage);
                    return;
                }
                musicLevelDocuments.Add(musicLevel.Result.DocumentText);
            }

            Console.WriteLine("Success");

            Console.WriteLine("楽曲テーブルを生成します...");

            var musicDataTable   = new MusicDataTable();
            var musicGenreParser = new MusicGenreParser();
            var musicLevelParser = new MusicLevelParser();

            musicDataTable.Add(musicGenreParser.Parse(musicGenreDocument));
            foreach (var musicLevel in musicLevelDocuments)
            {
                musicDataTable.Add(musicLevelParser.Parse(musicLevel));
            }

            var   tableUpdate = dataManagerConnector.UpdateTableAsync(musicDataTable.MusicDatas);
            await tableUpdate;

            Console.WriteLine("Success");
        }
Beispiel #4
0
        public void MusicGenreParser_Error_Test1()
        {
            var musicGenre = new MusicGenreParser().Parse(TestUtility.LoadResource("Common/error_page.html"));

            Assert.IsNull(musicGenre);
        }
Beispiel #5
0
        public void MusicGenreParser_Test1()
        {
            var musicGenre = new MusicGenreParser().Parse(TestUtility.LoadResource("MusicGenre/html_test_case_1.html"));

            Assert.IsNotNull(musicGenre, "パースチェック");

            Assert.AreEqual(535, musicGenre.MusicCount, "楽曲数");
            Assert.AreEqual(524, musicGenre.ClearCount, "クリア 楽曲数");
            Assert.AreEqual(524, musicGenre.SCount, "S 楽曲数");
            Assert.AreEqual(516, musicGenre.SsCount, "SS 楽曲数");
            Assert.AreEqual(476, musicGenre.SssCount, "SSS 楽曲数");
            Assert.AreEqual(441, musicGenre.FullComboCount, "フルコンボ 楽曲数");
            Assert.AreEqual(372, musicGenre.AllJusticeCount, "AJ 楽曲数");
            Assert.AreEqual(7, musicGenre.FullChainGoldCount, "フルチェイン(金) 楽曲数");
            Assert.AreEqual(7, musicGenre.FullChainPlatinumCount, "フルチェイン 楽曲数");

            var units = musicGenre.Units;

            Assert.AreEqual(7, units.Length, "件数チェック");
            {
                AssertUnit(
                    units[0],
                    639,
                    "sister's noise",
                    "POPS & ANIME",
                    Difficulty.Master,
                    1009974,
                    Rank.SSS,
                    true,
                    ComboStatus.AllJustice,
                    ChainStatus.None);
            }
            {
                AssertUnit(
                    units[1],
                    583,
                    "碧き孤島のアングゥィス",
                    "POPS & ANIME",
                    Difficulty.Master,
                    1008683,
                    Rank.SSS,
                    true,
                    ComboStatus.None,
                    ChainStatus.None);
            }
            {
                AssertUnit(
                    units[2],
                    363,
                    "true my heart -Lovable mix-",
                    "POPS & ANIME",
                    Difficulty.Master,
                    1009942,
                    Rank.SSS,
                    true,
                    ComboStatus.AllJustice,
                    ChainStatus.FullChainPlatinum);
            }
            {
                AssertUnit(
                    units[3],
                    159,
                    "ジングルベル",
                    "POPS & ANIME",
                    Difficulty.Master,
                    1008382,
                    Rank.SSS,
                    true,
                    ComboStatus.FullCombo,
                    ChainStatus.None);
            }
            {
                AssertUnit(
                    units[4],
                    631,
                    "初音ミクの激唱",
                    "niconico",
                    Difficulty.Master,
                    1003448,
                    Rank.SS,
                    true,
                    ComboStatus.None,
                    ChainStatus.None);
            }
            {
                AssertUnit(
                    units[5],
                    713,
                    "larva",
                    "ORIGINAL",
                    Difficulty.Master,
                    0,
                    Rank.None,
                    false,
                    ComboStatus.None,
                    ChainStatus.None);
            }
            {
                AssertUnit(
                    units[6],
                    180,
                    "怒槌",
                    "ORIGINAL",
                    Difficulty.Master,
                    996370,
                    Rank.S,
                    true,
                    ComboStatus.None,
                    ChainStatus.None);
            }
        }