/*Inica o processamento do robot*/ public static void Init() { RService.Log("(Init) " + Name + ": Começando o processamento... " + "at {0}", Path.GetTempPath() + Name + ".txt"); try { AllLinks = new List <string>(); Orgao = OrgaoController.FindById(27); Modalidades = new List <Modalidade>(); Lote = LoteController.CreateLote(43, 506); Repo = new LicitacaoRepository(); Modalidades.Add(ModalidadeController.FindById(24)); Modalidades.Add(ModalidadeController.FindById(22)); CurrentPage = 1; /*Pega o html da primeira página*/ HtmlDocument pagehtml = WebHandle.GetHtmlHandleCaptcha(Constants.CMG_SITE + Constants.CMG_LINK_PAGINATION, Encoding.GetEncoding("ISO-8859-1"), "textoConfirmacao", Constants.CMG_CAPTCHA, GetParametersPagination(string.Format(Constants.CMG_PARAMETERS_PAGINATION, CurrentPage, DateTime.Now.Year))); /*Numero de paginas encontradas*/ int numberPages = pagehtml.DocumentNode.Descendants("a").Where(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.Contains("tabConsultaPregoes_pagina")).ToList().Count; /*Caso existam poucas licitações, ao ponto de só haver uma página, o robô estava retornando numberPages = 0. Com a limitação abaixo, ele sempre vai pegar as licitações independente do pouco número de licitações*/ if (numberPages == 0) { numberPages = 1; } /*Percorre todas as paginas*/ while (pagehtml != null && CurrentPage <= numberPages) { /*Pega todas os pregões de cada página*/ GetPregoes(pagehtml); /*Numero da próxima pagina*/ CurrentPage++; /*Pega o html da próxima página*/ pagehtml = WebHandle.GetHtmlHandleCaptcha(Constants.CMG_SITE + Constants.CMG_LINK_PAGINATION, Encoding.GetEncoding("ISO-8859-1"), "textoConfirmacao", Constants.CMG_CAPTCHA, GetParametersPagination(string.Format(Constants.CMG_PARAMETERS_PAGINATION, CurrentPage, DateTime.Now.ToString("yyyy")))); NumCaptcha++; } if (Directory.Exists(PathEditais)) { Directory.Delete(PathEditais, true); } } catch (Exception e) { RService.Log("Exception (Init)" + Name + ":" + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt"); } finally { if (NumLicitacoes <= 0) { LoteController.Delete(Lote); } } }
/*Inicia o processamento do robot*/ private static void Init() { RService.Log("(Init) " + Name + ": Começando o processamento.. " + "at {0}", Path.GetTempPath() + Name + ".txt"); try { ModalidadeCount = 0; Modalidades = new List <Modalidade>(); Modalidades.Add(ModalidadeController.FindById(1)); Modalidades.Add(ModalidadeController.FindById(14)); Orgao = OrgaoController.FindById(388); Lote = LoteController.CreateLote(43, 507); /*Lista das licitacoes que já existem para bec.sp.gov*/ //AlreadyInserted = LicitacaoController.GetAlreadyInserted(Constants.BEC_SITE); /*Lista das cidades para o estado*/ Cidades = CidadeController.GetNameToCidade(Constants.BEC_UF); //Define os pontos de partida List <string> urls = new List <string>(); urls.Add(Constants.BEC_LINK_MODALIDADE_2); urls.Add(Constants.BEC_LINK_MODALIDADE_5); /*Percorre cada modalidade. Como o portal BEC usa javascript para gerar as licitações, foi preciso * criar dois caminhos, uma para cada modalidade: para Carta Convite, usa-se o HtmlAgilityPack e * para Dispensa de Licitação, usa-se o Selenium (PhantomJS), que consegue lidar com javascript*/ foreach (string uri in urls) { if (!uri.Contains("Dispensa")) { GetConvites(uri); } else { GetDispensas(uri); } } if (Directory.Exists(PathEdital)) { Directory.Delete(PathEdital, true); } } catch (Exception e) { RService.Log("Exception (Init)" + Name + ":" + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt"); } finally { if (NumLicitacoes <= 0) { LoteController.Delete(Lote); } if (web != null) { web.Close(); } } }
/*Inicia o processamento do robot*/ private static void Init() { RService.Log("(Init) " + Name + ": Começando o processamento.. " + "at {0}", Path.GetTempPath() + Name + ".txt"); try { AlreadyColected = new HashSet <long>(); /*Lista das licitacoes que já existem para bec.sp.gov*/ //AlreadyInserted = LicitacaoController.GetAlreadyInserted(Constants.BEC_SITE); /*Lista das cidades para o estado*/ Cidades = CidadeController.GetNameToCidade(Constants.BEC_UF); Modalidade = ModalidadeController.FindById(24); Orgao = OrgaoController.FindById(388); Lote = LoteController.CreateLote(43, 507); Repo = new LicitacaoRepository(); //Define os pontos de partida, uri e argumentos do post List <string> urls = new List <string>(); urls.Add(Constants.BEC_LINK_MODALIDADE_71); urls.Add(Constants.BEC_LINK_MODALIDADE_72); /*Percorre cada modalidade*/ foreach (string uri in urls) { /*Lista dos parametros do post*/ NameValueCollection post = new NameValueCollection(); /*Percorre as naturezas de cada modalidade*/ foreach (var attr in WebHandle.GetHtmlDocOfPage(uri, post).DocumentNode.Descendants("span").Where(x => x.Attributes.Contains("id") && x.Attributes["id"].Value.ToString().Contains(Constants.BEC_ID_NATUREZA))) { string urin = attr.SelectSingleNode("a").Attributes["href"].Value.ToString(); int page = 2, count = 20; /*Percorre as páginas para cada uma das naturezas (ex: 1;2;3)*/ HtmlDocument pagehtml = WebHandle.GetHtmlDocOfPage(urin, post); while (pagehtml != null && count == 20) { RService.Log("(GetOC) " + Name + ": Percorrendo os links da página.. " + (page - 1) + " at {0}", Path.GetTempPath() + Name + ".txt"); //Pega as licitações de cada página (OC's) count = GetOC(pagehtml); //Pega o html da próxima página pagehtml = WebHandle.GetHtmlDocOfPage(urin, GetFormParameters(pagehtml, page)); //Numero da proxima página page++; } } } } catch (Exception e) { RService.Log("Exception (Init) " + Name + ": " + e.Message + " / " + e.StackTrace + " / " + e.InnerException + " at {0}", Path.GetTempPath() + Name + ".txt"); } finally { if (NumLicitacoes <= 0) { LoteController.Delete(Lote); } } }