예제 #1
0
        //Para cada node(produto) que se encaixa no que se procura adiciona-se numa lista.
        private Boolean VerificarCompatibilidade(string nomeResultado, Quadrinho hq)
        {
            var patternNome   = removerAcentos(hq.nome.ToLower());
            var patternVolume = hq.volume;
            var input         = removerAcentos(nomeResultado.ToLower());

            Match matchNome   = Regex.Match(input, patternNome);
            Match matchVolume = Regex.Match(input, patternVolume);

            if (hq.volume.Length > 0)
            {
                if (matchNome.Success && matchVolume.Success)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                if (matchNome.Success)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
예제 #2
0
        public async Task <IActionResult> Edit(int id, [Bind("IdQuadrinho,Titulo,Descricao,Preco,Quantidade,CaminhoCapa")] Quadrinho quadrinho)
        {
            if (id != quadrinho.IdQuadrinho)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(quadrinho);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!QuadrinhoExists(quadrinho.IdQuadrinho))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(quadrinho));
        }
예제 #3
0
        public List <Quadrinho> ObterQuadrinhos(IConfiguration configuracao, int idPersonagem)
        {
            var total        = ObterTotalQuadrinhos(configuracao, idPersonagem);
            var max          = (int)Enums.Enums.LimiteQuadrinho.Maximo;
            var lsQuadrinhos = new List <Quadrinho>();

            while (total > lsQuadrinhos.Count)
            {
                HttpResponseMessage resposta = cliente.GetAsync(
                    configuracao.GetSection("MarvelComicsAPI:RequestURL").Value +
                    $"characters/{idPersonagem}/comics?ts={ts}&apikey={chavePublica}&hash={hash}&limit={max}&offset={lsQuadrinhos.Count}").Result;

                resposta.EnsureSuccessStatusCode();
                string conteudo = resposta.Content.ReadAsStringAsync().Result;

                dynamic resultado = JsonConvert.DeserializeObject(conteudo);

                for (var x = 0; x < (int)resultado.data.count; x++)
                {
                    Quadrinho quadrinho = new Quadrinho
                    {
                        Id     = resultado.data.results[x].id,
                        Titulo = resultado.data.results[x].title
                    };

                    lsQuadrinhos.Add(quadrinho);
                }
            }
            return(lsQuadrinhos);
        }
예제 #4
0
        public async Task <IActionResult> Create([Bind("Id,Titulo,Descricao,Preco,Quantidade,CaminhoCapa")] Quadrinho quadrinho)
        {
            if (ModelState.IsValid)
            {
                //salvar img no diretorio img
                string wwwRootPath = _hostEnvironment.WebRootPath;
                string fileName    = Path.GetFileNameWithoutExtension(quadrinho.CaminhoCapa.FileName);
                string extension   = Path.GetExtension(quadrinho.CaminhoCapa.FileName);
                string path        = Path.Combine(wwwRootPath + "\\img", fileName + extension);

                using (var fileStream = new FileStream(path, FileMode.Create))
                {
                    await quadrinho.CaminhoCapa.CopyToAsync(fileStream);
                }

                quadrinho.CaminhoFisicoCapa = "\\img\\" + fileName + extension;
                Convert.ToDecimal(quadrinho.Preco).ToString("N2");

                _context.Add(quadrinho);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(quadrinho));
        }
예제 #5
0
        public List <HtmlNode> FiltraResultados(ChromeDriver driver, Quadrinho hq, List <Resultado> resultados, string xpathResultados, string xpathResultadoTitulo, string xpathNenhumResultadoEncontrado)
        {
            //Tranforma o html do resultado em um formato mais facil de ser manipulado.
            var doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(driver.PageSource);

            //Lista dos nodes (produtos) que se deseja.
            List <HtmlNode> listaResultadosDesejados = new List <HtmlNode>();

            //Encontra no html todos os nodes de cada resultado encontrado.
            var nodesResultados = doc.DocumentNode.SelectNodes(xpathResultados);

            if (verificaResultadosEncontrados(doc, xpathNenhumResultadoEncontrado))
            {
                //Para cada um realiza a extração do titulo do produto.
                foreach (var node in nodesResultados)
                {
                    var nodeNome = node.SelectSingleNode(xpathResultadoTitulo);

                    var nomeResultado = nodeNome.InnerText;

                    //Há a verificação se o produto em questão é o que se procura.
                    var verificaResultado = VerificarCompatibilidade(nomeResultado, hq);

                    if (verificaResultado)
                    {
                        listaResultadosDesejados.Add(node);
                    }
                }
            }

            return(listaResultadosDesejados);
        }
