feat: use audio path for episode player and tts file name

This commit is contained in:
2025-06-04 13:52:40 +09:00
committed by Satsuki Akiba (aider)
parent 2df3f0a8eb
commit 9cc3e1f66b
3 changed files with 15 additions and 17 deletions

View File

@ -36,7 +36,7 @@ export default function EpisodePlayer() {
const handlePlay = (episode: Episode) => { const handlePlay = (episode: Episode) => {
setSelectedEpisode(episode); setSelectedEpisode(episode);
setAudioUrl(`/podcast_audio/${episode.id}.mp3`); setAudioUrl(`/podcast_audio/${episode.audioPath}`);
}; };
if (loading) return <div>...</div>; if (loading) return <div>...</div>;
@ -68,11 +68,7 @@ export default function EpisodePlayer() {
: {selectedEpisode.title} : {selectedEpisode.title}
</h4> </h4>
{audioUrl ? ( {audioUrl ? (
<audio <audio src={audioUrl} controls className="w-full" />
src={audioUrl}
controls
className="w-full"
/>
) : ( ) : (
<div>...</div> <div>...</div>
)} )}

View File

@ -44,7 +44,7 @@ export async function updatePodcastRSS() {
} }
const outputPath = join(__dirname, "../public/podcast.xml"); const outputPath = join(__dirname, "../public/podcast.xml");
// 既存のRSSファイルの読み込み // 既存のRSSファイルの読み込み
let existingXml = ""; let existingXml = "";
try { try {
@ -56,26 +56,28 @@ export async function updatePodcastRSS() {
if (existingXml) { if (existingXml) {
// 既存のitem部分を抽出 // 既存のitem部分を抽出
const existingItemsMatch = existingXml.match(/<channel>([\s\S]*?)<\/channel>/); const existingItemsMatch = existingXml.match(
/<channel>([\s\S]*?)<\/channel>/,
);
if (existingItemsMatch) { if (existingItemsMatch) {
const existingItems = existingItemsMatch[1]; const existingItems = existingItemsMatch[1];
const newItemStartIndex = existingItems.lastIndexOf("<item>"); const newItemStartIndex = existingItems!.lastIndexOf("<item>");
// 新しいitemを追加 // 新しいitemを追加
const updatedItems = existingItems + itemsXml; const updatedItems = existingItems + itemsXml;
// lastBuildDateを更新 // lastBuildDateを更新
const updatedXml = existingXml.replace( const updatedXml = existingXml.replace(
/<lastBuildDate>.*?<\/lastBuildDate>/, /<lastBuildDate>.*?<\/lastBuildDate>/,
`<lastBuildDate>${lastBuildDate}</lastBuildDate>` `<lastBuildDate>${lastBuildDate}</lastBuildDate>`,
); );
// items部分を置き換え // items部分を置き換え
const finalXml = updatedXml.replace( const finalXml = updatedXml.replace(
/<channel>[\s\S]*?<\/channel>/, /<channel>[\s\S]*?<\/channel>/,
`<channel>${updatedItems}</channel>` `<channel>${updatedItems}</channel>`,
); );
// ファイルに書き込み // ファイルに書き込み
await fs.writeFile(outputPath, finalXml.trim()); await fs.writeFile(outputPath, finalXml.trim());
} else { } else {
@ -106,7 +108,7 @@ export async function updatePodcastRSS() {
</channel> </channel>
</rss> </rss>
`; `;
// 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());

View File

@ -66,5 +66,5 @@ export async function generateTTS(
fs.writeFileSync(filePath, audioBuffer); fs.writeFileSync(filePath, audioBuffer);
console.log(`音声ファイル保存完了: ${filePath}`); console.log(`音声ファイル保存完了: ${filePath}`);
return filePath; return path.basename(filePath);
} }