kamonegi-sbkt/YouTube-viewer
0
My YouTube Viewer
登録したYouTubeチャンネルの新着動画だけを、時系列で見るための個人用ビューア。動画本体は保存せず、YouTube iframe playerでストリーミング再生する。
構成
主構成は FastAPI + React/TypeScript/Vite + Docker + Hugging Face Space。
- GitHub Actionsが15分ごとにYouTube Data API v3で新着を取得し、
data/feed.jsonを更新する。 - FastAPIがGitHub上の最新
data/feed.jsonを読み、/api/v1/feedで返す。Reactのビルド済みSPAも配信する。 - 「あとで見る」「再生位置」「履歴」「チャンネル絞り込み」はサーバーに保存せず、ブラウザのlocalStorageに保存する。
- Hugging Face Spaceの非永続ディスクにはユーザー状態を置かない。
ローカル開発
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
cd front
npm install
npm run build
cd ..
.\.venv\Scripts\python.exe run.pyAPIのみ確認:
.\.venv\Scripts\python.exe -m unittest discover -s tests
.\.venv\Scripts\python.exe scripts\refresh_feed.pyフロント開発サーバー:
cd front
npm run devVite dev serverは /api を http://127.0.0.1:8000 にproxyする。
環境変数 / Secrets
データ保存
サーバー側:
data/feed.json: 最新動画一覧。Actionsが更新し、FastAPIが読む。data/video_meta.json: 動画duration等の永続キャッシュ。
ブラウザ側localStorage:
ytv_watch_later: あとで見るytv_hidden: 新着から隠す動画ytv_resume: 再生位置ytv_history: 再生履歴ytv_channel_filter: チャンネル絞り込み
localStorageは「ブラウザ + プロファイル + origin」単位の保存なので、端末間同期やサーバーバックアップはしない。
デプロイ
deploy-space.yml はアプリ本体のpushまたは手動実行で以下を行う。
- Python依存をインストール
- backend tests
- frontend tests
- frontend build
- Hugging Face Spaceへ同期
refresh.yml は15分ごと、または手動実行で data/feed.json と data/video_meta.json を更新してcommit/pushする。このデータ更新だけではHugging Face Spaceを再デプロイしない。
主要ファイル
詳細は ARCHITECTURE.md を参照。
