RSS 是什麼 & 有什麼好處#
簡易信息聚合(也叫聚合內容)是一種基於 XML 的標準,在互聯網上被廣泛採用的內容包裝和投遞協議。RSS (Really Simple Syndication) 是一種描述和同步網站內容的格式,是使用最廣泛的 XML 應用。RSS 搭建了信息迅速傳播的一個技術平台,使得每個人都成為潛在的信息提供者。
- 本質是一個 xml 文件
- xml 中含有當前網站的一些摘要信息
- 可以被訂閱接收
- 不受具體平台的約束
- 可以透過 RSS 閱讀器來將不同的信息源聚合
- 無廣告
RSS 閱讀器推薦#
如何找 RSS 訂閱源#
RSSHub#
RSSHub 是一個開源、簡單易用、易於擴展的 RSS 生成器,可以給任何奇奇怪怪的內容生成 RSS 訂閱源。RSSHub 借助於開源社區的力量快速發展中,目前已適配數百家網站的上千項內容
輔助查找網站上的 RSS 訂閱源#
谷歌插件#
安卓 APP#
IOS APP#
看自己喜歡的博客有沒有 RSS 訂閱#
前端優質博客推薦
添加 RSS 訂閱源 & 使用 RSS 閱讀器#
Fluent-Reader
Ego-Reader
部署自己的 RSShub#
官網提供了很多的部署方式,建議使用 fork 代碼倉庫使用 Vercel 提供的免費雲平台部署自己的服務
在自己的博客上添加 RSS 訂閱#
// 生成 RSS 訂閱條目需要的信息
const generateRssItem = (post) => `
<item>
<guid>${siteMetadata.siteUrl}/blog/${post.slug}</guid>
<title>${escape(post.title)}</title>
<link>${siteMetadata.siteUrl}/blog/${post.slug}</link>
${post.summary && `<description>${escape(post.summary)}</description>`}
<pubDate>${new Date(post.date).toUTCString()}</pubDate>
<author>${siteMetadata.email} (${siteMetadata.author})</author>
${post.tags && post.tags.map((t) => `<category>${t}</category>`).join('')}
</item>
`
const generateRss = (posts, page = 'feed.xml') => `
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>${escape(siteMetadata.title)}</title>
<link>${siteMetadata.siteUrl}/blog</link>
<description>${escape(siteMetadata.description)}</description>
<language>${siteMetadata.language}</language>
<managingEditor>${siteMetadata.email} (${siteMetadata.author})</managingEditor>
<webMaster>${siteMetadata.email} (${siteMetadata.author})</webMaster>
<lastBuildDate>${new Date(posts[0].date).toUTCString()}</lastBuildDate>
<atom:link href="${siteMetadata.siteUrl}/${page}" rel="self" type="application/rss+xml"/>
${posts.map(generateRssItem).join('')}
</channel>
</rss>
`
// 以 next.js 為例在生成頁面的時候生成 feed.xml RSS 訂閱源文件
export async function getStaticProps({ params }) {
const allPosts = await getAllFilesFrontMatter('blog')
const postIndex = allPosts.findIndex((post) => formatSlug(post.slug) === params.slug.join('/'))
const prev = allPosts[postIndex + 1] || null
const next = allPosts[postIndex - 1] || null
const post = await getFileBySlug('blog', params.slug.join('/'))
const authorList = post.frontMatter.authors || ['default']
const authorPromise = authorList.map(async (author) => {
const authorResults = await getFileBySlug('authors', [author])
return authorResults.frontMatter
})
const authorDetails = await Promise.all(authorPromise)
// rss
const rss = generateRss(allPosts)
fs.writeFileSync('./public/feed.xml', rss)
return { props: { post, authorDetails, prev, next } }
}