Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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})");
            }
        }
Exemplo n.º 3
0
        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);
        }