public async Task StartScrapping() { Notifier?.Invoke(StatusApplication.Started, string.Empty); //Colorful.Console.WriteAscii("KuantoKusta Scrapper", Color.FromArgb(244, 212, 255)); //Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Bem vindo ao Programa", M_Options.StyleConsole); //} Notifier?.Invoke(StatusApplication.StartedScrapping, string.Empty); //Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Vamos proceder ao ínicio da operação de obter os produtos e os respetivos preços", M_Options.StyleConsole); if (dt == null || dt.Rows.Count == 0) { //Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [WARNING] Não foi possível obter nenhum link", M_Options.StyleConsole); //Colorful.Console.WriteStyled($"[{DateTime.Now:HH:mm:ss}] Pretende adicionar algum link através da consola? (Y/N): ", M_Options.StyleConsole); Notifier?.Invoke(StatusApplication.NoWebsiteFound, string.Empty); } else { Notifier?.Invoke(StatusApplication.WebsitesFound, string.Empty); } // // Variáveis locais // string ch; // int x; // string link = string.Empty; // //do // //{ // x = Colorful.Console.Read(); // //try // //{ // ch = Char.ToString(Convert.ToChar(x)); // if (ch.ToLower() == "Y".ToLower()) // { // // Inserir na base de dados // do // { // // Criar detalhes do website para guardar na base de dados // WebsiteDetails websiteDetails = new WebsiteDetails(); // Colorful.Console.WriteStyled($"[{DateTime.Now:HH:mm:ss}] Insira aqui o link (Pressiona ESC para cancelar): ", M_Options.StyleConsole); // websiteDetails.WebsiteUrl = ReadLineWithCancel(); // Colorful.Console.WriteLine(); // Colorful.Console.WriteStyled($"[{DateTime.Now:HH:mm:ss}] Insira o nome da Categoria associado ao link colocado acima: ", M_Options.StyleConsole); // websiteDetails.Category = Colorful.Console.ReadLine(); // if (link != null) // { // AcessDataBase.InsertWebsiteDetailsIntoDataBase(websiteDetails); // Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Link Foi adicionado com sucesso à base de dados", M_Options.StyleConsole); // } // } while (link != null); // if (link == null && ((dt = AcessDataBase.GetAllUrl()) == null) && dt.Rows.Count == 0) // { // Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [CRITICAL] Nenhum link foi adicionado para fazer a verificação", M_Options.StyleConsole); // Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] O programa vai encerrar", M_Options.StyleConsole); // Thread.Sleep(1000); // return; // } // else // { // PrintLinksToBeParsed(M_Options.StyleConsole, dt); // } // } // else if (ch.ToLower() == "N".ToLower()) // { // Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] O programa vai encerrar", M_Options.StyleConsole); // Thread.Sleep(1000); // return; // } // //} // //catch (OverflowException e) // //{ // // Colorful.Console.WriteLine("{0} Value read = {1}.", e.Message, x); // // ch = Char.MinValue; // // Colorful.Console.WriteLine(m1); // //} // //} while (ch != '+'); // } // else // { // PrintLinksToBeParsed(M_Options.StyleConsole, dt); // } //} ////Funcao local que imprime os links obtidos //static void PrintLinksToBeParsed(StyleSheet styleSheet, DataTable dt) //{ // Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Obtidos com sucesso os links que serão submetidos ao scrapper", styleSheet); // Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Número de Links encontrados: {dt.Rows.Count}", styleSheet); // var table = new ConsoleTable("ID", "WebsiteURL", "Categoria"); // foreach (DataRow dataRow in dt.Rows) // { // table.AddRow(dataRow.ItemArray); // } // table.Write(); // Colorful.Console.WriteLine(); //} int numberOfElementsInsertedIntoTable = 0; foreach (DataRow row in dt.Rows) { int SearchID = Int32.Parse(row["ID_Pesquisa"].ToString()); string siteUrl = row["SiteUrl"].ToString(); string Categoria = row["Nome"].ToString(); Notifier?.Invoke(StatusApplication.StartedScrapping, Categoria); //Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Preparar para fazer o parsing dos produtos dentro da categoria: {Categoria}", Program.M_Options.StyleConsole); List <ProductDetails> productDetails = await scrappingPage.ScrapeWebsiteAsync(siteUrl); //Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Todas as páginas foram lidas referentes à categoria {Categoria}", Program.M_Options.StyleConsole); Notifier?.Invoke(StatusApplication.FinishedScrapping, Categoria); foreach (var produto in productDetails) { if (AcessDataBase.InsertProductDetailsIntoDataBase(produto, SearchID)) { numberOfElementsInsertedIntoTable++; //Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Adicionado à base de dados: {produto.ProductName} ", Program.M_Options.StyleConsole); Notifier?.Invoke(StatusApplication.DataBaseUpdated, produto.ProductName); } } } //Colorful.Console.WriteLineStyled($"[{DateTime.Now:HH:mm:ss}] [INFO] Atualizado a base de dados com sucesso. Foram inseridos {numberOfElementsInsertedIntoTable} produtos na tabela de dados", Program.M_Options.StyleConsole); Notifier?.Invoke(StatusApplication.Terminated, numberOfElementsInsertedIntoTable.ToString()); }