banner
AgedCoffee

AgedCoffee

用 RSS 打造自己的閱讀習慣

RSS 是什麼 & 有什麼好處#

簡易信息聚合(也叫聚合內容)是一種基於 XML 的標準,在互聯網上被廣泛採用的內容包裝和投遞協議。RSS (Really Simple Syndication) 是一種描述和同步網站內容的格式,是使用最廣泛的 XML 應用。RSS 搭建了信息迅速傳播的一個技術平台,使得每個人都成為潛在的信息提供者。

  • 本質是一個 xml 文件
  • xml 中含有當前網站的一些摘要信息
  • 可以被訂閱接收
  • 不受具體平台的約束
  • 可以透過 RSS 閱讀器來將不同的信息源聚合
  • 無廣告

RSS 閱讀器推薦#

Fluent-Reader 電腦端

fluent-reader

Ego-Reader 移動端

ego-reader

如何找 RSS 訂閱源#

RSSHub#

RSSHub 是一個開源、簡單易用、易於擴展的 RSS 生成器,可以給任何奇奇怪怪的內容生成 RSS 訂閱源。RSSHub 借助於開源社區的力量快速發展中,目前已適配數百家網站的上千項內容

XiTNAl

輔助查找網站上的 RSS 訂閱源#

谷歌插件#

RSSHub Radar

ID50BU

安卓 APP#

RSSAid

IOS APP#

RSSBud

看自己喜歡的博客有沒有 RSS 訂閱#

7Qk29t

前端優質博客推薦

添加 RSS 訂閱源 & 使用 RSS 閱讀器#

Fluent-Reader
wBUg6e

sHQMCh

Ego-Reader
GvAWAS

fpXTH1

部署自己的 RSShub#

官網提供了很多的部署方式,建議使用 fork 代碼倉庫使用 Vercel 提供的免費雲平台部署自己的服務

vercel

YFynGM

在自己的博客上添加 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 } }
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。