做個簡單的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來開發了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM