refactor: append new episodes to existing podcast.xml
This commit is contained in:
@ -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"?>
|
const rssXml = `<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<rss version="2.0">
|
<rss version="2.0">
|
||||||
<channel>
|
<channel>
|
||||||
@ -55,8 +107,8 @@ export async function updatePodcastRSS() {
|
|||||||
</rss>
|
</rss>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const outputPath = join(__dirname, "../public/podcast.xml");
|
|
||||||
// Ensure directory exists
|
// Ensure directory exists
|
||||||
await fs.mkdir(dirname(outputPath), { recursive: true });
|
await fs.mkdir(dirname(outputPath), { recursive: true });
|
||||||
await fs.writeFile(outputPath, rssXml.trim());
|
await fs.writeFile(outputPath, rssXml.trim());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user