RSSフィードをNode.jsで作成する
2021/05/29
RSSの仕様
RSS Version2.0
に則り XMLで記述する。
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>title</title>
<link>url</link>
<description>description</description>
<lastBuildDate>lastBuildDate</lastBuildDate>
<item>
<title>title</title>
<link>url</link>
<guid>url</guid>
<pubDate>date</pubDate>
</item>
...
</channel>
</rss>
node-xml2jsを使う
使い方は こっち itemまでのRSS Objectを生成し、ファイル等でitemにpushしていく。 当サイトではall.jsonが存在するのでそちらを使ってRSSに追加していく。
const xml2js = require('xml2js');
const fs = require('fs');
const URL = "https://sushi.karaage.tokyo/";
const builder = new xml2js.Builder();
const rss = {
rss:{
$:{
"version" : "2.0",
"xmlns:atom": "http://www.w3.org/2005/Atom"
},
channel:{
title: "Sushi karaage",
link: URL,
description: "sushi karaageのブログです",
lastBuildDate: new Date().toUTCString(),
item: []
}
}
};
const json = JSON.parse(fs.readFileSync("./src/assets/data/all.json",'utf8'));
json.forEach(item => {
const path = item.path.split("-");
const pathName = "./src/assets/md-article/" + path.join("/") + ".md"
const file = fs.readFileSync(pathName,'utf8');
const { birthtime } = fs.statSync(pathName);
rss.rss.channel.item.push({
title: file.split('\n')[0].replace("#",""),
link: URL + "article/" + item.path,
guid: URL + "article/" + item.path,
pubDate: new Date(birthtime).toUTCString(),
})
});
const xml = builder.buildObject(rss);
console.log(xml);
fs.writeFileSync(`./docs/rss.xml`,xml,(err)=>{
if(err) console.log(err);
});