设为首页 收藏本站
查看: 735|回复: 0

Windows Phone 7 网络编程之RSS阅读器

[复制链接]

尚未签到

发表于 2015-5-9 07:39:28 | 显示全部楼层 |阅读模式
实现一个RSS阅读器,通过你输入的RSS地址来获取RSS的信息列表和查看RSS文章中的详细内容。RSS阅读器是使用了WebClient类来获取网络上的RSS的信息,然后再转化为自己定义好的RSS实体类对象的列表,最后绑定到页面上。

(1)       RSS实体类和RSS服务类

RssItem.cs



using System.Net;
using System.Text.RegularExpressions;
namespace WindowsPhone.Helpers
{
    ///
    /// RSS对象类
    ///
    public class RssItem
    {
        ///
        /// 初始化一个RSS目录
        ///
        /// 标题
        /// 内容
        /// 发表事件
        /// 文章地址
        public RssItem(string title, string summary, string publishedDate, string url)
        {
            Title = title;
            Summary = summary;
            PublishedDate = publishedDate;
            Url = url;
            //解析html
            PlainSummary = HttpUtility.HtmlDecode(Regex.Replace(summary, "]+?>", ""));
        }
        //标题
        public string Title { get; set; }
        //内容
        public string Summary { get; set; }
        //发表时间
        public string PublishedDate { get; set; }
        //文章地址
        public string Url { get; set; }
        //解析的文本内容
        public string PlainSummary { get; set; }
    }
}


RssService.cs





using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.ServiceModel.Syndication;
using System.Xml;
namespace WindowsPhone.Helpers
{
    ///
    /// 获取网络RSS服务类
    ///
    public static class RssService
    {
        ///
        /// 获取RSS目录列表
        ///
        /// RSS的网络地址
        /// 获取完成事件
        public static void GetRssItems(string rssFeed, Action onGetRssItemsCompleted = null, Action onError = null, Action onFinally = null)
        {
            WebClient webClient = new WebClient();
            //注册webClient读取完成事件
            webClient.OpenReadCompleted += delegate(object sender, OpenReadCompletedEventArgs e)
            {
                try
                {
                    if (e.Error != null)
                    {
                        if (onError != null)
                        {
                            onError(e.Error);
                        }
                        return;
                    }
                    //将网络获取的信息转化成RSS实体类
                    List rssItems = new List();
                    Stream stream = e.Result;
                    XmlReader response = XmlReader.Create(stream);
                    SyndicationFeed feeds = SyndicationFeed.Load(response);
                    foreach (SyndicationItem f in feeds.Items)
                    {
                        RssItem rssItem = new RssItem(f.Title.Text, f.Summary.Text, f.PublishDate.ToString(), f.Links[0].Uri.AbsoluteUri);
                        rssItems.Add(rssItem);
                    }
                    //通知完成返回事件执行
                    if (onGetRssItemsCompleted != null)
                    {
                        onGetRssItemsCompleted(rssItems);
                    }
                }
                finally
                {
                    if (onFinally != null)
                    {
                        onFinally();
                    }
                }
            };
            webClient.OpenReadAsync(new Uri(rssFeed));
        }
    }
}


(2)       RSS页面展示

MainPage.xaml







   
        
            
            
        
        
            
        
        
            
               
               
            
            
            
            
            
               
                    
                        
                           
                                
                                
                                
                           
                           
                           
                           
                        
                    
               
            
        
   


MainPage.xaml.cs





using System.Windows;
using System.Windows.Controls;
using Microsoft.Phone.Controls;
using WindowsPhone.Helpers;
namespace ReadRssItemsSample
{
    public partial class MainPage : PhoneApplicationPage
    {
        private  string WindowsPhoneBlogPosts = "";
        public MainPage()
        {
            InitializeComponent();
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (rssURL.Text != "")
            {
                WindowsPhoneBlogPosts = rssURL.Text;
            }
            else
            {
                MessageBox.Show("请输入RSS地址!");
                return;
            }
            //加载RSS列表
            RssService.GetRssItems(
                WindowsPhoneBlogPosts,
                (items) => { listbox.ItemsSource = items; },
                (exception) => { MessageBox.Show(exception.Message); },
                null
                );
        }
        //查看文章的详细内容
        private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (listbox.SelectedItem == null)
                return;
            var template = (RssItem)listbox.SelectedItem;
            MessageBox.Show(template.PlainSummary);
            listbox.SelectedItem = null;
        }
    }
}

(3)程序运行的效果如下

DSC0000.jpg DSC0001.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-65108-1-1.html 上篇帖子: Windows Phone 7 隔离存储空间资源管理器 下篇帖子: [转载Terrence Dorsey]Windows Phone 7开发工具和资源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表