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 に保存されてるのかとかよくわかってないな。
よしなにやってくれているところをもう少し理解したいところではある。