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); }
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); }
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"); }
public void MusicGenreParser_Error_Test1() { var musicGenre = new MusicGenreParser().Parse(TestUtility.LoadResource("Common/error_page.html")); Assert.IsNull(musicGenre); }
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); } }