public void MylistTest() { int wait_millisecond = int.Parse(TestUtility.TestData[TestUtility.KEY_ACCESS_WAIT_MILLISECONDS]); string timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff"); string video_id1 = "sm9"; string video_id2 = "sm1097445"; // {"id":(?<mylist_id>\d+),"status":"ok"} Regex mylist_id_regex = new Regex("{\"id\":(?<mylist_id>\\d+),\"status\":\"ok\"}"); TestUtility.EnsureLogin(network_); string mylist_id1 = null; string mylist_id2 = null; string mylist_id3 = null; string token = null; bool test_succeeded = false; try { // () // -> (mylist1()) TestUtility.Message("Running MylistTest - Create new mylist"); string mylist_title1 = "まいりすと_1_" + timestamp; string result = network_.MakeNewMylistGroup(mylist_title1); TestUtility.Message(result); Assert.That(result, Text.Contains("\"status\":\"ok\""), "MylistTest1-1"); mylist_id1 = mylist_id_regex.Match(result).Groups["mylist_id"].Value; string str = network_.GetMylistHtml(mylist_id1, true); Assert.That(str, Text.Contains(mylist_title1), "MylistTest1-2"); TestUtility.Wait(5); // (mylist1()) // -> (mylist1() mylist2()) TestUtility.Message("Running MylistTest - Create new mylist with token"); string mylist_title2 = "マイリスト_2_" + timestamp; string my_mylist_page = network_.GetMylistPageFromMyPage(); token = Regex.Match(my_mylist_page, "NicoAPI.token = \"([-0-9a-f]+)\";").Groups[1].Value; result = network_.MakeNewMylistGroup(mylist_title2, token); TestUtility.Message(result); Assert.That(result, Text.Contains("\"status\":\"ok\""), "MylistTest2-1"); mylist_id2 = mylist_id_regex.Match(result).Groups["mylist_id"].Value; str = network_.GetMylistHtml(mylist_id2, true); Assert.That(str, Text.Contains(mylist_title2), "MylistTest2-2"); TestUtility.Wait(5); // (mylist1() mylist2()) // -> (*mylist1() mylist2()) TestUtility.Message("Running MylistTest - Update mylist information"); bool mylist_visibility1 = false; mylist_title1 = mylist_title1 + "_mod"; string mylist_description1 = Guid.NewGuid().ToString() + "テスト"; int mylist_order1 = 16; int mylist_color1 = 3; result = network_.UpdateMylistGroup(mylist_id1, mylist_visibility1, mylist_title1, mylist_description1, mylist_order1, mylist_color1); TestUtility.Message(result); Assert.That(result, Is.EqualTo("{\"status\":\"ok\"}"), "MylistTest3-1"); str = network_.GetMylistHtml(mylist_id1, true); Assert.That(str, Text.Contains(mylist_description1), "MylistTest3-2"); TestUtility.Wait(5); // (*mylist1() mylist2()) // -> (*mylist1() *mylist2()) TestUtility.Message("Running MylistTest - Update mylist information with token"); bool mylist_visibility2 = false; mylist_title2 = mylist_title2 + "_mod"; string mylist_description2 = Guid.NewGuid().ToString() + "テスト"; int mylist_order2 = 15; int mylist_color2 = 2; result = network_.UpdateMylistGroup(mylist_id2, mylist_visibility2, mylist_title2, mylist_description2, mylist_order2, mylist_color2, token); TestUtility.Message(result); Assert.That(result, Is.EqualTo("{\"status\":\"ok\"}"), "MylistTest4-1"); str = network_.GetMylistHtml(mylist_id2, true); Assert.That(str, Text.Contains(mylist_description2), "MylistTest4-2"); TestUtility.Wait(5); // (*mylist1() *mylist2()) // -> (*mylist1() *mylist2() *mylist3()) TestUtility.Message("Running MylistTest - Create mylist with mylist information"); bool mylist_visibility3 = false; string mylist_title3 = "᧠᧡᧢᧣᧥᧥᧼_3_" + timestamp; string mylist_description3 = Guid.NewGuid().ToString() + "テスト"; int mylist_order3 = 17; int mylist_color3 = 4; result = network_.MakeNewAndUpdateMylistGroup(mylist_visibility3, mylist_title3, mylist_description3, mylist_order3, mylist_color3, out mylist_id3); TestUtility.Message(result); Assert.That(result, Text.Contains("\"status\":\"ok\""), "MylistTest5-1"); str = network_.GetMylistHtml(mylist_id3, true); Assert.That(str, Text.Contains(mylist_description3), "MylistTest5-2"); TestUtility.Wait(5); // (*mylist1() *mylist2() *mylist3()) // -> (*mylist1(video1) *mylist2() *mylist3()) TestUtility.Message("Running MylistTest - Add video to mylist"); result = network_.AddMylist(mylist_id1, video_id1); TestUtility.Message(result); Assert.That(result, Is.EqualTo("{\"status\":\"ok\"}"), "MylistTest6-1"); str = network_.GetMylistHtml(mylist_id1, true); Assert.That(str, Text.Contains(video_id1), "MylistTest6-2"); TestUtility.Wait(5); // (*mylist1(video1) *mylist2() *mylist3()) // -> (*mylist1(video1,video2) *mylist2() *mylist3()) TestUtility.Message("Running MylistTest - Add video to mylist with token"); result = network_.AddMylist(mylist_id1, video_id2); TestUtility.Message(result); Assert.That(result, Is.EqualTo("{\"status\":\"ok\"}"), "MylistTest7-1"); str = network_.GetMylistHtml(mylist_id1, true); Assert.That(str, Text.Contains(video_id2), "MylistTest7-2"); TestUtility.Wait(5); // (*mylist1(video1,video2) *mylist2() *mylist3()) // -> (*mylist1(*video1,*video2) *mylist2() *mylist3()) TestUtility.Message("Running MylistTest - Update description of videos in mylist"); List <string> video_id_list = new List <string>(); video_id_list.Add(video_id1); video_id_list.Add(video_id2); List <string> description_list = new List <string>(); string video_description1 = Guid.NewGuid().ToString(); string video_description2 = Guid.NewGuid().ToString(); description_list.Add(video_description1); description_list.Add(video_description2); network_.UpdateMylistDescription(mylist_id1, video_id_list, description_list, wait_millisecond); str = network_.GetMylistHtml(mylist_id1, true); Assert.That(str, Text.Contains(video_description1), "MylistTest8-1"); Assert.That(str, Text.Contains(video_description2), "MylistTest8-2"); TestUtility.Wait(5); // (*mylist1(*video1,*video2) *mylist2() *mylist3()) // -> (*mylist1(**video1,**video2) *mylist2() *mylist3()) TestUtility.Message("Running MylistTest - Update description of videos in mylist with delegate"); description_list = new List <string>(); video_description1 = Guid.NewGuid().ToString(); video_description2 = Guid.NewGuid().ToString(); description_list.Add(video_description1); description_list.Add(video_description2); NicoNetwork.NetworkWaitDelegate on_wait = delegate(string message, int current, int total) { TestUtility.Message("{0}({1}/{2})", message, current, total); }; network_.UpdateMylistDescription(mylist_id1, video_id_list, description_list, on_wait); str = network_.GetMylistHtml(mylist_id1, true); Assert.That(str, Text.Contains(video_description1), "MylistTest9-1"); Assert.That(str, Text.Contains(video_description2), "MylistTest9-2"); TestUtility.Wait(5); // (*mylist1(*video1,*video2) *mylist2() *mylist3()) // -> (*mylist1(**video1,**video2) *mylist2() *mylist3()) TestUtility.Message("Running MylistTest - Add same video."); try { result = network_.AddMylist(mylist_id1, video_id1); TestUtility.Message(result); Assert.Fail("MylistTest10-1"); } catch (NiconicoAddingMylistExistException e) { TestUtility.Message(e.ToString()); } TestUtility.Wait(5); TestUtility.Message("Running MylistTest - Fetch my mylist information."); List <MylistInfo> mylist_info_list = network_.GetMylistInfoListFromMypage(); // mylist1, mylist2, mylist3, mylist_id Assert.That(mylist_info_list.Count, Is.GreaterThanOrEqualTo(4), "MylistTest10-1"); MylistInfo mylist_info1 = mylist_info_list.Find(delegate(MylistInfo mi) { return(mi.mylist_id == mylist_id1); }); Assert.That(mylist_info1, Is.Not.Null, "MylistTest10-2"); Assert.That(mylist_info1.description, Is.EqualTo(mylist_description1), "MylistTest10-3"); Assert.That(mylist_info1.is_public, Is.EqualTo(mylist_visibility1), "MylistTest10-4"); //TODO Assert.That(mylist_info1.number_of_item, Is.EqualTo(2), "MylistTest10-5"); Assert.That(mylist_info1.title, Is.EqualTo(mylist_title1), "MylistTest10-6"); MylistInfo mylist_info2 = mylist_info_list.Find(delegate(MylistInfo mi) { return(mi.mylist_id == mylist_id2); }); Assert.That(mylist_info2, Is.Not.Null, "MylistTest10-2"); Assert.That(mylist_info2.description, Is.EqualTo(mylist_description2), "MylistTest10-7"); Assert.That(mylist_info2.is_public, Is.EqualTo(mylist_visibility2), "MylistTest10-8"); //TODO Assert.That(mylist_info2.number_of_item, Is.EqualTo(0), "MylistTest10-9"); Assert.That(mylist_info2.title, Is.EqualTo(mylist_title2), "MylistTest10-10"); MylistInfo mylist_info3 = mylist_info_list.Find(delegate(MylistInfo mi) { return(mi.mylist_id == mylist_id3); }); Assert.That(mylist_info3, Is.Not.Null, "MylistTest10-11"); Assert.That(mylist_info3.description, Is.EqualTo(mylist_description3), "MylistTest10-12"); Assert.That(mylist_info3.is_public, Is.EqualTo(mylist_visibility3), "MylistTest10-13"); //TODO Assert.That(mylist_info3.number_of_item, Is.EqualTo(0), "MylistTest10-14"); Assert.That(mylist_info3.title, Is.EqualTo(mylist_title3), "MylistTest10-15"); // TODO Move video. // (*mylist1(**video1,**video2) *mylist2() *mylist3()) // -> (*mylist1(**video2) *mylist2(**video1) *mylist3()) // TODO Copy video. // (*mylist1(**video2) *mylist2(**video1) *mylist3()) // -> (*mylist1(**video2) *mylist2(**video1, **video2) *mylist3()) // TODO Delete video. // (*mylist1(**video2) *mylist2(**video1, **video2) *mylist3()) // -> (*mylist1() *mylist2(**video1, **video2) *mylist3()) test_succeeded = true; } finally { bool delete_succeeded = true; if (token == null) { string my_mylist_page = network_.GetMylistPageFromMyPage(); token = Regex.Match(my_mylist_page, "NicoAPI.token = \"([-0-9a-f]+)\";").Groups[1].Value; } if (!string.IsNullOrEmpty(mylist_id1)) { // (*mylist1() *mylist2(**video1, **video2) *mylist3()) // -> (*mylist2(**video1, **video2) *mylist3()) try { TestUtility.Wait(5); TestUtility.Message("Running MylistTest - Delete mylist1"); string result = RemoveMylistGroup(network_, mylist_id1, token); TestUtility.Message(result); Assert.That(result, Text.Contains("\"status\":\"ok\""), "MylistTestI-1"); } catch (Exception e) { delete_succeeded = false; TestUtility.Message(e.ToString()); } } if (!string.IsNullOrEmpty(mylist_id2)) { // (*mylist2(**video1, **video2) *mylist3()) // -> (*mylist3()) try { TestUtility.Wait(5); TestUtility.Message("Running MylistTest - Delete mylist2"); string result = RemoveMylistGroup(network_, mylist_id2, token); TestUtility.Message(result); Assert.That(result, Text.Contains("\"status\":\"ok\""), "MylistTestII-1"); } catch (Exception e) { delete_succeeded = false; TestUtility.Message(e.ToString()); } } if (!string.IsNullOrEmpty(mylist_id3)) { // (*mylist3()) // -> () try { TestUtility.Wait(5); TestUtility.Message("Running MylistTest - Delete mylist3"); string result = RemoveMylistGroup(network_, mylist_id3, token); TestUtility.Message(result); Assert.That(result, Text.Contains("\"status\":\"ok\""), "MylistTestIII-1"); } catch (Exception e) { delete_succeeded = false; TestUtility.Message(e.ToString()); } } if (test_succeeded && !delete_succeeded) { Assert.Fail("MylistTest delete"); } } }
public void AddMylist(InputOutputOption iooption, string mylist_id) { const int try_times = 5; const int large_wait_time = 50000; const int large_wait_num = 70; RankFile rank_file = iooption.GetRankFile(); if (rank_file.Count == 0) { msgout_.Write("追加する動画がありません。\r\n"); return; } msgout_.Write("マイリスト " + mylist_id + " への追加を開始します。\r\n"); // 最小3秒、最大10秒 int wait_time = Math.Min(Math.Max(rank_file.Count * 1000 * 8 / 10, 3000), 10000); int total_wait_time = (wait_time * rank_file.Count + large_wait_time * (rank_file.Count / large_wait_num)) / 1000 / 60 + 1; msgout_.Write(rank_file.Count + "件の追加には推定" + total_wait_time.ToString() + "分かかります。\r\n"); List <Video> exist_video_list = new List <Video>(); NicoListManager.ParsePointRss(niconico_network_.GetMylistHtml(mylist_id, true), DateTime.Now, exist_video_list, false, true); cancel_object_.Wait(1000); for (int i = 0; i < rank_file.Count; ++i) { if (RankFile.SearchVideo(exist_video_list, rank_file[i]) >= 0) { msgout_.Write(rank_file[i] + " はすでに存在します。\r\n"); continue; } for (int j = 0; j < try_times; ++j) { try { niconico_network_.AddMylist(mylist_id, rank_file[i]); msgout_.Write(rank_file[i] + " をマイリストに追加しました。\r\n"); } catch (NiconicoAddingMylistExistException) // 上でチェックしているが念のためもう一度チェック { msgout_.Write(rank_file[i] + " はすでに存在します。\r\n"); } catch (Exception e) { if (j < try_times - 1) { msgout_.Write("エラー:" + e.Message + "\r\n3秒後に再試行します。\r\n"); cancel_object_.Wait(3000); continue; } else { msgout_.Write("エラー:" + e.Message + "\r\n"); cancel_object_.Wait(3000); } } if (i < rank_file.Count - 1) { msgout_.Write("待機しています。\r\n"); // 基本的には wait_time ミリ秒だけ待つが、large_wait_num 回に1回は // large_wait_time ミリ秒待つ。 if ((i + 1) % large_wait_num == 0) { cancel_object_.Wait(large_wait_time, large_wait_time + 1000); } else { cancel_object_.Wait(wait_time, wait_time + 1000); } } break; } } msgout_.Write("マイリストへの追加を終了します。\r\n"); }