Exemplo n.º 1
0
        /// <summary>
        /// Recorremos el html seleccionado con los selectores los divs que necesitamos
        /// </summary>
        /// <param name="dict_efemerides"></param>
        /// <param name="html_document"></param>
        /// <param name="colecctionFechas"></param>
        /// <returns></returns>
        private List <Efemeride> IterarCollection(HtmlDocument html_document)
        {
            List <Efemeride> efemerides = new List <Efemeride>();

            //Recorremos la lista con las efemerides y con .Zip unimos la fecha con la efemerides para guardarlas juntas
            foreach (var fecha_efemerides in html_document.DocumentNode.SelectNodes("//div[@class='mw-parser-output']/h2/span")
                     .Zip(html_document.DocumentNode.SelectNodes("//div[@class='mw-parser-output']/ul"),
                          Tuple.Create))
            {
                Efemeride efemeridesClass = new Efemeride();
                // Obtenemos la fecha
                efemeridesClass.Fecha = DateTime.Parse(fecha_efemerides.Item1.InnerText);
                // Obtenemos la efemeride
                efemeridesClass.Texto = fecha_efemerides.Item2.InnerText;
                // Añadimos a la lista fecha + efemerides
                efemerides.Add(efemeridesClass);

#if DEBUG
                Console.WriteLine(String.Format("{0}\n{1}", efemeridesClass.Fecha.ToString("M"), efemeridesClass.Texto));
#endif
            }

            return(ProcessResults(efemerides));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creamos un lista de efemerides y lo recorremos para separar Fechas de Efemerides
        /// y quitar espacios en blanco, texto sobrante etc..
        /// </summary>
        /// <param name="dict_efemerides"></param>
        /// <returns></returns>
        internal List <Efemeride> ProcessResults(List <Efemeride> dict_efemerides)
        {
            string[] CacheEfemeride = new string[10];
            // Recorremos la lista total de las efemerides
            List <Efemeride> processed = new List <Efemeride>();

            foreach (var item in dict_efemerides)
            {
                // Si hay alguna string con el texto '(en la imagen)' lo eliminamos
                if (item.Texto.Trim().Replace(".—", "-").Contains("(en la imagen)"))
                {
                    CacheEfemeride = item.Texto.Trim().Replace(".—", "-").Replace("(en la imagen)", " ").Split('\n');
                }
                else
                {
                    CacheEfemeride = item.Texto.Trim().Replace(".—", "-").Split('\n');
                }


                // Si hay alguna string cque contenga a.C o D.C lo eliminamos.
                if (item.Texto.Trim().Replace(".—", "-").Contains("a. C"))
                {
                    CacheEfemeride = item.Texto.Trim().Replace(".—", "-").Replace("a. C", "AC").Split('\n');
                }
                else if (item.Texto.Trim().Replace(".—", "-").Contains("d. C"))
                {
                    CacheEfemeride = item.Texto.Trim().Replace(".—", "-").Replace("d. C", "DC").Split('\n');
                }

                // Recorremos las efemerides de cada dia, de forma individual, para insertarlas con este formato:
                // Efemeride, Mes, Dia
                foreach (var item_2 in CacheEfemeride)
                {
                    Efemeride efemeride = new Efemeride();
                    efemeride.Texto = item_2.Replace("&#160;", " ");

                    // Establecemos el tipo de efemeride segun lo que contenga la string
                    if (efemeride.Texto.Contains("Nace"))
                    {
                        efemeride.Tipo = Tipo.Nacimiento;
                    }
                    else if (efemeride.Texto.Contains("Muere"))
                    {
                        efemeride.Tipo = Tipo.Muerte;
                    }
                    else
                    {
                        efemeride.Tipo = Tipo.Evento;
                    }
                    // Quitamos guiones y los limpiamos la string de caracteres que no necesitamos.
                    efemeride.Fecha = item.Fecha;
                    var splitted = efemeride.Texto.Split('-').ToList();

                    string yearString = splitted[0];
                    efemeride.Texto = String.Join(",", splitted.Skip(1).ToList());

                    int realYear = 0;
                    int.TryParse(yearString, out realYear);

                    try
                    {
                        // Cogemos un la fecha de este año y la fecha obtenida de la efemeride y las restamos
                        efemeride.Fecha.AddYears((efemeride.Fecha.Year - realYear) * -1);
                    }
                    catch
                    { }
                    // Obtenemos el valor , del año de la efemeride ya calculado
                    efemeride.RealYear = realYear;
#if DEBUG
                    if (efemeride.RealYear != efemeride.Fecha.Year)
                    {
                        Console.WriteLine($"[!] Warning Parsed Year mismtach with RealYear {efemeride.Fecha.Year}<>{efemeride.RealYear}");
                    }
#endif

                    // Una vez procesada la efemeride la añadimos a la lista
                    processed.Add(efemeride);
                }
            }
            return(processed);
        }