做个简单的RSS订阅(ASP.NET Core),节省自己的时间

0x01 前言

因为每天上下班路上,午休前,都是看看新闻,但是种类繁多,又要自己找感兴趣的,所以肯定会耗费不少时间。

虽说现在有很多软件也可以订阅一些自己喜欢的新闻,要安装到手机,还是挺麻烦的。所以就突发奇想,把一些新闻资源

整合一下,省时省力,就根据RSS订阅,用h5结合ASP.NET Core做个小站点,方便一下自己,顺便拿dotNET Core练练手。

开发环境:win10+vs2015+sqlite+redis(windows)

部署环境:centos7+.net core sdk+jexus+redis(linux)

0x02 开发

由于数据量不会大,所以就选用了sqlite,用起来还是挺方便的。

RSS的内容都是来自各大新闻网站,不能每次访问都去请求一次,所以要缓存起来。

数据库操作选择Dapper、UI框架选择了jquery-weui、还用到了一个js模板引擎art-template。

单元测试用的xUnit.net。

为了创建项目时,不添加太多东西,所以我是用Xamarin Studio建的项目,然后在VS2015上开发,

需要什么东西,自己在添加上去,按需加载。下面是整体结构图:

正常情况下的RSS订阅都是xml形式的,基本都很有规律:rss/channel/item下面就是具体的新闻了

所以就简单用XDocument去处理这些内容:

 1      public async Task<IList<Models.Item>> GetItems(string url, int count)
 2         {
 3             string xmlStr = await GetXMLStringByUrl(url);
 4             XDocument doc = XDocument.Parse(xmlStr);
 5             //the channel image
 6             string imgUrl = doc.Element("rss").Element("channel").Element("image").Element("url").Value;
 7             //the rss item
 8             var results = doc.Element("rss").Element("channel").Elements("item").Select(x => new Models.Item
 9             {
10                 title = x.Element("title").Value,
11                 link = x.Element("link").Value,
12                 description = x.Element("description").Value,
13                 pubDate = x.Element("pubDate").Value,
14                 guid = x.Element("guid").Value,
15                 ImgUrl = imgUrl
16             });
17
18             return results.Take(count).ToList();
19         }

在处理依赖注入时,用的是微软自家的,并没有用Autofac,具体如下。

1      public void ConfigureServices(IServiceCollection services)
2         {
3             services.AddMvc();
4             services.AddScoped<IRSSItemRepository, RSSItemRepository>();
5             services.AddScoped<IUserRepository, UserRepository>();
6             services.AddScoped<IRSSSourceRepository, RSSSourceRepository>();
7             //the cache
8             services.AddScoped<ICache, RedisCache>();
9         }

这两个可以说是这个RSS订阅最重要的两个地方。一个从网络拿数据回来,一个从数据库中拿数据出来。

开发的时候,由于要用到redis,我本人是在电脑上装了一个windows版本的,方便调试。

操作用的是StackExchange.Redis,自己曾简单封装了一些基本用法,不过这个还不是正式版。

其他部分应该都是比较简单,所以就不说明了。

下面来看看在CentOS7下部署。

0x03 部署

上一篇来份dotNETCore尝尝,用到的部署方式是纯粹的.NET Core SDK的方式。

今天换一种方式来试试用Jexus+.NET Core SDK来部署(当然,也有不安装.NET Core的部署方式)。

先把刚才的项目发布一下:

这个程序集是不是太多了啊,希望微软能在下一版本改进一下这个。

把这些东西上传到 /var/www/easyrss

在jexus下面的siteconf文件夹添加一个配置easyrss

多加了一行AppHost,就可以让jexus支持asp.net core了,更多关于这个的介绍可以参考http://linuxdot.net/bbsfile-4459

加上这一句之后,启动这个网站就可以了。

AppHost={CmdLine=dotnet /var/www/easyrss/Catcher.EasyRSS.WebSite.dll;AppRoot=/var/www/easyrss;port=5000}

启动easyrss这个网站:./jws start easyrss

还有重要的一步,启动redis,不然死活都跑不起来。

启动redis: ./redis-server

打开浏览器就能看到效果了

操作相当的简单吧。赶紧动手试试吧。

再放几张效果图(毕竟也花了大半天时间)

      

      

0x04 总结

1、部署成功后遇到过一个问题,样式和脚本无法正常加载。请求外网的资源比较耗时(网络渣),只好将生产环境的样式

换成本地加载了,然后就正常了。

2、ASP.NET Core和ASP.NET MVC在开发的时候,没有太大的区别,应该是很容易过渡的,应该慢慢的也会有更多的用dotNET Core来开发了。

时间: 2024-10-14 11:15:50

做个简单的RSS订阅(ASP.NET Core),节省自己的时间的相关文章

如何在 ASP.NET Core 测试中操纵时间?

