Beispiel #1
0
        public async Task <ComicDetailStructure> GetComicDetails(string comicUrl)
        {
            ComicDetailStructure comicDetailStructure = new ComicDetailStructure();
            var doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(await LatestComicFetcher.GetComicDetails(comicUrl));
            var comicInfo = doc.DocumentNode.SelectNodes("//li[contains(@class,'info')]");

            try
            {
                comicDetailStructure.comicTitle       = comicInfo[0].ChildNodes[1].InnerText;
                comicDetailStructure.comicPubisher    = comicInfo[1].ChildNodes[1].InnerText;
                comicDetailStructure.comicAuthors     = comicInfo[3].ChildNodes[1].InnerText;
                comicDetailStructure.comicGenre       = comicInfo[4].ChildNodes[1].InnerText;
                comicDetailStructure.comicPubication  = comicInfo[5].ChildNodes[1].InnerText;
                comicDetailStructure.comicStatus      = comicInfo[6].ChildNodes[1].InnerText;
                comicDetailStructure.comicImage       = ServiceUrl.base_comic_url + doc.DocumentNode.SelectNodes("//img[contains(@class,'series')]")[0].Attributes["src"].Value;
                comicDetailStructure.comicDescription = doc.DocumentNode.SelectNodes("//li[contains(@class,'summary')]")[0].ChildNodes[1].InnerText;
            }
            catch (Exception)
            {
                comicDetailStructure.comicAuthors    = "N/A";
                comicDetailStructure.comicPubication = "N/A";
                comicDetailStructure.comicStatus     = "N/A";

                var comicTitle = doc.DocumentNode.SelectSingleNode("//h1[contains(@class,'page-title')]");
                comicDetailStructure.comicTitle = comicTitle.InnerText;

                var comicImage = doc.DocumentNode.SelectSingleNode("//img[contains(@class,'mypic')]");
                comicDetailStructure.comicImage = ServiceUrl.base_comic_url + comicImage.Attributes["src"].Value;

                var comicPubisher = doc.DocumentNode.SelectNodes("//div[contains(@class,'field field-name-field-publisher field-type-taxonomy-term-reference field-label-inline clearfix')]");
                comicDetailStructure.comicPubisher = comicPubisher[0].ChildNodes[1].InnerText;

                var comicGenre = doc.DocumentNode.SelectNodes("//div[contains(@class,'field field-name-field-genres field-type-taxonomy-term-reference field-label-inline clearfix')]");
                comicDetailStructure.comicGenre = comicGenre[0].ChildNodes[1].InnerText;

                var comicDescription = doc.DocumentNode.SelectSingleNode("//div[contains(@class,'field field-name-field-synopsis field-type-text-with-summary field-label-hidden')]");
                comicDetailStructure.comicDescription = comicDescription.InnerText;
            }
            var comicChapters = doc.DocumentNode.SelectNodes("//li[contains(@class,'chapter')]");

            foreach (var chapter in comicChapters)
            {
                try
                {
                    comicDetailStructure.comicChapterList.Add(
                        new ComicChapterList
                    {
                        chapterTitle = chapter.InnerText,
                        chapterLink  = chapter.ChildNodes[0].Attributes[0].Value
                    });
                }
                catch (Exception)
                {
                    continue;
                }
            }
            return(comicDetailStructure);
        }
        public async Task <ObservableCollection <ComicListStructure> > ExtractComicSearch(string searchText, string source)
        {
            ComicListStructure comicListStructure = new ComicListStructure();

            var doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(source);
            var comicLinkNodes       = doc.DocumentNode.SelectNodes("//h3[contains(@class,'title')]");
            var comicLastSearchNode  = doc.DocumentNode.SelectSingleNode("//a[contains(@title,'Go to last page')]");
            int lastSearchPageNumber = Convert.ToInt16(comicLastSearchNode.Attributes["href"].Value.Split('=')[1].Trim());

            await ExtractLinksFromNodes(comicLinkNodes);

            // Currently disabling further results.
            // This needs new implementation.

            //for (int i = 1; i <= lastSearchPageNumber + 1; i++)
            //{
            //    /* If last Search Page = 1, then we do not have multiple
            //     * search pages.
            //     * So, we do not need to iterate over things. We're pretty much
            //     * done here.
            //     */
            //    if (i != lastSearchPageNumber)
            //    {
            //        string webResponse = await LatestComicFetcher.GetComicPageContent(ServiceUrl.base_comic_search_url + searchText + "?page=" + i);
            //        doc.LoadHtml(webResponse);
            //        comicLinkNodes = doc.DocumentNode.SelectNodes("//h3[contains(@class,'title')]");
            //        await ExtractLinksFromNodes(comicLinkNodes);
            //    }
            //}

            _comicList.Clear(); // Clear any previous data.
            ComicDetailStructure comicDetailStructure_new = new ComicDetailStructure();

            foreach (var searchUrl in urlList)
            {
                try
                {
                    comicDetailStructure_new = await GetComicDetails(searchUrl);

                    _comicList.Add(new ComicListStructure
                    {
                        comicTitle      = comicDetailStructure_new.comicTitle,
                        comicLink       = searchUrl,
                        comicIssue      = comicDetailStructure_new.comicDescription,
                        comicCoverImage = ServiceUrl.base_comic_url + comicDetailStructure_new.comicImage
                    }
                                   );
                }
                catch (Exception ComicExtractionException)
                {
                    Crashes.TrackError(ComicExtractionException);
                    continue;
                }
            }

            return(_comicList);
        }
