2022/5/7
Remix と Cloudflare Workers で RSS を作成する
先日の続き。
Next.js でも Gatsbyjs でも RSS とか作ろうとするとプラグインを使う必要があった気がする。
そこがなんか気になってはいた、、、
Movable Type とかで静的に出す場合はどんなのも生成できていたからなおさら気になるのかも知れない。
単に僕がわかってないだけでいい方法はありそうだけど。
Remix で header を色々調整して返せるらしいので試してみた。
headers
https://remix.run/docs/en/v1/a...
こちらの記事が参考になった。
RSS in Remix 💿 — CanRau.com
https://www.canrau.com/en/rss-...
ありがたし、、、m(__)m
app/routes/feed[.]xml.jsx を用意する
Remix では Resource Routes というらしい。
Remix | Resource Routes
https://remix.run/docs/en/v1.4...
feed[.]xml.jsx で feed.xml として出力できる。
GraphQLでデータ取得するところは getRSS で用意しておく。
RSS をとってるわけじゃないからこの名前はあまり良くないな。。。
export async function loader() {
const posts = await getRSS().catch(() => {
});
const postItems = posts.data.entries
.map((post) => {
return [
`<item>`,
`<title>${post.title}</title>`,
`<pubDate>${post.postDate}</pubDate>`,
`<description><![CDATA[${post.title}]]></description>`,
`<content:encoded><![CDATA[${post.title}]]></content:encoded>`,
`<link>${post.url}</link>`,
`<guid isPermaLink="false">tag:${post.postDate}:/${post.slug}#</guid>`,
`</item>`
].join("");
});
let rss = [
`<?xml version="1.0" encoding="UTF-8"?>`,
`<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">`,
`<channel>`,
`<title>mersy note</title>`,
`<description>mersy note</description>`,
`<link>https://remix-cloudflare-workers.mersy4189618.workers.dev/</link>`,
`<atom:link href="https://remix-cloudflare-workers.mersy4189618.workers.dev/feed.xml" rel="self" type="application/rss+xml" />`,
`<language>ja-JP</language>`,
...postItems,
`</channel>`,
`</rss>`,
];
return new Response(rss.join(""), {
headers: {
"Content-Type": "application/xml; charset=utf-8",
"x-content-type-options": "nosniff",
},
});
}
とりあえずこんなかんじで、取得したデータを元に postItems をいれていって、最後がっちゃんこ。
本文部分は面倒くて後回し。。。
headers で指定することでちゃんとレスポンスも変えられた。
色々できそうな気がするなー。
先人の記事を参考にやっているだけなので色々わかっていない所が多い。
JavaScript / React.js / Remix しかり、 Cloudflare Workers しかり。
Cloudflare Workers だと、 Remix でつくったこれらのデータがどんな感じで KV に保存されてるのかとかよくわかってないな。
よしなにやってくれているところをもう少し理解したいところではある。
関連記事
- 2023/1/5 ブログを Twig のテンプレートベースと Blitz プラグインの構成に戻した
- 2022/5/5 Remix と Cloudflare Workers で Craft CMS のデータを表示する
- 2022/5/6 Remix と Cloudflare Workers で Craft CMS の詳細ページを表示する #craftcms
- 2022/5/9 Remix と Cloudflare Workers で Craft CMS の検索ページを作成する
- 2022/5/30 remix-service-bindings で Cloudflare Workers のファイルサイズ制限の対策をしてみる
- 2022/5/11 Craft CMS の Live Preview で Remix / Cloudflare Workers のページを使う #craftcms
- 2022/5/31 このサイトを Cloudflare Workers 経由に変えてみた
- 2022/12/22 Craft CMS でのブログは Twig テンプレートに Blitz プラグインでよさそう
- 2022/5/27 Craft CMS のプレビューターゲットで Cloudflare Workers KV のデータを削除する
- 2022/5/10 Craft CMS のデータを GraphQL で取得して Cloudflare Workers KV に保存・取得する