refactor: append new episodes to existing podcast.xml

This commit is contained in:
2025-06-04 13:46:50 +09:00
parent e6a6353a6c
commit 2df3f0a8eb

View File

@ -43,6 +43,58 @@ export async function updatePodcastRSS() {
`;
}
const outputPath = join(__dirname, "../public/podcast.xml");
// 既存のRSSファイルの読み込み
let existingXml = "";
try {
existingXml = await fs.readFile(outputPath, "utf-8");
} catch (err) {
// ファイルが存在しない場合は新規作成
console.log("既存のpodcast.xmlが見つかりません。新規作成します。");
}
if (existingXml) {
// 既存のitem部分を抽出
const existingItemsMatch = existingXml.match(/<channel>([\s\S]*?)<\/channel>/);
if (existingItemsMatch) {
const existingItems = existingItemsMatch[1];
const newItemStartIndex = existingItems.lastIndexOf("<item>");
// 新しいitemを追加
const updatedItems = existingItems + itemsXml;
// lastBuildDateを更新
const updatedXml = existingXml.replace(
/<lastBuildDate>.*?<\/lastBuildDate>/,
`<lastBuildDate>${lastBuildDate}</lastBuildDate>`
);
// items部分を置き換え
const finalXml = updatedXml.replace(
/<channel>[\s\S]*?<\/channel>/,
`<channel>${updatedItems}</channel>`
);
// ファイルに書き込み
await fs.writeFile(outputPath, finalXml.trim());
} else {
// 不正なフォーマットの場合は新規作成
const rssXml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>${channelTitle}</title>
<link>${channelLink}</link>
<description>${channelDescription}]]></description>
<lastBuildDate>${lastBuildDate}</lastBuildDate>
${itemsXml}
</channel>
</rss>
`;
await fs.writeFile(outputPath, rssXml.trim());
}
} else {
// 新規作成
const rssXml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
@ -55,8 +107,8 @@ export async function updatePodcastRSS() {
</rss>
`;
const outputPath = join(__dirname, "../public/podcast.xml");
// Ensure directory exists
await fs.mkdir(dirname(outputPath), { recursive: true });
await fs.writeFile(outputPath, rssXml.trim());
}
}