/// <summary> /// Entry point of the application. /// </summary> /// <param name="args">Arguments of the application.</param> static void Main(string[] args) { args = new string[] { "http://biblia.com.br/joaoferreiraalmeidarevistaatualizada/page/{0}/", "1189", "pt-BR", @"D:\Documents\Extensions\Json\" }; WebClient webClient = new WebClient(); string url = args[0]; string pageBibleUrl; string htmlString; string pattern; IList<string> oldTestament = new List<string>(); IList<string> newTestament = new List<string>(); Bible bible = new Bible() { OldTestament = new List<Book>(), NewTestament = new List<Book>() }; int limitPage = Convert.ToInt32(args[1]); Regex regex; Match match; GroupCollection groups; for (int i = 1; i <= limitPage; i++) { pageBibleUrl = string.Format(url, i); HtmlDocument htmlDocument = new HtmlDocument() { OptionDefaultStreamEncoding = Encoding.UTF8, }; htmlDocument.Load(webClient.OpenRead(pageBibleUrl), Encoding.UTF8); if (oldTestament.Count <= 0) { HtmlNode oldTestamentNode = htmlDocument.DocumentNode.SelectSingleNode("//div[@class='grid_4 old_test omega']"); IEnumerable<HtmlNode> booksOldTestamentNodeEnumerable = oldTestamentNode.ChildNodes.Where(n => n.Name == "ul"); foreach (HtmlNode node in booksOldTestamentNodeEnumerable) { IEnumerable<HtmlNode> booksLi = node.ChildNodes.Where(b => b.Name == "li"); foreach (HtmlNode li in booksLi) { oldTestament.Add(li.InnerText); } } } if (newTestament.Count <= 0) { HtmlNode newTestamentNode = htmlDocument.DocumentNode.SelectSingleNode("//div[@class='grid_4 push_1 new_test alpha']"); IEnumerable<HtmlNode> booksNewTestamentNodeCollection = newTestamentNode.ChildNodes.Where(n => n.Name == "ul"); foreach (HtmlNode node in booksNewTestamentNodeCollection) { IEnumerable<HtmlNode> booksLi = node.ChildNodes.Where(b => b.Name == "li"); foreach (HtmlNode li in booksLi) { newTestament.Add(li.InnerText); } } } if (string.IsNullOrWhiteSpace(bible.Name)) { HtmlNode versionNode = htmlDocument.DocumentNode.SelectSingleNode("//div[@class='grid_3 box_link_dados2 margin_boxsidebar']"); bible.Name = versionNode.InnerText.Trim(); bible.Language = args[2]; string[] initialsName = bible.Name.Split(' '); foreach (string s in initialsName) { if (s.Length < 3) continue; bible.Initials += s.Substring(0, 1); } } HtmlNode postTitle = htmlDocument.DocumentNode.SelectSingleNode("//a[@class='titulo-post']"); HtmlNode chapterNode = htmlDocument.DocumentNode.SelectSingleNode("//h2[@class='capitulo']").ChildNodes.Where(c => c.Name == "a").First(); string chapterAttribute = chapterNode.GetAttributeValue("href", string.Empty); Book book = new Book(); Chapter chapter = new Chapter() { Verses = new List<Verse>() }; string initialsBook = string.Empty; pattern = @"(\w{2})\-\w*\-\d*"; regex = new Regex(pattern); if (regex.IsMatch(chapterAttribute)) { match = regex.Match(chapterAttribute); groups = match.Groups; initialsBook = groups[1].Value.ToUpper(); book = bible.OldTestament.Find(b => b.Initials == initialsBook) ?? bible.NewTestament.Find(b => b.Initials == initialsBook); } pattern = @"^(.*)\s\&\#8211\;\s.*\s(\d*)$"; regex = new Regex(pattern); if (regex.IsMatch(postTitle.InnerText)) { match = regex.Match(postTitle.InnerText); groups = match.Groups; if (book == null) { book = new Book() { Name = groups[1].Value, Initials = initialsBook }; if (newTestament.Contains(book.Name)) { bible.NewTestament.Add(book); } else { bible.OldTestament.Add(book); } } chapter.Number = Convert.ToInt32(groups[2].Value); } HtmlNode verseNode = htmlDocument.DocumentNode.SelectSingleNode("//div[@class='versiculos']"); HtmlNodeCollection versesNodeCollection = verseNode.ChildNodes; if (book.Chapters == null) book.Chapters = new List<Chapter>(); foreach (HtmlNode v in versesNodeCollection) { if (v.Name != "div") continue; Verse verse = new Verse() { Number = Convert.ToInt32(v.ChildNodes.Where(n => n.Name == "span").First().InnerText), Text = v.ChildNodes.Where(n => n.Name == "#text").First().InnerText.Trim() }; chapter.Verses.Add(verse); } book.Chapters.Add(chapter); float percent =100 - ((i / (float)limitPage) * 100); Console.WriteLine("Created {0} {1} - Remaining {2}%", book.Name, chapter.Number, percent); } Console.WriteLine("Starting the saving :)"); string path = string.Concat(args[3], bible.Initials, ".json"); using (FileStream fileStream = File.Open(path, FileMode.CreateNew)) { using (StreamWriter streamWriter = new StreamWriter(fileStream)) { using (JsonWriter jsonWriter = new JsonTextWriter(streamWriter)) { jsonWriter.Formatting = Formatting.Indented; JsonSerializer serializer = new JsonSerializer(); serializer.Serialize(jsonWriter, bible); } } } Console.WriteLine("Finishing :)"); Console.ReadKey(); }
private void ShowChapter(Chapter chapter) { SelectedChapter = chapter; }