【问题标题】:Get thumbnails from RSS feed UWP C# Windows 10从 RSS 提要 UWP C# Windows 10 获取缩略图
【发布时间】:2016-06-28 18:34:45
【问题描述】:

我正在使用这个项目: https://github.com/Microsoft/Windows-appsample-rssreader

我想从 RSS 提要中获取缩略图。现在,问题是我得到错误。我会解释他们。首先看看到目前为止我做了什么。 : 我有这门课:

  public class ArticleViewModel : BindableBase
{
    public string thumbnail { get; set; }
    public string Title { get; set; }
    public string Summary { get; set; }
    public string Author { get; set; }
    public Uri Link { get; set; }
    public DateTimeOffset PublishedDate { get; set; }
    public string PublishedDateFormatted => PublishedDate.ToString("MMM dd, yyyy    h:mm tt").ToUpper();
    public override bool Equals(object obj) => 
        obj is ArticleViewModel ? (obj as ArticleViewModel).GetHashCode() == GetHashCode() : false;
    public override int GetHashCode() => Link.GetHashCode();
    private bool? _isStarred = false;
    public bool? IsStarred { get { return _isStarred; } set { SetProperty(ref _isStarred, value); } }
}

例如我们取http://coffeeetech.xyz/feed的RSS提要。

现在在这里:

var feed = await new SyndicationClient().RetrieveFeedAsync(feedViewModel.Link);

                feedViewModel.Name = String.IsNullOrEmpty(feedViewModel.Name) ? feed.Title.Text : feedViewModel.Name;
                feedViewModel.Description = feed.Subtitle?.Text ?? String.Empty;

                feed.Items.Select(item => new ArticleViewModel
                {


                    thumbnail = item.thumbnail,
                    //    description = WebUtility.HtmlDecode(description);
                    Title = item.Title.Text,
                    Summary = item.Summary == null ? string.Empty :
                        item.Summary.Text.RegexRemove("\\&.{0,4}\\;").RegexRemove("<.*?>"),
                    Author = item.Authors.Select(a => a.NodeValue).FirstOrDefault(),
                    Link = item.ItemUri ?? item.Links.Select(l => l.Uri).FirstOrDefault(),
                    PublishedDate = item.PublishedDate
                })
                .ToList().ForEach(article =>
                {
                    var favorites = AppShell.Current.ViewModel.FavoritesFeed;
                    var existingCopy = favorites.Articles.FirstOrDefault(a => a.Equals(article));
                    article = existingCopy ?? article;
                    if (!feedViewModel.Articles.Contains(article)) feedViewModel.Articles.Add(article);
                });
                return true;

现在,问题是,在 thubmnail = item.thumbnail 行中,我收到“当前上下文中不存在缩略图”的错误

所以问题是如何通过 SyndicationFeed 获取缩略图。我的意思是,项目缩略图在那里不存在。 谢谢。

【问题讨论】:

  • 你使用的item的类型是SyndicationItem。如您所见,此类中没有缩略图属性。当我使用您发布的代码时,我收到以下错误:“'SyndicationItem' 不包含'thumbnail' 的定义,并且找不到接受'SyndicationItem' 类型的第一个参数的扩展方法'thumbnail'(你是缺少 using 指令或程序集引用?)“。您是否更改任何其他代码?你想得到哪个缩略图? 图片是否在频道下?
  • 这是我的问题。如何在 Syndication 类中添加缩略图之类的内容。我想获取主要的缩略图。

标签: c# windows rss uwp


【解决方案1】:

SyndicationItem class 代表提要中的一个项目。此类将信息封装在 RSS 2.0 中的 /rss/channel/item 元素或 Atom 1.0 中的 atom:entry 元素中。

对于 RSS 2.0 中的&lt;item&gt; element,没有与缩略图相关的子元素。所以SyndicationItem 没有“缩略图”属性。即使我们在这个类中添加一个“缩略图”属性,它也无济于事。 SyndicationItem属性与RSS元素的对应关系,请参见SyndicationItem class备注部分下的表格。

因为您想获取主要的缩略图图像。我想你想得到&lt;channel&gt;&lt;image&gt; 子元素。如果是这样,您可以尝试使用 SyndicationFeed.ImageUri 属性。此属性表示 RSS 2.0 中的 image/uri 元素。您可以在FeedViewModel 中添加一个“缩略图”属性,然后在RefreshAsync 方法中设置它,如下所示。

var feed = await new SyndicationClient().RetrieveFeedAsync(feedViewModel.Link);

feedViewModel.Name = String.IsNullOrEmpty(feedViewModel.Name) ? feed.Title.Text : feedViewModel.Name;
feedViewModel.Description = feed.Subtitle?.Text ?? String.Empty;
feedViewModel.thumbnail = feed.ImageUri;

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 2017-06-22
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多