예제 #6
0
        static void PolimorfismoComInterface()
        {
            Selo      selo      = new Selo();
            Quadrinho quadrinho = new Quadrinho();

            ImprimirColecao(selo);
            ImprimirColecao(quadrinho);
        }
        public List <Resultado> Extrai(ChromeDriver driver, Quadrinho hq, List <Resultado> resultados, string url)
        {
            var list = FiltraResultados(driver, hq, resultados, getXpathResultados(), getXpathResultadoTitulo(), getXpathNenhumResultadoEncontrado());

            var listResultados = ExtrairResultados(list, driver, resultados, getXpathNodeLink(), getXpathNodePreco(), url, getXpathEditora(), hq, getXpathDisponibilidade());

            return(listResultados);
        }
예제 #8
0
        public ChromeDriver RealizaPesquisa(ChromeDriver driver, Quadrinho hq, string xpathPesquisa, string xpathBotao)
        {
            var stringPesquisa = MontaStringPesquisa(hq);

            //No html do site procura pela barra de pesquisa e insere os parametros desejados.
            driver.FindElementById(xpathPesquisa).SendKeys(stringPesquisa);

            //Encontra e clique no botão pesquisar.
            IWebElement botao = driver.FindElementByXPath(xpathBotao);

            botao.Click();

            return(driver);
        }
        public override string MontaStringPesquisa(Quadrinho hq)
        {
            //Monta a estring de pesquisa que depende do volume ou não.
            if (hq.volume.Length > 0)
            {
                var int1 = Int32.Parse(hq.volume);

                var str = int1.ToString("000");

                return(String.Format(hq.nome + " N ° " + str));
            }
            else
            {
                return(String.Format(hq.nome));
            }
        }
        public List <Resultado> NavegaPesquisa(Quadrinho hq, List <Resultado> resultados)
        {
            var driver = InicializaDriver();

            driver = NavegaPaginaInicial(driver, getUrl());

            driver = RealizaPesquisa(driver, hq, getXpathPesquisa(), getXpathBotao());

            Thread.Sleep(2000);

            //Ao chegar no Html dos resultados, começa a extração dos dados.
            ExtracaoBancaGibi extracao = new ExtracaoBancaGibi();
            var resultado = extracao.Extrai(driver, hq, resultados, getUrl());

            driver.Close();

            return(resultado);
        }
예제 #11
0
        public Quadrinho ObterQuadrinho(IConfiguration configuracao, int id)
        {
            HttpResponseMessage reposta = cliente.GetAsync(
                configuracao.GetSection("MarvelComicsAPI:RequestURL").Value +
                $"comics/{id}?ts={ts}&apikey={chavePublica}&hash={hash}").Result;

            reposta.EnsureSuccessStatusCode();
            string conteudo = reposta.Content.ReadAsStringAsync().Result;

            dynamic resultado = JsonConvert.DeserializeObject(conteudo);

            Quadrinho quadrinho = new Quadrinho
            {
                Id        = resultado.data.results[0].id,
                Titulo    = resultado.data.results[0].title,
                Descricao = resultado.data.results[0].description,
                ImagemUrl = resultado.data.results[0].thumbnail.path + "/portrait_xlarge." + resultado.data.results[0].thumbnail.extension
            };

            return(quadrinho);
        }
예제 #12
0
        public async Task <IActionResult> Create([Bind("IdQuadrinho,Titulo,Preco,Quantidade,IdSituacao")] Quadrinho quadrinho)
        {
            Compra compra = new Compra();


            if (quadrinho != null)
            {
                compra.Titulo     = quadrinho.Titulo;
                compra.Preco      = quadrinho.Preco;
                compra.Quantidade = quadrinho.Quantidade;

                compra.Usuario = User.Identity.Name;

                _context.Add(compra);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Index", "Compras"));
            }

            return(View(Index(quadrinho.IdQuadrinho)));
        }