Beispiel #3
0
 public ComicDetails(string comicUrl)
 {
     InitializeComponent();
     this._comicUrl       = comicUrl;
     _parser              = new ReadComicBooksOnlineLatestItems_Parser();
     comicDetailStructure = new ComicDetailStructure();
     comicImagesStructure = new ComicImagesStructure();
 }
Beispiel #4
0
        private async Task ComicDetailsFetcher()
        {
            try
            {
                progressBar.IsRunning = true;
                progressBar.IsVisible = true;

                comicDetailStructure = await _parser.GetComicDetails(_comicUrl);

                progressBar.IsRunning = false;
                progressBar.IsVisible = false;
                CommonInternalData.isMangaSelected = false;
                CommonInternalData.isComicSelected = true;
            }
            catch (Exception LatestUpdateFetchingException)
            {
                Crashes.TrackError(LatestUpdateFetchingException);
                await DisplayAlert("Dead", "Exception Occurred. Please Try Again After Some Time.", "ok");
            }
        }
        public async Task <ComicDetailStructure> GetComicDetails(string comicUrl)
        {
            ComicDetailStructure comicDetailStructure = new ComicDetailStructure();
            var doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(await LatestComicFetcher.GetComicDetails(comicUrl));
            List <string> genresList = new List <string>()
            {
            };
            List <string> publishersList = new List <string>()
            {
            };
            // Authors Removed.
            // Status Removed.
            // Publication Removed
            var _comicTitle = doc.DocumentNode.SelectSingleNode("//h1[contains(@class,'page-title')]");
            var comicCover  = doc.DocumentNode.SelectSingleNode("//img[contains(@class,'mypic')]");
            var genres      = doc.DocumentNode.SelectSingleNode("//div[contains(@class,'field field-name-field-genres field-type-taxonomy-term-reference field-label-above')]");
            var publishers  = doc.DocumentNode.SelectSingleNode("//div[contains(@class,'field field-name-field-publisher field-type-taxonomy-term-reference field-label-above')]");
            var description = doc.DocumentNode.SelectSingleNode("//div[contains(@class,'field field-name-body field-type-text-with-summary field-label-hidden')]");

            foreach (var genreElement in genres.ChildNodes[1].ChildNodes)
            {
                genresList.Add(CommonFunctions.ToUpperCase(genreElement.ChildNodes[0].FirstChild.InnerText.Trim()));
            }
            foreach (var publisherElement in publishers.ChildNodes[1].ChildNodes)
            {
                publishersList.Add(CommonFunctions.ToUpperCase(publisherElement.ChildNodes[0].FirstChild.InnerText.Trim()));
            }
            var comicInfo = doc.DocumentNode.SelectNodes("//div[contains(@id,'content-wrap')]");

            try
            {
                comicDetailStructure.comicTitle       = CommonFunctions.ToUpperCase(_comicTitle.FirstChild.InnerText);
                comicDetailStructure.comicPubisher    = String.Join(",", publishersList);
                comicDetailStructure.comicAuthors     = "";
                comicDetailStructure.comicGenre       = String.Join(",", genresList);
                comicDetailStructure.comicPubication  = "";
                comicDetailStructure.comicStatus      = "";
                comicDetailStructure.comicImage       = ServiceUrl.base_comic_url + comicCover.Attributes[1].DeEntitizeValue;
                comicDetailStructure.comicDescription = description.FirstChild.InnerText;
            }
            catch (Exception)
            {
                comicDetailStructure.comicTitle       = (string.IsNullOrEmpty(comicDetailStructure.comicTitle)) ? "Title Not Found" : comicDetailStructure.comicTitle;
                comicDetailStructure.comicPubisher    = (string.IsNullOrEmpty(comicDetailStructure.comicPubisher)) ? "None" : comicDetailStructure.comicPubisher;
                comicDetailStructure.comicAuthors     = "";
                comicDetailStructure.comicGenre       = (string.IsNullOrEmpty(comicDetailStructure.comicGenre)) ? "None" : comicDetailStructure.comicGenre;
                comicDetailStructure.comicPubication  = "";
                comicDetailStructure.comicStatus      = "";
                comicDetailStructure.comicImage       = (string.IsNullOrEmpty(comicDetailStructure.comicImage)) ? "https://comicpunch.net/mystuff/seo-sidebar.png" : comicDetailStructure.comicImage;
                comicDetailStructure.comicDescription = (string.IsNullOrEmpty(comicDetailStructure.comicDescription)) ? "No Summary Needed" : comicDetailStructure.comicDescription;
            }
            var comicChapters = doc.DocumentNode.SelectNodes("//li[contains(@class,'chapter')]");

            foreach (var chapter in comicChapters)
            {
                if (!chapter.ChildNodes[0].InnerText.Contains("at Comicpunch.net!"))
                {
                    try
                    {
                        comicDetailStructure.comicChapterList.Add(
                            new ComicChapterList
                        {
                            chapterTitle = CommonFunctions.ToUpperCase(chapter.InnerText),
                            chapterLink  = chapter.ChildNodes[0].Attributes[0].Value
                        });
                    }
                    catch (Exception)
                    {
                        continue;
                    }
                }
            }
            return(comicDetailStructure);
        }