RSS简易信息聚合(也叫聚合内容)是一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议。RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个RSS文件后,这个RSS Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用,是一种描述和同步网站内容的格式。RSS可以是以下三个解释的其中一个: Really Simple Syndication;RDF (Resource Description Framework) Site Summary; Rich Site Summary。但其实这三个解释都是指同一种Syndication的技术。

今天在win10.me看到一个rss,不知道是什么东西,打开看到

于是在网上查了RSS,又在微软官网看到https://msdn.microsoft.com/zh-cn/library/windows/apps/mt429379.aspx

林政的书也有说过,不过他是用HttpWebRequest

我的rss是使用SyndicationClient

先创建SyndicationClient

            Windows.Web.Syndication.SyndicationClient client = new Windows.Web.Syndication.SyndicationClient();
            Windows.Web.Syndication.SyndicationFeed feed;

因为输URL可能是错的,所以微软就用try catch

            //uri写在外面,为了在try之外不会说找不到变量
            Uri uri = null;

            //uri字符串
            string uriString = "http://www.win10.me/?feed=rss2";

            try
            {
                uri = new Uri(uriString);
            }
            catch (Exception ex)
            {
                throw ex;
            }

网络请求有很多异常,我们放在try

            try
            {
                //模拟http
                // 如果没有设置可能出错
                client.SetRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");

                feed = await client.RetrieveFeedAsync(uri);

                foreach (Windows.Web.Syndication.SyndicationItem item in feed.Items)
                {
                    displayCurrentItem(item);
                }

            }
            catch (Exception ex)
            {
                // Handle the exception here.
            }

我们写一个函数处理每个SyndicationItem

        private void displayCurrentItem(Windows.Web.Syndication.SyndicationItem item)
        {
            string itemTitle = item.Title == null ? "No title" : item.Title.Text;
            string itemLink = item.Links == null ? "No link" : item.Links.FirstOrDefault().ToString();
            string itemContent = item.Content == null ? "No content" : item.Content.Text;
            string itemSummary = item.Summary.Text + "";
            reminder = itemTitle + "\n" + itemLink + "\n" + itemContent+"\n"+itemSummary+"\n";

        }

reminder是通知显示,把每个不为空的值放在StringBuilder

看起来很多html,我们可以用WebUtility,Regex来得到文本

我们可以做一个显示标题,然后点击显示内容

建一个类rssstr,这个类存放rss标题和内容

在viewModel 一个列表ObservableCollection<rssstr>

界面MainPage

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions >
            <RowDefinition >

            </RowDefinition>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <ScrollViewer Grid.Row="0"  VerticalScrollBarVisibility="Auto">
            <ListView SelectionChanged="select" ItemsSource="{x:Bind view.rsslist}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition/>
                            </Grid.RowDefinitions>
                            <TextBlock Text="{Binding title}"/>
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <!--<TextBlock Grid.Row="0" Text="{x:Bind view.reminder,Mode=OneWay}" TextWrapping="Wrap"/>-->
        </ScrollViewer>
        <Button Grid.Row="1" Margin="10,10,10,10" Content="确定" Click="Button_Click"/>
    </Grid>

新建一个页面rss_page

    <Page.Resources>
        <Style x:Key="TextBlockStyle1" TargetType="TextBlock">
            <Setter Property="Margin" Value="10,10,10,10"/>
        </Style>
    </Page.Resources>

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition />
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <TextBlock Style="{StaticResource TextBlockStyle1}" Grid.Row="0" Text="{x:Bind view.title}"/>
        <TextBlock Style="{StaticResource TextBlockStyle1}" Grid.Row="1" Text="{x:Bind view.summary}"/>
        <Button Grid.Row="2" Content="确定" Click="Button_Click"/>
    </Grid>

在列表被点击

        private void select(object sender, SelectionChangedEventArgs e)
        {
            Frame frame = Window.Current.Content as Frame;
            frame.Navigate(typeof(rss_page), (ViewModel.rssstr)(sender as ListView).SelectedItem);
        }

rss_page viewModel使用rssstr

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            view = e.Parameter as rssstr;
            base.OnNavigatedTo(e);
        }

rss_page不能滚动TextBlock,可以使用ScrollViewer

        <ScrollViewer Grid.Row="1">
            <TextBlock Style="{StaticResource TextBlockStyle1}" Grid.Row="1" Text="{x:Bind view.summary}" TextWrapping="Wrap"/>
        </ScrollViewer>

源代码

https://github.com/lindexi/lindexi_gd/tree/master/rss

链接:http://pan.baidu.com/s/1sk7v6Zr 密码:dzfa

Http://blog.csdn.net/lindexi_gd

参考:http://www.cnblogs.com/linzheng/

