Пример #1
0
        public async Task <Post> GetPost(Gallery gallery)
        {
            Post post = null;

            string html = await HttpClient.Do(gallery.Address);

            if (string.IsNullOrEmpty(html))
            {
                return(null);
            }

            var doc = new HtmlDocument();

            doc.LoadHtml(html);

            post = new Post();

            post.Contents = new List <Post.Content>();

            var titleNode = doc.DocumentNode.SelectSingleNode("//h2[@class='main-title']");

            if (titleNode != null)
            {
                post.Contents.Add(new Post.Title()
                {
                    Text = titleNode.InnerHtml
                });
            }

            var imgNodes = doc.DocumentNode.SelectNodes("//div[@class='main-body']/p/a");

            if (imgNodes != null)
            {
                post.Images = new List <Post.Image>();

                foreach (var node in imgNodes)
                {
                    var image = new Post.Image()
                    {
                        Url = node.Attributes["href"].Value
                    };

                    post.Contents.Add(image);
                    post.Images.Add(image);
                }
            }

            return(post);
        }
Пример #2
0
        private async void Image_ImageOpened(object sender, RoutedEventArgs e)
        {
            if (sender is Image)
            {
                Image image = sender as Image;

                if (image.DataContext is Post.Image)
                {
                    Post.Image data = (image.DataContext as Post.Image);

                    string key = data.Url;

                    if (!dictionary.ContainsKey(key))
                    {
                        dictionary.Add(key, image);

                        await PostImages.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                        {
                            data.IsOpen = true;
                        });
                    }
                }
            }
        }
Пример #3
0
        public override async Task <Post> GetPost(Gallery gallery)
        {
            Post post = null;

            string html = string.Empty;
            IPage  page = ruleConfig.GetRule(PageType.BCY_Images);

            html = await GetHTML(gallery.Address, page);

            if (string.IsNullOrEmpty(html))
            {
                return(null);
            }

            var doc = new HtmlDocument();

            doc.LoadHtml(html);

            post = new Post();

            post.Contents = new List <Post.Content>();

            var title = page.GetSingleNodeValue(doc.DocumentNode, "Title");

            if (!string.IsNullOrEmpty(title))
            {
                foreach (char rInvalidChar in System.IO.Path.GetInvalidPathChars())
                {
                    title = title.Replace(rInvalidChar.ToString(), string.Empty);
                }
                string errChar = "\\/:*?";
                foreach (char rInvalidChar in errChar)
                {
                    title = title.Replace(rInvalidChar.ToString(), string.Empty);
                }

                post.Contents.Add(new Post.Title()
                {
                    Text = title.Replace("\n", "").Trim()
                });
            }

            StringBuilder stringBuilder = new StringBuilder();

            var role = page.GetSingleNodeValue(doc.DocumentNode, "Role");

            if (!string.IsNullOrEmpty(role))
            {
                stringBuilder.Append(WebUtility.HtmlDecode(role.Replace("\n", "").Trim())).Append("\n");
            }

            var staff = page.GetSingleNodeValue(doc.DocumentNode, "Staff");

            if (!string.IsNullOrEmpty(staff))
            {
                stringBuilder.Append(WebUtility.HtmlDecode(staff.Replace("\n", "").Trim())).Append("\n");
            }

            var contentNode = page.GetSingleNode(doc.DocumentNode, "Content");

            if (contentNode != null)
            {
                foreach (var child in contentNode.ChildNodes)
                {
                    if (child.NodeType == HtmlNodeType.Text)
                    {
                        stringBuilder.Append(child.InnerText);
                    }
                    else if (child.Name == "br")
                    {
                        stringBuilder.Append("\n");
                    }
                    else if (child.Name == "a")
                    {
                        stringBuilder.Append(child.InnerText);
                    }
                    else if (child.Name == "img")
                    {
                        break;
                    }
                }
            }

            post.Contents.Add(new Post.Body()
            {
                Text = stringBuilder.ToString()
            });

            var imgNodes = page.GetNodes(doc.DocumentNode, "Image");

            if (imgNodes != null)
            {
                Regex regex = new Regex(@"((http|https)://)(([a-zA-Z0-9\._-]+)/)+(w\d+)");
                post.Images = new List <Post.Image>();

                foreach (var node in imgNodes)
                {
                    string url = node.Attributes["src"].Value;

                    // 删除尾部限定大小
                    if (regex.IsMatch(url))
                    {
                        url = url.Substring(0, url.LastIndexOf('/'));
                    }

                    Post.Image image = new Post.Image()
                    {
                        Url = url
                    };

                    post.Contents.Add(image);
                    post.Images.Add(image);
                }
            }

            return(post);
        }