public async Task <Boolean> DeleteClientes(List <Cliente> listClientes)
        {
            var json          = JsonConvert.SerializeObject(listClientes);
            var stringContent = new StringContent(json, UnicodeEncoding.UTF8, "application/json");
            var result        = await _client.PostAsync(_options.ApiUrl + "api/Clientes/ListClientes", stringContent);

            return(result.IsSuccessStatusCode);
        }
        public async Task <string> GetEmailConfirmationToken(string userId)
        {
            var responceResult = await _httpClient.PostAsync($"api/users/{userId}/email/ConfirmationToken", null);

            if (responceResult.IsSuccessStatusCode)
            {
                string token = await responceResult.Content.ReadAsStringAsync();

                return(RegexHelper.CleanHttpResponceString(token));
            }

            return(String.Empty);
        }
Esempio n. 3
0
        public static async Task <string> GetLoginStatusAsync(string oauthKey)
        {
            string queryUrl = "https://passport.bilibili.com/qrcode/getLoginInfo";
            NameValueCollection postValues = new NameValueCollection();

            postValues.Add("oauthKey", oauthKey);
            postValues.Add("gourl", "https%3A%2F%2Fwww.bilibili.com%2F");
            byte[] responseArray = await(await AppHttpClient.PostAsync(queryUrl, new FormUrlEncodedContent(postValues.ToDictionary()))).Content.ReadAsByteArrayAsync();
            return(Encoding.UTF8.GetString(responseArray));
        }
Esempio n. 4
0
        protected override async Task HandleEventAsync()
        {
            if (!string.IsNullOrWhiteSpace(NewItem.Text))
            {
                ApiCallResult <ItemApiModel> itemCreationCallResult = await AppHttpClient
                                                                      .PostAsync <ItemApiModel>(ApiUrls.CreateItem, NewItem);

                Items.Add(
                    itemCreationCallResult.IsSuccess
            ? itemCreationCallResult.Value !
            : throw new Exception("API call is not successful")
                    );

                NewItem.Text = string.Empty;
            }
        }
