import { useEffect, useState } from "react"; interface Episode { id: string; title: string; pubDate: string; audioPath: string; sourceLink: string; } export default function EpisodePlayer() { const [episodes, setEpisodes] = useState([]); const [selectedEpisode, setSelectedEpisode] = useState(null); const [audioUrl, setAudioUrl] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { fetchEpisodes(); }, []); const fetchEpisodes = async () => { try { const response = await fetch("/api/episodes"); if (!response.ok) { throw new Error("エピソードの取得に失敗しました"); } const data = await response.json(); setEpisodes(data); setLoading(false); } catch (err) { setError(err instanceof Error ? err.message : "エラーが発生しました"); setLoading(false); } }; const handlePlay = (episode: Episode) => { setSelectedEpisode(episode); setAudioUrl(`/podcast_audio/${episode.audioPath}`); }; if (loading) return
読み込み中...
; if (error) return
エラー: {error}
; return (

最近のエピソード

{episodes.map((episode) => (
{episode.title}
))}
{selectedEpisode && (

再生中: {selectedEpisode.title}

{audioUrl ? (
)}
); }