.NET 个人博客-添加RSS订阅功能
个人博客-添加RSS订阅功能
前言
个人博客系列已经完成了
- 留言板
- 文章归档
- 推荐文章优化
- 推荐文章排序
博客地址:https://pljzy.top
然后博客开源的原作者也是百忙之中添加了一个名为RSS订阅的功能,那么我就来简述一下这个功能是干嘛的,然后照葫芦画瓢实现一下。
RSS简述
来自chatGPT
的回答
网站的RSS订阅是一种用于订阅和获取网站内容更新的技术。RSS(Really Simple Syndication)是一种XML格式的文件,包含了网站的最新文章、新闻、博客、视频等内容的摘要和链接。通过订阅网站的RSS源,用户可以方便地获取最新的内容更新,而无需每次都访问网站。
使用RSS订阅可以帮助用户更有效地管理和浏览大量的网站内容。当订阅的网站有新的内容发布时,用户可以通过RSS阅读器或者其他支持RSS的应用程序自动获取更新的摘要和链接。这样,用户可以快速浏览多个网站的最新内容,选择感兴趣的文章进行阅读。
通过订阅网站的RSS源,用户可以节省时间和精力,同时也可以避免错过重要的内容更新。无论是新闻、博客、论坛还是其他类型的网站,只要提供了RSS订阅功能,用户就可以方便地订阅并获取更新的内容。
功能实现
安装依赖
Nuget包:
System.ServiceModel.Syndication
创建控制器
_dbContext
用来操作数据库的,我用的是EF Core,这里就不做解释了
_conf
是用来获取系统配置的,对于RSS功能实现影响不大,不做解释
public class RssController : Controller
{
private readonly MyDbContext _dbContext;
private readonly ConfigService _conf;
public RssController(MyDbContext dbContext,ConfigService conf)
{
_dbContext = dbContext;
_conf = conf;
}
[HttpGet]
public IActionResult Index()
{
var feedUrl = $"{_conf["host"]}/feed";
ViewBag.FeedUrl = feedUrl;
return View();
}
}
添加接口
接口内容太多,分步解释
[ResponseCache(Duration = 1200)]
设置客户端缓存1200秒
[ResponseCache(Duration = 1200)]
[HttpGet("feed")]
public async Task<IActionResult> Feed(){
}
初始化
- host 其实就是自己项目的url,本地跑就是https://localhost......
- items 为集合类型的
SyndicationItem
对象,后续会添加多个对象 - posts 查询出今年所有文章,并且同时查询出文章的分类
- feed 传入的参数分别是标题、说明、网站地址、订阅ID和最后更新时间。
var host = _conf["host"];
var items = new List<SyndicationItem>();
var posts = await _dbContext.posts.Where(a => a.CreationTime.Year == DateTime.Now.Year)
.Include(a => a.Categories)
.ToListAsync();
var feed = new SyndicationFeed("ZY知识库", "这是一个用于分享知识和经验的平台,我会在这里分享一些我学习和工作中的经验和心得,希望能够对你有所帮助。",
new Uri($"{host}"), "RSSUrl", posts.First().LastUpdateTime)
{
Copyright = new TextSyndicationContent($"{DateTime.Now.Year} ZY知识库")
};
添加文章
为items对象添加数据,参数为标题、HTML 格式的文章内容、地址、最后更新时间,并且每个items对象都有Categories
、Authors
、PublishDate
、Summary
这4个参数,对应category、author、published、summary
如图所示:
foreach (var item in posts)
{
var postUrl = Url.Action("Post", "Blog", new { id = $"{item.Id}" }, HttpContext.Request.Scheme);
items.Add(new SyndicationItem(item.Title,
item.Summary, //图文并茂看下方↓
new Uri(postUrl),item.Id,item.LastUpdateTime)
{
Categories = { new SyndicationCategory(item.Categories?.Name) },
Authors = { new SyndicationPerson("1767992919@qq.com","ZY知识库",$"{_conf["host"]}") },
PublishDate = item.CreationTime,
Summary = new TextSyndicationContent(item.Summary)
});
}
feed.Items = items;
如果要让 RSS 阅读器显示文章的时候图文并茂,应该使用 HTML 格式的文章内容,可以把 item.Summary
换成以下代码
new TextSyndicationContent(PostService.GetContentHtml(item), TextSyndicationContentKind.Html)
生成xml
var settings = new XmlWriterSettings {
Async = true,
Encoding = Encoding.UTF8,
NewLineHandling = NewLineHandling.Entitize,
NewLineOnAttributes = true,
Indent = true
};
using var stream = new MemoryStream();
await using var xmlWriter = XmlWriter.Create(stream, settings);
var rssFormatter = new Atom10FeedFormatter(feed);
rssFormatter.WriteTo(xmlWriter);
await xmlWriter.FlushAsync();
return File(stream.ToArray(), "application/xml; charset=utf-8");
功能预览
RSS本身是一种XML格式的文本内容,要查看该内容需要用到专门的RSS客户端,原作者推荐的是开源的Windows客户端 Fluent Reader。
那么他的下载地址为:Releases · yang991178/fluent-reader (github.com)
然后只需要添加预览源:https://pljzy.top/feed 就能看到今年发布的文章了
如图:
参考资料
- https://blog.sblt.deali.cn:9000/Blog/Post/adcd547eefd06863
- 基于.NetCore开发博客项目 StarBlog - (29) 开发RSS订阅功能 - 程序设计实验室 - 博客园 (cnblogs.com)
.NET 个人博客-添加RSS订阅功能的更多相关文章
- 2019-9-2-给博客添加rss订阅
title author date CreateTime categories 给博客添加rss订阅 lindexi 2019-09-02 12:57:38 +0800 2018-2-13 17:23 ...
- 给博客添加rss订阅
如果是自己搭建博客,有一个问题是如何写一篇新的文章就可以告诉读者,你写了一篇新的?一个简单方法是使用 rss ,RSS订阅是站点用来和其他站点之间共享内容的一种简易方式,即Really Simple ...
- HEXO | 给博客添加RSS
Hexo是一个简洁.高效.易用的博客框架,同时它拥有十分丰富的主题环境,本次我们所谈到的是cards主题,但是该主题的原生环境里没有相关的rss配置,所以我们需要采用手动添加的方式,进而实现rss功能 ...
- Hexo next博客添加折叠块功能添加折叠代码块
前言 有大段的东西想要放上去,但又不想占据大量的位置.折叠是最好的选择.下面在Hexo的主题上定制添加折叠功能. 本文基于Hexo Next的主题修改.其他主题应该也差不多. 在main.js中添加折 ...
- Hexo 博客快速整合gitalk组件,给静态博客添加动态评论功能!
什么是 hexo-plugin-gitalk
- 开启 Django 博客的 RSS 功能
作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 博客提供 RSS 订阅应该是标配,这样读者就可以通过一些聚合阅读工具订阅你的博客,时 ...
- 给 hugo 博客添加搜索功能
起因 我的博客使用了 hugo 作为静态生成工具,自带的主题里也没有附带搜索功能.看来,还是得自己给博客添加一个搜索功能. 经过多方查找,从 Hugo Fast Search · GitHub 找到一 ...
- 如何利用腾讯云COS为静态博客添加动态相册
前言 本文首发于个人网站Jianger's Blog,欢迎访问订阅.个人博客小站刚建站不久,想着除了主题里的功能外再添加上相册模块,于是半搜索半摸索把相册模块搞出来了,最后采用了利用腾讯云对象存储作图 ...
- 【干货】2个小时教你hexo博客添加评论、打赏、RSS等功能 (转)
备注:该教程基于Hexo 2.x版本,目前Hexo是3.x版本,照本教程实现有可能会出现404错误,笔者目前还未找时间去解决,待笔者找时间解决该问题后,再写一篇该问题的解决教程,给各位读者带来困扰,还 ...
- hexo next主题为博客添加分享功能
title: hexo next主题为博客添加分享功能 date: 2018-01-06 20:20:02 tags: [hexo博客, 博客配置] categories: hexo next主题配置 ...
随机推荐
- OLAP系列之分析型数据库clickhouse主从副本模式(三)
一.测试单分片,单副本或多副本模式 # 1.停止集群 systemctl stop clickhouse-server # 修改配置文件 vim /etc/clickhouse-server/conf ...
- .NET Aspire 预览版 6 发布
.NET Aspire 预览版 6 引入了一系列重大更新,主要包括 API 的重大更改.安全性和可靠性的提升.新的资源和组件.应用程序主机的更新.测试支持.模板更新.组件更新.Azure 配置包的更新 ...
- webapi授权认证
webapi授权认证 一.需要类包 Microsoft.AspNetCore.Authentication.JwtBearer 二.相关名词 Authentication(认证):标识用户的身份,一般 ...
- 深入剖析:如何使用Pulsar和Arthas高效排查消息队列延迟问题
背景 前两天收到业务反馈有一个 topic 的分区消息堆积了: 根据之前的经验来看,要么是业务消费逻辑出现问题导致消费过慢,当然也有小概率是消息队列的 Bug(我们使用的是 pulsar). 排查 通 ...
- 模型微调-书生浦语大模型实战营学习笔记4&大语言模型7
大语言模型-7.模型微调 书生浦语大模型实战营学习笔记-4.模型微调 本节对应的视频教程为B站链接.笔记对视频的理论部分进行了整理.部分内容参考李宏毅2024春<生成式人工智能导论>和三分 ...
- git checkout 命令图文详解
目录 git checkout branchname (切换本地分支) 切换远程分支 放弃修改 git checkout . git checkout – filename git checkout ...
- 记一次线上Redis内存占用过高、大Key问题的排查
问题背景 在一个风和日丽的下午,公司某项目现场运维同学反馈,生产环境3个Redis的Sentinel集群节点内存占用都很高,达到了17GB的内存占用量. 稍加思索,应该是某些Key的Value数据体量 ...
- postgresql性能优化2:sql语句和缓存配置
1.看执行计划 EXPLAIN, 此命令用于查看SQL的执行计划 总的来说sql的执行计划是一个树形层次结构, 一般来说阅读上遵从层级越深越优先, 同一层级由上到下的原则. 来跟着铁蛋老师读: 层级越 ...
- AIRIOT物联网低代码平台如何配置OPC UA驱动?
AIRIOT物联网低代码平台支持驱动类型丰富,驱动包括但不限于通用驱动信息,无线驱动信息,行业驱动信息及各个厂商驱动.驱动稳定性强,经受住各个大型项目考验,持续稳定运行. AIRIOT物联网低代码平台 ...
- 导入使用es
from django.shortcuts import render, HttpResponsefrom elasticsearch import Elasticsearchfrom elastic ...