private string ObtenerDatosResultados(RestClient client, PeticionTituloSuneduDto peticion, string captcha, string token)
        {
            var resultado = default(string);
            var request   = new RestRequest($"consulta", Method.POST);

            request.AddHeader("Referer", peticion.UrlSunedu);
            request.AddHeader("Upgrade-Insecure-Requests", "1");
            request.AddHeader("Cache-Control", "max-age=0");
            request.AddHeader("Accept", "application/json, text/javascript, */*; q=0.01");
            request.AddHeader("Accept-Encoding", "gzip, deflate, br");
            request.AddHeader("Accept-Language", "en-US,en;q=0.9,es-419;q=0.8,es;q=0.7,zh;q=0.6");


            request.AddParameter("doc", peticion.Dni);
            request.AddParameter("opcion", "PUB");
            request.AddParameter("_token", token);
            request.AddParameter("icono", "");
            request.AddParameter("captcha", captcha);

            var response = client.Execute(request);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                resultado = response.Content;
            }

            return(resultado);
        }
        private string ObtenerRutaFotoCaptcha(RestClient client, PeticionTituloSuneduDto peticion)
        {
            var ruta = $@"{peticion.RutaFolderTrabajo}{Guid.NewGuid()}.png";

            Random r    = new Random();
            int    rInt = r.Next(400, 997);

            if (System.IO.File.Exists(ruta))
            {
                System.IO.File.Delete(ruta);
            }

            var request = new RestRequest($"simplecaptcha?date={rInt}");

            byte[] response = client.DownloadData(request);

            if (response == null)
            {
                return(null);
            }


            System.IO.File.WriteAllBytes(ruta, response);

            return(ruta);
        }
        private string ObtenerResultado(PeticionTituloSuneduDto peticion)
        {
            var client = new RestClient(peticion.UrlSunedu)
            {
                UserAgent = peticion.UserAgent
            };

            var token = ObtenerToken(client);

            if (string.IsNullOrWhiteSpace(token))
            {
                return(null);
            }


            var captcha = ObtenerCaptcha(client, peticion);

            if (string.IsNullOrWhiteSpace(captcha))
            {
                return(null);
            }

            var resultados = ObtenerDatosResultados(client, peticion, captcha, token);

            return(resultados);
        }
        public async Task <List <TituloSuneduDto> > ListarTitulos(PeticionTituloSuneduDto peticion)
        {
            peticion.RutaFolderTrabajo = _suneduConfiguracion.RutaFolderTrabajo;
            peticion.RutaTesseract     = _suneduConfiguracion.RutaTesseract;
            peticion.UrlSunedu         = _suneduConfiguracion.UrlSunedu;
            peticion.UserAgent         = _suneduConfiguracion.UserAgent;

            var operacion = await _suneduServicio.ListarTitulos(peticion);

            return(ObtenerResultadoOGenerarErrorDeOperacion(operacion));
        }
        private string ObtenerCaptcha(RestClient client, PeticionTituloSuneduDto peticion)
        {
            var ruta = ObtenerRutaFotoCaptcha(client, peticion);

            if (string.IsNullOrWhiteSpace(ruta))
            {
                return(null);
            }

            var captcha = ObtenerCodigo(ruta, peticion);

            return(captcha);
        }
        private string ObtenerCodigo(string rutaImagen, PeticionTituloSuneduDto peticion)
        {
            var rutaFinal = $@"{peticion.RutaFolderTrabajo}{Path.GetFileNameWithoutExtension(rutaImagen)}";
            var comando   = $@"""{rutaImagen}"" ""{rutaFinal}""";

            var procesoInformacion = new ProcessStartInfo(peticion.RutaTesseract)
            {
                Arguments       = comando,
                UseShellExecute = false,
                CreateNoWindow  = true
                                  //,
                                  //RedirectStandardOutput = true,
                                  //RedirectStandardError = true
            };

            var cmd = Process.Start(procesoInformacion);

            cmd.WaitForExit();

            var texto       = System.IO.File.ReadAllText($@"{rutaFinal}.txt");
            var textoLimpio = LimpiarTexto(texto);

            return(textoLimpio);
        }
        public async Task <OperacionDto <List <TituloSuneduDto> > > ListarTitulos(PeticionTituloSuneduDto peticion)
        {
            var resultados = await ObtenerDeCache(peticion.Dni);

            bool fueDeCache = true;

            if (string.IsNullOrWhiteSpace(resultados))
            {
                resultados = ObtenerResultado(peticion);
                fueDeCache = false;
            }


            if (string.IsNullOrWhiteSpace(resultados))
            {
                return(new OperacionDto <List <TituloSuneduDto> >(CodigosOperacionDto.NoExiste, "No se encontró información"));
            }

            if (!string.IsNullOrWhiteSpace(resultados) && resultados.ToLower().Contains("captcha es incorrecto".ToLower()))
            {
                return(new OperacionDto <List <TituloSuneduDto> >(CodigosOperacionDto.CaptchaIncorrecto, "No se puede acceder a la info"));
            }

            var datoGuardar = new StringBuilder(resultados);


            resultados = resultados.Replace("\t", "");
            resultados = resultados.Replace("<b>", "");
            resultados = resultados.Replace(@"\u00d1", "Ñ");
            resultados = resultados.Replace(@"\u00c1", "Á");
            resultados = resultados.Replace(@"\u00c9", "É");
            resultados = resultados.Replace(@"\u00cd", "Í");
            resultados = resultados.Replace(@"\u00d3", "Ó");
            resultados = resultados.Replace(@"\u00da", "Ú");

            resultados = resultados.Substring(1, resultados.Length - 2).Replace("\\", "");


            var infoScraper = JsonConvert.DeserializeObject <List <TituloScraperDto> >(resultados);

            if (infoScraper == null)
            {
                return(new OperacionDto <List <TituloSuneduDto> >(CodigosOperacionDto.NoExiste, "No se encontró información"));
            }

            if (!fueDeCache)
            {
                var entidad = await _suneduTituloDao.Obtener(peticion.Dni);

                if (entidad == null)
                {
                    entidad = new SuneduTitulo()
                    {
                        Dni   = peticion.Dni,
                        Datos = datoGuardar.ToString()
                    };
                    await _suneduTituloDao.Insertar(entidad);
                }
                else
                {
                    entidad.Datos       = datoGuardar.ToString();
                    entidad.Actualizado = DateTime.UtcNow;
                    await _suneduTituloDao.Actualizar(entidad);
                }
            }


            return(new OperacionDto <List <TituloSuneduDto> >(infoScraper.Select(e => new TituloSuneduDto()
            {
                FechaDiploma = e.DiplFec,
                Institucion = e.Univ,
                NombreCompleto = e.Nombre,
                Titulo = e.TituloRev
            }).ToList()));
        }