win10 UWP RSS阅读器的更多相关文章

  1. UWP 推荐 - 限时免费的RSS阅读器《RSS 追踪》登录 Windows 10

    文/云之幻 前不久,博客作者 Bravo Yeung 写了一篇还算略受欢迎的关于 RSS 的文章 .Net开发者必知的技术类RSS订阅指南. RSS 现在用的人很少了,而且就算是我,也不过是在一周前才 ...

  2. [UWP]涨姿势UWP源码——极简的RSS阅读器

    涨姿势UWP,一个开源的RSS阅读器,一个纯粹的项目,一个有道德的APP,一个脱离了低级趣味的作者,一些有益于人民的代码.骚年,还等什么,来涨点姿势吧! 该项目代码可能会引起部分人群的不适,敏感人群请 ...

  3. RSS阅读器

    RSS阅读器(Really Simple Syndication)是一种软件/程序,实质都是为了方便地读取RSS和Atom文档.大概就是实现了订阅式阅读,推送用户感兴趣的新闻,博客等(比如等某位博主更 ...

  4. RSS阅读器python实现概述

    这边简单说一下最近倒腾的RSS阅读器的小东东,RSS阅读器估计很多人用过或者自己动手实现过.首先wudagang0123多年前提供的一个示例:http://bbs.chinaunix.net/foru ...

  5. Tiny Rss Reader - 迷你RSS阅读器

    发布新软件 TinyRss: Windows平台上的一个小巧的Rss阅读器. 用户界面: 项目地址: https://github.com/movsb/tinyrss.git 测试下载: http:/ ...

  6. RSS阅读器&BT sync

    ①RSS阅读器? 答:RSS阅读器是一种软件或是说一个程序,这种软件可以自由读取RSS和Atom两种规范格式的文档,且这种读取RSS和Atom文档的软件有多个版本,由不同的人或公司开发,有着不同的名字 ...

  7. RSS阅读器(一)——dom4j读取xml(opml)文件

    接触java不久,偶有收获,最近想做一个web版RSS阅读器来锻炼一下.手头有几个从不同版本的foxmail中导出的opml文件,大家应该都知道,opml文件就是xml格式的.那么就先从这里入手,练习 ...

  8. 网易新闻RSS阅读器

    首先需要分析网易RSS订阅中心的网页布局情况. 网易RSS订阅中心:http://www.163.com/rss/ 你会发现RSS文件由一个<channel>元素及其子元素组成,除了频道本 ...

  9. Web版RSS阅读器(三)——解析在线Rss订阅

    上篇博客<Web版RSS阅读器(二)——使用dTree树形加载rss订阅分组列表>已经写到读取rss订阅列表了,今天就说一下,当获取一条在线rss订阅的信息,怎么去解析它,从而获取文章或资 ...

随机推荐

  1. 团队作业4——第一次项目冲刺(Alpha版本) Day1

    1.开站立式会议: 2.Leangoo任务分解图: 3.开会讨论的结果,任务分派 队员 今日进展 明日安排 林燕 调查产品的市场需求,学习微信开发 完善逻辑架构框架 王李焕 结合实际分析系统设计思路, ...

  2. 201521123075 《Java程序设计》第7周学习总结

    1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码为 public boolean contains(Object o) ...

  3. 201521123038 《Java程序设计》 第二周学习总结

    201521123038 <Java程序设计> 第二周学习总结 1.本章学习总结 学会在Java程序中使用函数,使程序层次更清晰 使用StringBuilder编写代码,减少内存空间的占用 ...

  4. 201521123071 《JAVA程序设计》第九周学习总结

    第九周-异常 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 此处仅部分知识点归纳 2. 书面作业 1. 常用异常,题目5-1 1.1 截图你的提交结果(出现学号) ...

  5. 201521123059 《Java程序设计》第十四周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 1.关系型数据库 --建立表格时表中一列中的数据类型必须一致.关系表中的行必须是唯一的,列是不可分的,某些行的某 ...

  6. css3新属性的学习使用

    display 可选值:none隐藏元素: block显示为块级元素: inline显示为行级元素 inlineblock显示为内联块级元素,本身将是一个行级元素,但是拥有 块级元素的所有属性,比如宽 ...

  7. 用vue开发一个app(3,三天的成果)

    前言 一个vue的demo 源码说明 项目目录说明 . |-- config // 项目开发环境配置 | |-- index.js // 项目打包部署配置 |-- src // 源码目录 | |-- ...

  8. Servlet学习应该注意的几点

    一.Servlet生命周期(即运行过程) (1)初始阶段,调用init()方法 (2)响应客户请求阶段,调用service()方法.由service()方法根据提交方式不同执行doGet()或doPo ...

  9. 指定路径下建立Access数据库并插入数据

    今天刚刚开通博客,想要把我这几天完成小任务的过程,记录下来.我从事软件开发的时间不到1年,写的不足之处,还请前辈们多多指教. 上周四也就是2016-04-14号上午,部门领导交给我一个小任务,概括来讲 ...

  10. Floyd算法(最短路)

    如题,这是最短路算法Floyd. Floyd,是只有五行的代码. 简单,易懂.O(N的三方)的时间也可以. 遇到简单的就这么用. #include<iostream> #include&l ...