This commit is contained in:
2025-06-07 22:53:52 +09:00
parent 779b5ab43a
commit 0549a61753
4 changed files with 31 additions and 20 deletions

View File

@ -3,6 +3,7 @@ import { dirname } from "path";
import {
Episode,
fetchAllEpisodes,
fetchEpisodesWithFeedInfo,
performDatabaseIntegrityFixes,
} from "./database.js";
import path from "node:path";
@ -18,7 +19,7 @@ function escapeXml(text: string): string {
.replace(/'/g, "'");
}
function createItemXml(episode: Episode): string {
function createItemXml(episode: any): string {
const fileUrl = `${config.podcast.baseUrl}/podcast_audio/${path.basename(episode.audioPath)}`;
const pubDate = new Date(episode.createdAt).toUTCString();
@ -46,12 +47,17 @@ function createItemXml(episode: Episode): string {
<enclosure url="${escapeXml(fileUrl)}" length="${fileSize}" type="audio/mpeg" />
<guid>${escapeXml(fileUrl)}</guid>
<pubDate>${pubDate}</pubDate>
<source:feedTitle><![CDATA[${escapeXml(episode.feedTitle || '')}]]></source:feedTitle>
<source:feedUrl>${escapeXml(episode.feedUrl || '')}</source:feedUrl>
<source:articleTitle><![CDATA[${escapeXml(episode.articleTitle || '')}]]></source:articleTitle>
<source:articleLink>${escapeXml(episode.articleLink || '')}</source:articleLink>
<source:articlePubDate>${episode.articlePubDate || ''}</source:articlePubDate>
</item>`;
}
export async function updatePodcastRSS(): Promise<void> {
try {
const episodes: Episode[] = await fetchAllEpisodes();
const episodes = await fetchEpisodesWithFeedInfo();
// Filter episodes to only include those with valid audio files
const validEpisodes = episodes.filter((episode) => {
@ -77,7 +83,7 @@ export async function updatePodcastRSS(): Promise<void> {
// Create RSS XML content
const rssXml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<rss version="2.0" xmlns:source="http://source.example.com/podcast">
<channel>
<title>${escapeXml(config.podcast.title)}</title>
<link>${escapeXml(config.podcast.link)}</link>