예제 #13
0
        public ActionResult Post(string text_nome, string text_volume, string text_editora)
        {
            Quadrinho hq = new Quadrinho();

            hq.nome    = text_nome;
            hq.volume  = text_volume;
            hq.editora = text_editora;

            List <Resultado> resultados = new List <Resultado>();

            //Navega e extrai as informações e retorna uma lista de quadrinhos desejados.
            List <Resultado> resultadoComix = new List <Resultado>();

            navegaComix(hq, resultadoComix);
            resultados.AddRange(resultadoComix);

            //Navega e extrai as informações e retorna uma lista de quadrinhos desejados.
            List <Resultado> resultadoExcelsior = new List <Resultado>();

            navegaExcelsior(hq, resultadoExcelsior);
            resultados.AddRange(resultadoExcelsior);

            //Navega e extrai as informações e retorna uma lista de quadrinhos desejados.
            List <Resultado> resultadoBancaGibi = new List <Resultado>();

            navegaBancaGibi(hq, resultadoBancaGibi);
            resultados.AddRange(resultadoBancaGibi);

            //Navega e extrai as informações e retorna uma lista de quadrinhos desejados.
            List <Resultado> resultadoPanini = new List <Resultado>();

            navegaPanini(hq, resultadoPanini);
            resultados.AddRange(resultadoPanini);

            ViewBag.Resultados = resultados;
            return(View("resultados"));
        }
예제 #14
0
        public virtual bool filtraEditora(HtmlDocument doc, Resultado resultado, string xpathNodeEditora, Quadrinho hq)
        {
            var editoraNode = doc.DocumentNode.SelectSingleNode(xpathNodeEditora);

            var editora = editoraNode.InnerText;

            var patternNome = hq.editora.ToLower();
            var input       = editora.ToLower();

            Match match = Regex.Match(input, patternNome);

            if (match.Success)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #15
0
 public virtual string MontaStringPesquisa(Quadrinho hq)
 {
     return(String.Format(hq.nome + " " + hq.volume));
 }
예제 #16
0
        private void navegaPanini(Quadrinho hq, List <Resultado> dadosPanini)
        {
            NavegaPanini excelsior = new NavegaPanini();

            dadosPanini = excelsior.NavegaPesquisa(hq, dadosPanini);
        }
예제 #17
0
        //Após filtrar os resultados da busca, surge uma lista com os produtos que batem com os parametros dados.
        //Ocorre a extração de cada dado dos produtos.
        public List <Resultado> ExtrairResultados(List <HtmlNode> listaResultadosDesejados, ChromeDriver driver, List <Resultado> resultados, string xpathNodeLink, string xpathNodePreco, string url, string xpathNodeEditora, Quadrinho hq, string xpathNodeDisponibilidade)
        {
            Navega navegaResultado = new Navega();

            foreach (var node in listaResultadosDesejados)
            {
                Resultado resultado = new Resultado();

                var nodeLink = node.SelectSingleNode(xpathNodeLink);

                var link = nodeLink.Attributes.First().Value;

                var linkResultado = montaLinkResultado(url, link);

                navegaResultado.NavegaResultado(linkResultado, driver, resultado);

                var doc = new HtmlAgilityPack.HtmlDocument();
                doc.LoadHtml(driver.PageSource);

                if (filtraEditora(doc, resultado, xpathNodeEditora, hq))
                {
                    if (verificarDisponibilidade(xpathNodeDisponibilidade, doc))
                    {
                        var nodePreço = doc.DocumentNode.SelectSingleNode(xpathNodePreco);

                        resultado.preco = nodePreço.InnerText;

                        resultados.Add(resultado);
                    }
                }
            }

            return(resultados);
        }
예제 #18
0
        private static void navegaComix(Quadrinho hq, List <Resultado> dadosComix)
        {
            NavegaComix comix = new NavegaComix();

            dadosComix = comix.NavegaPesquisa(hq, dadosComix);
        }
예제 #19
0
        private static void navegaExcelsior(Quadrinho hq, List <Resultado> dadosExcelsior)
        {
            NavegaExcelsior excelsior = new NavegaExcelsior();

            dadosExcelsior = excelsior.NavegaPesquisa(hq, dadosExcelsior);
        }
예제 #20
0
        private void navegaBancaGibi(Quadrinho hq, List <Resultado> dadosBancaGibi)
        {
            NavegaBancaGibi excelsior = new NavegaBancaGibi();

            dadosBancaGibi = excelsior.NavegaPesquisa(hq, dadosBancaGibi);
        }