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); }
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; }); } } } }
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); }