有时候,我们会遇到一些跟系统当前时间相关的需求,例如: 只有开学季才允许录入学生信息 只有到了晚上或者周六才允许备份博客 注册满 3 天的用户才允许进行一些操作 某用户在 24 小时内被禁止发言 很显然,要实现这些功能的代码多多少少要用到 DateTime.Now 这个静态属性,然而要使用单元测试或者集成测试对上述需求进行验证,往往需要采用一些曲线救国的方法甚至是直接跳过这些测试,这是因为在 .Net 中,DateTime.Now 通常难以被 Mock .这时候我就要夸一夸 Angular 的测

ASP.NET Core 2.0 : 五.服务是如何加载并运行的, Kestrel、配置与环境

"跨平台"后的ASP.Net Core是如何接收并处理请求的呢? 它的运行和处理机制和之前有什么不同? 本章从"宏观"到"微观"地看一下它的结构以及不同时期都干了些什么. 本章主要内容如下: ASP.NET Core 的运行机制: "宏观"的看一下Http请求的处理流程. ASP.NET Core 的配置与运行: 2倍放大后的ASP.NET Core Application, Kestrel服务器.启动与配置 ASP.NET

ASP.NET Core Web API

1.简单介绍 ASP.NET Core Web API 是 ASP.NET Core MVC 的一个功能.ASP.NET Core MVC 包含了对 Web API 的支持.可以构建多种客户端的 HTTP 服务.ASP.NET Core Web API可用于在 .NET Core 上构建 RESTful 应用程序. 框架包含对 HTTP 内容协商的支持,内置支持以 JSON 或 XML 格式化的数据.编写自定义格式化程序已添加对自有格式的支持. 使用链接生成对超媒体的支持.启用对跨资源共享(CO

ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射

原文:ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射 本章主要简单介绍下在ASP.NET Core中如何使用AutoMapper进行实体映射.在正式进入主题之前我们来看下几个概念: 1.数据库持久化对象PO(Persistent Object):顾名思义,这个对象是用来将我们的数据持久化到数据库,一般来说,持久化对象中的字段会与数据库中对应的 table 保持一致. 2.视图对象VO(View Object):视图对象 V

在Linux和Windows的Docker容器中运行ASP.NET Core

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了.那么我就来翻译一下这篇文章,让更多的中文读者看到.当然Scott遇到的坑我也遇到了. 不过首先,对于不熟悉的朋友我还是来解释一下Linux容器和Windows容器的概念. 由于容器成为虚拟化和应用托管的一种不可避免的选项,Windows也开始为公众提供容器功能(其实微软具备和使用

Docker容器中运行ASP.NET Core

在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了.那么我就来翻译一下这篇文章,让更多的中文读者看到.当然Scott遇到的坑我也遇到了. 不过首先,对于不熟悉的朋友我还是来解释一下Linux容器和Windows容器的概念. 由于容器成为虚拟化和应用托管的一种不可避免的选项,Windows也开始为公众提供容器功能(其实微软具备和使用容器技术很久了).这

Asp.net Core 初探(发布和部署Linux)

前言 俗话说三天不学习,赶不上刘少奇.Asp.net Core更新这么长时间一直观望,周末帝都小雨,宅在家看了下Core Web App,顺便搭建了个HelloWorld环境来尝尝鲜,第一次看到.Net Web运行在Linux上还是有点小激动(只可惜微软走这一步路走的太晚,要不然屌丝们也不会每每遇见Java VS .Net就想辩论个你死我活). 开发环境和部署环境 Windows 10.VS2015 Update3.安装.Net Core SDK.DotNetCore.1.0.1-VS2015T

百科知识 什么是RSS订阅

RSS订阅 百科名片 RSS订阅是站点用来和其他站点之间共享内容的一种简易方式,即Really Simple Syndication(易信息聚合). 简介 在门户网站大行其道,人们已经习惯通过搜索引擎来获取新闻资讯的今天,一种全新的资讯传播方式已经悄悄地来到我们身边,仔细观察一些网站,你可能注意到一些被标记为"XML"或"RSS"的橙色图标. 面对扑面而来的新闻,不用再花费大量的时间冲浪和从新闻网站下载,只要通过下载或购买一种小程序,这种技术被称为简RSS会收集和组

ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现

很长一段时间以来,我都在思考如何在ASP.NET Core的框架下,实现一套完整的事件驱动型架构.这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NET Core的微服务,它能够非常简单地订阅来自于某个渠道的事件消息,并对接收到的消息进行处理,于此同时,它还能够向该渠道发送事件消息,以便订阅该事件消息的消费者能够对消息数据做进一步处理.让我们回顾一下微服务之间通信的几种方式,分为同步和异步两种.同步通信最常见的就是RESTful API,而且非常简单轻量,一个Request/Resp