代码之家  ›  专栏  ›  技术社区  ›  Elie

在ASP和C中使用RSS提要#

  •  2
  • Elie  · 技术社区  · 14 年前

    我正在修改一个用ASP/C构建的站点,其中一个任务是添加2个RSS提要的显示—一个来自站点的内部博客,另一个来自站点的Twitter帐户。然而,我似乎不断地从这两个站点得到空的feed,即使我已经确认我指向了feed的正确URL。我的代码如下所示。

    private void GetTwitterRSS()
    {
        IEnumerable items = Cache["TwitterFeed"] as List<SyndicationItem>;
    
        if (items == null)
        {
            try 
            {
                SyndicationFeed blogFeed = SyndicationFeed.Load(XmlReader.Create("http://twitter.com/statuses/user_timeline/84668697.rss"));
                items = blogFeed.Items;
            }
            catch 
            {
                items = new List<SyndicationItem>();
            }
            Cache.Insert("TwitterFeed", items, null, DateTime.Now.AddMinutes(5.0),TimeSpan.Zero);
            twitterrssRepeater.DataSource = items;
            twitterrssRepeater.DataBind();
        }
    }
    
    private void GetBlogRSS()
    {
        IEnumerable items = Cache["BlogFeed"] as List<SyndicationItem>;
    
        if (items == null)
        {
            try 
            {
                SyndicationFeed blogFeed = SyndicationFeed.Load(XmlReader.Create("http://www.rentseeker.ca/blog/?feed=rss2"));
                items = blogFeed.Items;
            }
            catch 
            {
                items = new List<SyndicationItem>();
            }
            Cache.Insert("BlogFeed", items, null, DateTime.Now.AddHours(1.0),TimeSpan.Zero);
            blogrssRepeater.DataSource = items;
            blogrssRepeater.DataBind();
        }
    }
    
    protected string DisplayBlogFeedItem(SyndicationItem item) 
    {
        return string.Format(@"<p>{1}</p><p><strong>{2}</strong></p><p>{3}</p>", 
            FormatPublishDate(item.PublishDate.DateTime),   
            item.Title.Text,
            item.Summary.Text);
    }
    
    protected string DisplayTwitterFeedItem(SyndicationItem item) 
    {
        return string.Format(@"<li>{1}</li>",
            item.Title.Text);
    }
    

    页面上的代码是:

    <ul>
        <asp:ListView ID="twitterrssRepeater" runat="server">
            <ItemTemplate>
                <%# DisplayTwitterFeedItem((Container as ListViewDataItem).DataItem as System.ServiceModel.Syndication.SyndicationItem) %>
            </ItemTemplate>
        </asp:ListView>
    </ul>
    

    <asp:ListView ID="blogrssRepeater" runat="server">
        <ItemTemplate>
            <%# DisplayBlogFeedItem((Container as ListViewDataItem).DataItem as System.ServiceModel.Syndication.SyndicationItem) %>
        </ItemTemplate>
    </asp:ListView>
    

    很明显,我遗漏了什么。从我所读到的内容来看,我理解为了查看Twitter feed,我应该对自己进行身份验证——我有凭据,但不知道如何在加载SyndicationFeed时将它们传递给SyndicationFeed。

    2 回复  |  直到 14 年前
        1
  •  4
  •   PsychoCoder    14 年前

    下面是一个简单的例子,我会用它来接收我的Twitter feed(我只得到name,updatetitle&身份证号码)

    public class TwitterFeed
    {
        public string Name { get; set; }
        public string Title { get; set; }
        public string Id { get; set; }
    }
    

    public List<TwitterFeed> GetTwitterFeed(string name)
    {
        List<TwitterFeed> list = new List<TwitterFeed>();
        XmlReader reader = XmlReader.Create(string.Format("http://search.twitter.com/search.atom?q=to:{0}", name));
        SyndicationFeed feed = SyndicationFeed.Load(reader);
        var tweetItems = from item in feed.Items
                select new TwitterFeed()
                {
                    Name = item.Authors.First().Name,
                    Title = item.Title.Text,
                    Id = item.Id
                };
    
        return tweetItems.ToList();
    }
    

    希望有帮助

        2
  •  0
  •   Vadym Kyrylkov    11 年前

    Items不是列表,而是实现IEnumerable接口,因此

    IEnumerable items = Cache["BlogFeed"] as List<SyndicationItem>;
    

    使用以下行:

    IEnumerable items = Cache["BlogFeed"] as IEnumerable<SyndicationItem>;