コード例 #1
0
        public async Task GetDetail(string posturl, string postimageurl)
        {
            DetailPost dp       = new DetailPost();
            string     htmlPage = "";
            string     category = "";

            try
            {
                using (var client = new HttpClient())
                {
                    if (!posturl.Contains("https:"))
                    {
                        posturl = "https:" + posturl;
                    }
                    htmlPage = await client.GetStringAsync(posturl).ConfigureAwait(false);
                }

                HtmlDocument htmlDocument      = new HtmlDocument();
                HtmlDocument innerHtmlDocument = new HtmlDocument();

                htmlDocument.LoadHtml(htmlPage);

                var innerText = htmlDocument.DocumentNode
                                .Descendants("div")
                                .Where(o => o.GetAttributeValue("id", "") == "bodycontents").FirstOrDefault();


                string htmlDiv = "";
                htmlDiv = "<html>" + innerText.OuterHtml + "</html>";
                innerHtmlDocument.LoadHtml(htmlDiv);

                // Get Category
                var innerinfo = htmlDocument.DocumentNode
                                .Descendants("p")
                                .Where(o => o.GetAttributeValue("class", "") == ("info")).FirstOrDefault();
                if (innerinfo != null)
                {
                    foreach (Match m in Regex.Matches(innerinfo.OuterHtml, "<a[^>]*>([^<]*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Multiline))
                    {
                        category = m.Groups[1].Value;

                        // add src to some array
                    }
                }

                // Get Title
                var title = htmlDocument.DocumentNode
                            .Descendants("h1")
                            .Where(o => o.GetAttributeValue("class", "").Contains("firstHeading")).FirstOrDefault();

                var    match  = Regex.Match(title.InnerHtml, @"(<a.*?>.*?</a>)", RegexOptions.Singleline);
                string titles = Regex.Replace(match.Groups[1].Value, @"\s*<.*?>\s*", "");

                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(title.OuterHtml);

                var link = doc.DocumentNode.Descendants("a")
                           .Select(p => p.GetAttributeValue("href", "not found"))
                           .FirstOrDefault();

                var img = innerHtmlDocument.DocumentNode
                          .Descendants("img").ToList();
                var imageUrl = "";
                if (img.Count != 0)
                {
                    imageUrl = Regex.Match(img[img.Count - 1].OuterHtml, "<img.+?src=[\"'](.+?)[\"'].*?>", RegexOptions.IgnoreCase).Groups[1].Value;
                }
                else
                {
                    imageUrl = "http://pad3.whstatic.com/images/thumb/a/a4/Default_wikihow_green_intl.png/-crop-163-119-141px-Default_wikihow_green_intl.png";
                }


                const string FMT     = "O";
                DateTime     now1    = DateTime.Now;
                string       strDate = now1.ToString(FMT);

                titles = WebUtility.HtmlDecode(titles);
                //htmlDiv = WebUtility.HtmlDecode(htmlDiv);

                dp.Title = titles;

                if (postimageurl != "")
                {
                    dp.ImageUrl = postimageurl;
                }
                else
                {
                    dp.ImageUrl = imageUrl;
                }

                if (!link.Contains("http:"))
                {
                    link = "http:" + link;
                }
                dp.Url       = link;
                dp.SavedTime = strDate;
                dp.Content   = htmlPage;
                if (category != "")
                {
                    dp.Category = category;
                }
                else
                {
                    dp.Category = "Tidak Terkategori";
                }
            }
            catch
            {
            }
            DetailPost = dp;
        }
コード例 #2
0
 public DetailPostViewModel()
 {
     DetailPost        = new DetailPost();
     LoadDetailCommand = new Command(async() => await ExecuteDetailCommand(null));
 }