import { promises as fs } from "fs"; import { join, dirname } from "path"; import { Episode, fetchAllEpisodes } from "./database"; import path from "node:path"; import fsSync from "node:fs"; export async function updatePodcastRSS() { const episodes: Episode[] = await fetchAllEpisodes(); const channelTitle = process.env["PODCAST_TITLE"] ?? "自動生成ポッドキャスト"; const channelLink = process.env["PODCAST_LINK"] ?? "https://your-domain.com/podcast"; const channelDescription = process.env["PODCAST_DESCRIPTION"] ?? "RSSフィードから自動生成された音声ポッドキャスト"; const channelLanguage = process.env["PODCAST_LANGUAGE"] ?? "ja"; const channelAuthor = process.env["PODCAST_AUTHOR"] ?? "管理者"; const channelCategories = process.env["PODCAST_CATEGORIES"] ?? "Technology"; const channelTTL = process.env["PODCAST_TTL"] ?? "60"; const lastBuildDate = new Date().toUTCString(); let itemsXml = ""; for (const ep of episodes) { const fileUrl = `https://your-domain.com/podcast_audio/${path.basename(ep.audioPath)}`; const pubDate = new Date(ep.pubDate).toUTCString(); const fileSize = fsSync.statSync(ep.audioPath).size; itemsXml += ` <![CDATA[${ep.title}]]> /g, "]]>")}]]> ${channelAuthor} ${channelCategories} ${channelLanguage} ${channelTTL} ${fileUrl} ${pubDate} `; } const rssXml = ` ${channelTitle} ${channelLink} ${channelDescription}]]> ${lastBuildDate} ${itemsXml} `; const outputPath = join(__dirname, "../public/podcast.xml"); // Ensure directory exists await fs.mkdir(dirname(outputPath), { recursive: true }); await fs.writeFile(outputPath, rssXml.trim()); }