public static async Task Refresh() { Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; #if DEBUG Debug.WriteLine("Refresh() called."); #endif DatabaseHelper helper = new DatabaseHelper(); string username = "******"; string password = "******"; string URL = "http://www.romain-rolland-gymnasium.eu/schuelerbereich/svplaneinseitig/Index.html"; List <string> URLs = await GetURLs(URL, username, password); int pagesCount = 0; #if DEBUG Debug.WriteLine("URL Count: " + URLs.Count); #endif for (int i = 1; i <= URLs.Count; i++) { String url = URLs.ElementAt(i - 1); try { HttpClient http = new HttpClient(); string authInfo = username + ":" + password; authInfo = Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo)); http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authInfo); var response = await http.GetByteArrayAsync(url); String source = Encoding.GetEncoding("ISO8859-1").GetString(response, 0, response.Length - 1); source = WebUtility.HtmlDecode(source); HtmlDocument result = new HtmlDocument(); result.LoadHtml(source); helper.DeleteTable(i); //START SQL String currentClass = "Aufsicht"; String currentLesson = ""; #if DEBUG Debug.WriteLine("One URL loaded."); int t = 0; #endif foreach (HtmlNode table in result.DocumentNode.SelectNodes("//table")) { foreach (HtmlNode row in table.SelectNodes("tr")) { #if DEBUG t++; #endif List <string> rowText = new List <string>(); List <string> rowHtml = new List <string>(); foreach (HtmlNode cell in row.SelectNodes("td")) { rowText.Add(cell.InnerText); rowHtml.Add(cell.OuterHtml); } #if DEBUG //Debug.WriteLine(rowHtml.ElementAt(0)); #endif if (!(rowText.ElementAt(0).Contains(" "))) { //All rows will need a class name, otherwise it will be much more difficult to parse the data if (!rowText.ElementAt(0).Contains("Kl")) { //checking for irrelevant data (such as KL., which appears at the top.) currentClass = rowText.ElementAt(0); if (rowText.ElementAt(1).Contains(" ")) { helper.InsertData(i, rowText.ElementAt(0), currentLesson, rowText.ElementAt(2), rowText.ElementAt(3), rowText.ElementAt(4), rowText.ElementAt(5), rowText.ElementAt(6), rowText.ElementAt(7)); //inserting all the data into the SQL database } else { helper.InsertData(i, rowText.ElementAt(0), rowText.ElementAt(1), rowText.ElementAt(2), rowText.ElementAt(3), rowText.ElementAt(4), rowText.ElementAt(5), rowText.ElementAt(6), rowText.ElementAt(7)); currentLesson = rowText.ElementAt(1); } } } else { if (rowText.ElementAt(1).Contains(" ")) { helper.InsertData(i, currentClass, currentLesson, rowText.ElementAt(2), rowText.ElementAt(3), rowText.ElementAt(4), rowText.ElementAt(5), rowText.ElementAt(6), rowText.ElementAt(7)); //inserting all the data into the SQL database } else { helper.InsertData(i, currentClass, rowText.ElementAt(1), rowText.ElementAt(2), rowText.ElementAt(3), rowText.ElementAt(4), rowText.ElementAt(5), rowText.ElementAt(6), rowText.ElementAt(7)); currentLesson = rowText.ElementAt(1); } } } } #if DEBUG Debug.WriteLine("Iterations: " + t); #endif //END SQL string outStr = ScheduleHandler.RemLB(result.DocumentNode.SelectSingleNode("//h2").InnerText); if (!outStr.Contains("erscheint")) { localSettings.Values["Day" + i + "_Date"] = outStr; outStr = ScheduleHandler.RemLB(result.DocumentNode.SelectSingleNode("//h1").InnerText); localSettings.Values["Day" + i + "_UpdateDate"] = outStr; //END SAVING DATES pagesCount = i; } } catch (Exception e) { #if DEBUG Debug.WriteLine("Error loading individual page: " + e.Message + e.StackTrace); #endif //ContentDialog noWifiDialog = new ContentDialog() //{ // Title = "Merkwürdiger Fehler", // Content = "Fehler beim laden einer einzelnen Seite.\n\n Fehlermeldung:\n" + e.Message + e.StackTrace, // CloseButtonText = "Ok" //}; //await noWifiDialog.ShowAsync(); } } localSettings.Values[PAGES_COUNT] = pagesCount; }
private static async Task <List <string> > GetURLs(string url, string usrName, string pw) { try { #if DEBUG Debug.WriteLine("Attempting to load initial page."); #endif HttpClient http = new HttpClient(); string authInfo = usrName + ":" + pw; authInfo = Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo)); http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authInfo); var response = await http.GetByteArrayAsync(url); String source = Encoding.GetEncoding("utf-8").GetString(response, 0, response.Length - 1); source = WebUtility.HtmlDecode(source); HtmlDocument result = new HtmlDocument(); result.LoadHtml(source); #if DEBUG Debug.WriteLine("Complete."); #endif List <string> outList = new List <string>(); foreach (HtmlNode link in result.DocumentNode.SelectNodes("//a[@href]")) { string hrefValue = link.GetAttributeValue("href", string.Empty); outList.Add("http://www.romain-rolland-gymnasium.eu/schuelerbereich/svplaneinseitig/" + hrefValue); #if DEBUG Debug.WriteLine(hrefValue); #endif } outList.RemoveAt(outList.Count - 1); string date = ScheduleHandler.RemLB(result.DocumentNode.SelectSingleNode("//h1").InnerText); Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; localSettings.Values["UpdateDate"] = date; return(outList); } catch (Exception e) { #if DEBUG Debug.WriteLine("PAGE NOT LOADED: " + e.Message + e.StackTrace); #endif ContentDialog noWifiDialog = new ContentDialog() { Title = "Verbindungsfehler", Content = "Bitte Netzwerk überprüfen und erneut versuchen.\n\n Fehlermeldung:\n" + e.Message + e.StackTrace, CloseButtonText = "Ok" }; await noWifiDialog.ShowAsync(); return(null); } }