public DownloadData(string user = null, string password = null, int?season = null, int?type = null, int?startPage = null, int?endPage = null, int?taskNumber = null, DownloadData dData = null) { if (dData == null) { User = user; Password = password; Season = season; Type = type; StartPage = startPage; EndPage = endPage; TaskNumber = taskNumber; } else { if (!string.IsNullOrWhiteSpace(dData.User) && user == null) { User = dData.User; } else { User = user; } if (!string.IsNullOrWhiteSpace(dData.Password) && password == null) { Password = dData.Password; } else { Password = password; } if (dData.Season != null && season == null) { Season = dData.Season; } else { Season = season; } if (dData.Type != null && type == null) { Type = dData.Type; } else { Type = type; } if (dData.StartPage != null && startPage == null) { StartPage = dData.StartPage; } else { StartPage = startPage; } if (dData.EndPage != null && endPage == null) { EndPage = dData.EndPage; } else { EndPage = endPage; } if (dData.TaskNumber != null && taskNumber == null) { TaskNumber = dData.TaskNumber + 1; } else { TaskNumber = taskNumber; } } }
private async void btnDownload_Click(object sender, EventArgs e) { string email = txtEMail.Text; string password = txtPassword.Text; //Task<int> response = await WebOps.CheckCredentials(email, password); int response = await WebOps.CheckCredentials(email, password); switch (response) { case 1: MessageBox.Show("You must enter an email.", "MWO Credential Error", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); return; case 2: MessageBox.Show("You must enter a password.", "MWO Credential Error", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); return; case 3: MessageBox.Show("Your MWO Credentials are invalid." + Environment.NewLine + "Check your eMail and Password and try again.", "MWO Credential Error", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); return; case 4: break; case 5: MessageBox.Show("There has been an error while trying to connect." + Environment.NewLine + "Check your connection and try again.", "MWO Credential Error", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1); return; } int tempInt = 0; int season = int.TryParse(cmbSeasonNumber.Text, out tempInt) ? tempInt : ConfigFile.SEASON_LAST; if (string.IsNullOrWhiteSpace(email) || string.IsNullOrWhiteSpace(password)) { if (string.IsNullOrWhiteSpace(email)) { Mex.AddMessage("Email field is not valid.", Mex.ERROR); } if (string.IsNullOrWhiteSpace(password)) { Mex.AddMessage("Password field is not valid.", Mex.ERROR); } Mex.AddMessage("Will not proceed.", Mex.WARNING); Mex.PrintErrorMessagesInForm(); Mex.RemoveAll(); return; } // saves email & password to a local file if (ckbSaveCredentials.Checked) { if (!new FileInfo(ConfigFile.LOCAL_CREDENTIALS).Exists) { File.WriteAllLines(ConfigFile.LOCAL_CREDENTIALS, new string[] { email, password }); } else { try { File.Delete(ConfigFile.LOCAL_CREDENTIALS); } catch { } File.WriteAllLines(ConfigFile.LOCAL_CREDENTIALS, new string[] { email, password }); } } DownloadData baseData = new DownloadData(user: email, password: password, season: season); if (chbGeneral.Checked) { int startGeneral; int endGeneral; if (chbFullGeneral.Checked) { startGeneral = (int)ConfigFile.MIN_PAGES - 1; endGeneral = ConfigFile.MAX_PAGES; } else { startGeneral = int.TryParse(txtStartGeneral.Text, out tempInt) ? tempInt - 1 : (int)ConfigFile.MIN_PAGES; endGeneral = int.TryParse(txtEndGeneral.Text, out tempInt) ? tempInt - 1 : ConfigFile.MAX_PAGES; } WebOps.LoginAndDownload(dData: baseData, type: 0, startPage: startGeneral, finishPage: endGeneral, bar: prbPageProgressGeneral, writeDB: true); } if (chbLight.Checked) { int startLight; int endLight; if (chbFullLight.Checked) { startLight = (int)ConfigFile.MIN_PAGES - 1; endLight = ConfigFile.MAX_PAGES; } else { startLight = int.TryParse(txtStartLight.Text, out tempInt) ? tempInt - 1: (int)ConfigFile.MIN_PAGES; endLight = int.TryParse(txtEndLight.Text, out tempInt) ? tempInt - 1 : ConfigFile.MAX_PAGES; } WebOps.LoginAndDownload(dData: baseData, type: 1, startPage: startLight, finishPage: endLight, bar: prbPageProgressLight); } if (chbMedium.Checked) { int startMedium; int endMedium; if (chbFullMedium.Checked) { startMedium = (int)ConfigFile.MIN_PAGES - 1; endMedium = ConfigFile.MAX_PAGES; } else { startMedium = int.TryParse(txtStartMedium.Text, out tempInt) ? tempInt - 1: (int)ConfigFile.MIN_PAGES; endMedium = int.TryParse(txtEndMedium.Text, out tempInt) ? tempInt - 1 : ConfigFile.MAX_PAGES; } WebOps.LoginAndDownload(dData: baseData, type: 2, startPage: startMedium, finishPage: endMedium, bar: prbPageProgressMedium); } if (chbHeavy.Checked) { int startHeavy; int endHeavy; if (chbFullHeavy.Checked) { startHeavy = (int)ConfigFile.MIN_PAGES - 1; endHeavy = ConfigFile.MAX_PAGES; } else { startHeavy = int.TryParse(txtStartHeavy.Text, out tempInt) ? tempInt - 1: (int)ConfigFile.MIN_PAGES; endHeavy = int.TryParse(txtEndHeavy.Text, out tempInt) ? tempInt - 1 : ConfigFile.MAX_PAGES; } WebOps.LoginAndDownload(dData: baseData, type: 3, startPage: startHeavy, finishPage: endHeavy, bar: prbPageProgressHeavy); } if (chbAssault.Checked) { int startAssault; int endAssault; if (chbFullAssault.Checked) { startAssault = (int)ConfigFile.MIN_PAGES - 1; endAssault = ConfigFile.MAX_PAGES; } else { startAssault = int.TryParse(txtStartAssault.Text, out tempInt) ? tempInt - 1: (int)ConfigFile.MIN_PAGES; endAssault = int.TryParse(txtEndAssault.Text, out tempInt) ? tempInt - 1 : ConfigFile.MAX_PAGES; } WebOps.LoginAndDownload(dData: baseData, type: 4, startPage: startAssault, finishPage: endAssault, bar: prbPageProgressAssault); } }
/// <summary> /// Downloads all data inside a range determined by /// parameters. /// </summary> /// <param name="season"></param> /// <param name="type"></param> /// <param name="email"></param> /// <param name="password"></param> /// <param name="startPage"></param> /// <param name="finishPage"></param> /// <param name="taskNumber"></param> /// <param name="dData"></param> /// <param name="bar"></param> /// <param name="writeDB"></param> public static async void LoginAndDownload(int?season = null, int?type = null, string email = null, string password = null, int?startPage = null, int?finishPage = null, int?taskNumber = null, DownloadData dData = null, ProgressBar bar = null, bool writeDB = false) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3; ConfigFile.IncrementTaskStarted(); if (dData != null) { if (dData.Season != null && season == null) { season = dData.Season; } if (dData.Type != null && type == null) { type = dData.Type; } if (dData.User != null && email == null) { email = dData.User; } if (dData.Password != null && password == null) { password = dData.Password; } if (dData.StartPage != null && startPage == null) { startPage = dData.StartPage; } if (dData.EndPage != null && finishPage == null) { finishPage = dData.EndPage; } if (dData.TaskNumber != null && taskNumber == null) { taskNumber = dData.TaskNumber; } } if (string.IsNullOrWhiteSpace(email)) { email = ConfigFile.DEFAULT_USER; } if (string.IsNullOrWhiteSpace(password)) { password = ConfigFile.DEFAULT_PASS; } if (season == null) { season = 1; } if (type == null) { type = 0; } if (startPage == null) { startPage = ConfigFile.MIN_PAGES; } if (finishPage == null) { finishPage = ConfigFile.MAX_PAGES; } if (string.IsNullOrWhiteSpace(email) || string.IsNullOrWhiteSpace(password)) { if (string.IsNullOrWhiteSpace(email)) { Mex.AddMessage("Task " + (taskNumber != null ? taskNumber : 0) + " is missing the user email. Skipping", Mex.ERROR); } if (string.IsNullOrWhiteSpace(password)) { Mex.AddMessage("Task " + (taskNumber != null ? taskNumber : 0) + " is missing the user password. Skipping", Mex.ERROR); } Mex.PrintErrorMessagesInForm(); Mex.RemoveAll(); return; } // END VALIDATION SECTION string typeStr = null; switch (type) { case 0: typeStr = "GENERAL"; break; case 1: typeStr = "LIGHT"; break; case 2: typeStr = "MEDIUM"; break; case 3: typeStr = "HEAVY"; break; case 4: typeStr = "ASSAULT"; break; } string fileName; if (season < 10) { fileName = "S0" + season + "_" + typeStr + ".txt"; } else { fileName = "S" + season + "_" + typeStr + ".txt"; } //string DirDestination = @"C:\TEST\Output\"; string DirDestination = ConfigFile.DIRECTORY_OUTPUT.FullName; FileInfo fileOutput = new FileInfo(Path.Combine(DirDestination, fileName)); FileOps.CheckFile(fileOutput); season = season - 1; //adjust to 'base 0' web request finishPage += 1; //adjust to include last page string BaseAddress = "https://mwomercs.com/do/login"; var cookieContainer = new CookieContainer(); Uri uri = new Uri("https://mwomercs.com/profile/leaderboards"); var handler = new HttpClientHandler(); handler.CookieContainer = cookieContainer; handler.CookieContainer.Add(uri, new System.Net.Cookie("leaderboard_season", season.ToString())); using (var client = new HttpClient(handler) { BaseAddress = new Uri(BaseAddress) }) { client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml")); HttpResponseMessage risposta = await client.PostAsync(BaseAddress, new FormUrlEncodedContent( new[] { new KeyValuePair <string, string> ("email", email), new KeyValuePair <string, string> ("password", password) }) ); string responseBodyAsText = await risposta.Content.ReadAsStringAsync(); Logger.PrintF(new FileInfo(Path.Combine(DirDestination, fileName)).FullName, "** STARTING DOWNLOAD", true); string ownRank = "<tr class=\"yourRankRow\">"; string endPages = "<td colspan='10'>No results found"; string resp = null; int lastPage = 0; int startPageReal = (startPage == null ? 0 : (int)startPage); int finishPageReal = (finishPage == null ? 10000 : (int)finishPage); bar.Maximum = finishPageReal - startPageReal; bar.Value = 0; for (int page = startPageReal; page < finishPageReal; page++) { risposta = await client.GetAsync("https://mwomercs.com/profile/leaderboards?page=" + page.ToString() + "&type=" + type.ToString()); responseBodyAsText = await risposta.Content.ReadAsStringAsync(); resp = DataOps.ParseHTML(responseBodyAsText); if (resp.Contains(ownRank)) { resp = resp.Replace(ownRank, string.Empty); } if (resp.Contains(endPages)) { lastPage = page; resp = resp.Replace(endPages, string.Empty); Logger.PrintF(Path.Combine(DirDestination, fileName), resp, false); if (bar != null) { bar.Value = bar.Maximum; } break; } Logger.PrintF(Path.Combine(DirDestination, fileName), resp, false); if (bar != null) { bar.Value++; } } Logger.PrintF(Path.Combine(DirDestination, fileName), "** FINISH DOWNLOADING", true); } if (writeDB) { //DataOps.WriteToDB(new FileInfo(Path.Combine(DirDestination, fileName).ToString()), (int)season + 1, (int)type); } ConfigFile.IncrementTaskFinished(); }