Skip to content

Commit

Permalink
feat: add feed.xml as RSS
Browse files Browse the repository at this point in the history
  • Loading branch information
CaliCastle committed May 25, 2023
1 parent 6c506d0 commit f07c528
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 10 deletions.
47 changes: 47 additions & 0 deletions app/(main)/feed.xml/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { Feed } from 'feed'

import { seo } from '~/lib/seo'
import { getLatestBlogPosts } from '~/sanity/queries'

export const revalidate = 60 * 60 * 12 // 12 hours

export async function GET() {
const feed = new Feed({
title: seo.title,
description: seo.description,
id: seo.url.href,
link: seo.url.href,
language: 'zh-CN',
image: `${seo.url.href}/opengraph-image.png`,
favicon: `${seo.url.href}/icon.png`,
copyright: '版权所有 2023, Cali Castle',
generator: 'PHP 9.0',
author: {
name: 'Cali Castle',
email: '[email protected]',
link: seo.url.href,
},
})

const data = await getLatestBlogPosts(999)
if (!data) {
return new Response('Not found', { status: 404 })
}

data.forEach((post) => {
feed.addItem({
title: post.title,
id: post._id,
link: `${seo.url.href}/blog/${post.slug}`,
description: post.description,
date: new Date(post.publishedAt),
image: post.mainImage.asset.url,
})
})

return new Response(feed.rss2(), {
headers: {
'content-type': 'application/xml; charset=utf-8',
},
})
}
18 changes: 8 additions & 10 deletions app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,15 @@ import { type Metadata } from 'next'

import { ThemeProvider } from '~/app/(main)/ThemeProvider'
import { sansFont } from '~/lib/font'
import { seo } from '~/lib/seo'

const title = 'Cali Castle | 开发者、设计师、细节控、创始人'
const description =
'我叫 Cali,一名开发者,设计师,细节控,同时也是佐玩创始人,目前带领着佐玩致力于创造一个充满创造力的工作环境,同时鼓励团队创造影响世界的产品。'
export const metadata: Metadata = {
metadataBase: new URL('https://cali.so'),
metadataBase: seo.url,
title: {
template: '%s | Cali Castle',
default: title,
default: seo.title,
},
description,
description: seo.description,
keywords: 'Cali,Cali Castle,郭晓楠,佐玩,创始人,CEO,开发者,设计师,细节控,创新',
themeColor: [
{ media: '(prefers-color-scheme: dark)', color: '#000212' },
Expand All @@ -34,10 +32,10 @@ export const metadata: Metadata = {
},
openGraph: {
title: {
default: title,
default: seo.title,
template: '%s | Cali Castle',
},
description,
description: seo.description,
siteName: 'Cali Castle',
locale: 'zh_CN',
type: 'website',
Expand All @@ -47,8 +45,8 @@ export const metadata: Metadata = {
site: '@thecalicastle',
creator: '@thecalicastle',
card: 'summary_large_image',
title,
description,
title: seo.title,
description: seo.description,
},
}

Expand Down
10 changes: 10 additions & 0 deletions lib/seo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export const seo = {
title: 'Cali Castle | 开发者、设计师、细节控、创始人',
description:
'我叫 Cali,一名开发者,设计师,细节控,同时也是佐玩创始人,目前带领着佐玩致力于创造一个充满创造力的工作环境,同时鼓励团队创造影响世界的产品。',
url: new URL(
process.env.NODE_ENV === 'production'
? 'https://cali.so'
: 'http://localhost:3000'
),
} as const
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"@zolplay/utils": "^1.3.4",
"cheerio": "1.0.0-rc.12",
"dayjs": "^1.11.7",
"feed": "^4.2.2",
"framer-motion": "^10.12.12",
"jotai": "^2.1.0",
"next": "^13.4.3",
Expand Down
21 changes: 21 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit f07c528

Please sign in to comment.