Esempio n. 5
0
        public static async Task <int> Main(params string[] args)
        {
            ServicePointManager.DefaultConnectionLimit = 2048;
            ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) =>
            {
                return(true);
            };

            var rootCommand = new RootCommand
            {
                new Argument <string>(
                    "url",
                    description: "视频地址 或 av|bv|BV|ep|ss"),
                new Option <bool>(
                    new string[] { "--use-tv-api", "-tv" },
                    "使用TV端解析模式"),
                new Option <bool>(
                    new string[] { "--use-app-api", "-app" },
                    "使用APP端解析模式"),
                new Option <bool>(
                    new string[] { "--use-intl-api", "-intl" },
                    "使用国际版解析模式"),
                new Option <bool>(
                    new string[] { "--use-mp4box" },
                    "使用MP4Box来混流"),
                new Option <bool>(
                    new string[] { "--only-hevc", "-hevc" },
                    "只下载hevc编码"),
                new Option <bool>(
                    new string[] { "--only-avc", "-avc" },
                    "只下载avc编码"),
                new Option <bool>(
                    new string[] { "--only-show-info", "-info" },
                    "仅解析而不进行下载"),
                new Option <bool>(
                    new string[] { "--hide-streams", "-hs" },
                    "不要显示所有可用音视频流"),
                new Option <bool>(
                    new string[] { "--interactive", "-ia" },
                    "交互式选择清晰度"),
                new Option <bool>(
                    new string[] { "--show-all" },
                    "展示所有分P标题"),
                new Option <bool>(
                    new string[] { "--use-aria2c" },
                    "调用aria2c进行下载(你需要自行准备好二进制可执行文件)"),
                new Option <string>(
                    new string[] { "--aria2c-proxy" },
                    "调用aria2c进行下载时的代理地址配置"),
                new Option <bool>(
                    new string[] { "--multi-thread", "-mt" },
                    "使用多线程下载"),
                new Option <string>(
                    new string[] { "--select-page", "-p" },
                    "选择指定分p或分p范围:(-p 8 或 -p 1,2 或 -p 3-5 或 -p ALL)"),
                new Option <bool>(
                    new string[] { "--audio-only" },
                    "仅下载音频"),
                new Option <bool>(
                    new string[] { "--video-only" },
                    "仅下载视频"),
                new Option <bool>(
                    new string[] { "--sub-only" },
                    "仅下载字幕"),
                new Option <bool>(
                    new string[] { "--no-padding-page-num" },
                    "不给分P序号补零"),
                new Option <bool>(
                    new string[] { "--debug" },
                    "输出调试日志"),
                new Option <bool>(
                    new string[] { "--skip-mux" },
                    "跳过混流步骤"),
                new Option <bool>(
                    new string[] { "--skip-subtitle" },
                    "跳过字幕下载"),
                new Option <bool>(
                    new string[] { "--skip-cover" },
                    "跳过封面下载"),
                new Option <string>(
                    new string[] { "--language" },
                    "设置混流的音频语言(代码),如chi, jpn等"),
                new Option <string>(
                    new string[] { "--cookie", "-c" },
                    "设置字符串cookie用以下载网页接口的会员内容"),
                new Option <string>(
                    new string[] { "--access-token", "-token" },
                    "设置access_token用以下载TV/APP接口的会员内容"),
                new Option <string>(
                    new string[] { "--work-dir" },
                    "设置程序的工作目录"),
                new Option <string>(
                    new string[] { "--delay-per-page" },
                    "设置下载合集分P之间的下载间隔时间(单位: 秒, 默认无间隔)")
            };

            Command loginCommand = new Command(
                "login",
                "通过APP扫描二维码以登录您的WEB账号");

            rootCommand.AddCommand(loginCommand);
            Command loginTVCommand = new Command(
                "logintv",
                "通过APP扫描二维码以登录您的TV账号");

            rootCommand.AddCommand(loginTVCommand);
            rootCommand.Description = "BBDown是一个免费且便捷高效的哔哩哔哩下载/解析软件.";
            rootCommand.TreatUnmatchedTokensAsErrors = true;

            //WEB登录
            loginCommand.Handler = CommandHandler.Create(async delegate
            {
                try
                {
                    Log("获取登录地址...");
                    string loginUrl = "https://passport.bilibili.com/qrcode/getLoginUrl";
                    string url      = JsonDocument.Parse(await GetWebSourceAsync(loginUrl)).RootElement.GetProperty("data").GetProperty("url").ToString();
                    string oauthKey = GetQueryString("oauthKey", url);
                    //Log(oauthKey);
                    //Log(url);
                    bool flag = false;
                    Log("生成二维码...");
                    QRCodeGenerator qrGenerator = new QRCodeGenerator();
                    QRCodeData qrCodeData       = qrGenerator.CreateQrCode(url, QRCodeGenerator.ECCLevel.Q);
                    QRCode qrCode      = new QRCode(qrCodeData);
                    Bitmap qrCodeImage = qrCode.GetGraphic(7);
                    qrCodeImage.Save("qrcode.png", System.Drawing.Imaging.ImageFormat.Png);
                    Log("生成二维码成功:qrcode.png, 请打开并扫描");
                    while (true)
                    {
                        await Task.Delay(1000);
                        string w    = await GetLoginStatusAsync(oauthKey);
                        string data = JsonDocument.Parse(w).RootElement.GetProperty("data").ToString();
                        if (data == "-2")
                        {
                            LogColor("二维码已过期, 请重新执行登录指令.");
                            break;
                        }
                        else if (data == "-4") //等待扫码
                        {
                            continue;
                        }
                        else if (data == "-5") //等待确认
                        {
                            if (!flag)
                            {
                                Log("扫码成功, 请确认...");
                                flag = !flag;
                            }
                        }
                        else
                        {
                            string cc = JsonDocument.Parse(w).RootElement.GetProperty("data").GetProperty("url").ToString();
                            Log("登录成功: SESSDATA=" + GetQueryString("SESSDATA", cc));
                            //导出cookie
                            File.WriteAllText(Path.Combine(APP_DIR, "BBDown.data"), cc.Substring(cc.IndexOf('?') + 1).Replace("&", ";"));
                            File.Delete("qrcode.png");
                            break;
                        }
                    }
                }
                catch (Exception e) { LogError(e.Message); }
            });

            //TV登录
            loginTVCommand.Handler = CommandHandler.Create(async delegate
            {
                try
                {
                    string loginUrl = "https://passport.snm0516.aisee.tv/x/passport-tv-login/qrcode/auth_code";
                    string pollUrl  = "https://passport.bilibili.com/x/passport-tv-login/qrcode/poll";
                    var parms       = GetTVLoginParms();
                    Log("获取登录地址...");
                    byte[] responseArray = await(await AppHttpClient.PostAsync(loginUrl, new FormUrlEncodedContent(parms.ToDictionary()))).Content.ReadAsByteArrayAsync();
                    string web           = Encoding.UTF8.GetString(responseArray);
                    string url           = JsonDocument.Parse(web).RootElement.GetProperty("data").GetProperty("url").ToString();
                    string authCode      = JsonDocument.Parse(web).RootElement.GetProperty("data").GetProperty("auth_code").ToString();
                    Log("生成二维码...");
                    QRCodeGenerator qrGenerator = new QRCodeGenerator();
                    QRCodeData qrCodeData       = qrGenerator.CreateQrCode(url, QRCodeGenerator.ECCLevel.Q);
                    QRCode qrCode      = new QRCode(qrCodeData);
                    Bitmap qrCodeImage = qrCode.GetGraphic(7);
                    qrCodeImage.Save("qrcode.png", System.Drawing.Imaging.ImageFormat.Png);
                    Log("生成二维码成功:qrcode.png, 请打开并扫描");
                    parms.Set("auth_code", authCode);
                    parms.Set("ts", GetTimeStamp(true));
                    parms.Remove("sign");
                    parms.Add("sign", GetSign(ToQueryString(parms)));
                    while (true)
                    {
                        await Task.Delay(1000);
                        responseArray = await(await AppHttpClient.PostAsync(pollUrl, new FormUrlEncodedContent(parms.ToDictionary()))).Content.ReadAsByteArrayAsync();
                        web           = Encoding.UTF8.GetString(responseArray);
                        string code   = JsonDocument.Parse(web).RootElement.GetProperty("code").ToString();
                        if (code == "86038")
                        {
                            LogColor("二维码已过期, 请重新执行登录指令.");
                            break;
                        }
                        else if (code == "86039") //等待扫码
                        {
                            continue;
                        }
                        else
                        {
                            string cc = JsonDocument.Parse(web).RootElement.GetProperty("data").GetProperty("access_token").ToString();
                            Log("登录成功: AccessToken=" + cc);
                            //导出cookie
                            File.WriteAllText(Path.Combine(APP_DIR, "BBDownTV.data"), "access_token=" + cc);
                            File.Delete("qrcode.png");
                            break;
                        }
                    }
                }
                catch (Exception e) { LogError(e.Message); }
            });

            rootCommand.Handler = CommandHandler.Create <MyOption>(async(myOption) =>
            {
                await DoWorkAsync(myOption);
            });

            return(await rootCommand.InvokeAsync(args));
        }