/// <summary> /// ログインする /// </summary> /// <param name="username"></param> /// <param name="password"></param> /// <returns></returns> public async Task LoginAsync(string username, string password) { //二重ログイン回避 if (NicoHttp.IsLogin) { return; } var store = new Store::Store().GetData(); var loginData = new Dictionary <string, string>() { { "mail", username }, { "password", password } }; var logger = NicoLogger.GetLogger(); logger.Debug("ログインを試行", moduleName); HttpResponseMessage res = await Client.PostAsync(store.GetNicoLoginAddress(), new FormUrlEncodedContent(loginData)); if (res.IsSuccessStatusCode && !res.Headers.Contains("Set-Cookie")) { logger.Log("ログインに成功しました。"); NicoHttp.IsLogin = true; } else { throw new HttpRequestException($"ログインに失敗しました。パスワード・ユーザー名を確認して下さい。(status_code: {(int)res.StatusCode})"); } logger.Debug($"username: {username} , pass: {Regex.Replace(password, ".", "●")}", moduleName); }
/// <summary> /// 非同期にページを取得する /// </summary> /// <param name="id"></param> /// <returns></returns> public async Task <string> GetPageAsync(string id) { var logger = NicoLogger.GetLogger(); var store = new Store::Store().GetData(); logger.Debug($"ページの取得を開始({id})", moduleName); var res = await Client.GetAsync($"{store.GetPageAddress(id)}"); if (res.IsSuccessStatusCode) { logger.Debug("ページの取得が完了", moduleName); return(await res.Content.ReadAsStringAsync()); } else { throw new HttpRequestException($"コンテンツの取得に失敗しました。(id: {id}, status_code: {(int)res.StatusCode})"); } }
static int Main(string[] args) { //ua Client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", $"Mozilla/5.0 ({Assembly.GetExecutingAssembly().GetName().Name} V.{Assembly.GetExecutingAssembly().GetName().Version}) Contact 5chan/sofware/1542064043"); //バージョン出力 if (args.Length > 0 && Regex.IsMatch(args[0], "--version|-v")) { Console.WriteLine(Assembly.GetExecutingAssembly().GetName().Version); return(0); } else if (args.Length > 0 && Regex.IsMatch(args[0], "--help|-h")) { Console.WriteLine(Program.HelpText); return(0); } //補足されなかった例外のハンドラ AppDomain.CurrentDomain.UnhandledException += Program.CurrentDomain_UnhandledException; //ロガー var logger = NicoLogger.GetLogger(Program.GetLogLevel(args)); logger.Log($"{Assembly.GetExecutingAssembly().GetName().Name} V.{Assembly.GetExecutingAssembly().GetName().Version}"); //引数解析 var _args = new List <string>(); _args.AddRange(args); var parser = new CLI::Parser(); var errorlevel = parser.ParseArgs(args); //分岐 switch (errorlevel) { case NicoEnums::GenelicErrorCode.ERROR: logger.Log("処理を終了します。"); return(1); case NicoEnums::GenelicErrorCode.EXIT: logger.Log("処理を終了します。"); return(0); case NicoEnums::GenelicErrorCode.OK: break; } Store.Store store; //ストア初期化 try { store = new Store::Store(parser); } catch (NoNullAllowedException e) { logger.Error(e.Message); return(100); } catch (Exception e) { logger.Error($"データの初期化中にエラーが発生しました。{e.Message}"); logger.Error(e.StackTrace == null?"no stack_trace":e.StackTrace); return(100); } var storeData = store.GetData(); List <string> IdList; try { IdList = CLI.IDHandler.GetIDLists().Result; } catch (Exception e) { logger.Error($"ダウンロードIDの解析中にエラーが発生しました。(詳細: {e.Message})"); return(102); } if (IdList.Count > 1) { logger.Log($"id:{IdList[0]}ほか、{IdList.Count}件の動画をダウンロードします"); } foreach (var id in IdList) { //実行 var downloader = new WWW.Comment.Comment(); errorlevel = downloader.DownloadComment(id).Result; switch (errorlevel) { case NicoEnums::GenelicErrorCode.ERROR: logger.Log("処理を終了します。"); return(101); } if (IdList.Count > 1 && errorlevel == NicoEnums::GenelicErrorCode.OK) { logger.Log("待機中です...(5,000ms)"); Task.Delay(5000).Wait(); } } logger.Log("処理を終了します)"); return(0); }