- YouTubeの認証: ブラウザのCookieを直接使用するように改善
- Supabaseへのファイルアップロード処理を安定化
- YouTube動画のダウンロード
- スクリーンショットの自動生成
- 文字起こしと翻訳
- Supabaseでのファイル管理
ブラウザのCookieを直接使用することで、より安定した認証を実現:
# yt-dlpの設定
{
'cookiesfrombrowser': ('chrome',), # ブラウザのCookieを使用
'verbose': True, # デバッグ用
}重要なCookie:
- VISITOR_INFO1_LIVE
- LOGIN_INFO
- SID
- HSID
- __Secure-1PSID
安定したファイルアップロード処理:
async def upload_to_supabase(file_path: str, content_type: str, bucket: str) -> str:
with open(file_path, 'rb') as f:
file_data = f.read()
# アップロード実行
response = supabase.storage \
.from_(bucket) \
.upload(unique_filename, file_data)
# 公開URLの取得
public_url = supabase.storage \
.from_(bucket) \
.get_public_url(unique_filename)- 環境変数の設定:
SUPABASE_URL=your_supabase_url
SUPABASE_KEY=your_supabase_key
OPENAI_API_KEY=your_openai_key- 必要なパッケージのインストール:
pip install -r requirements.txt- アプリケーションの起動:
vercel dev- YouTubeの認証はブラウザのCookieを使用するため、ブラウザにログインしている必要があります
- Supabaseのストレージバケット'videos'が必要です
- YouTube動画のダウンロード
- スクリーンショットの自動生成
- 音声の文字起こし(Whisper API)
- 日本語から英語への翻訳(GPT-4)
- Supabaseによるファイル管理とユーザー認証
- バックエンド: FastAPI
- フロントエンド: TailwindCSS
- データベース: Supabase
- AI/ML: OpenAI (Whisper API, GPT-4)
- 認証: Supabase Auth (Google OAuth)
- ストレージ: Supabase Storage
- バケットの作成:
videosバケットを作成(Public access)
- テーブルの作成:
-- videos テーブル
create table videos (
id uuid default uuid_generate_v4() primary key,
youtube_id text,
youtube_url text not null,
video_path text,
transcription text,
translation text,
thumbnail_url text,
duration integer,
created_at timestamp with time zone default timezone('utc'::text, now()),
updated_at timestamp with time zone default timezone('utc'::text, now())
);
-- projects テーブル
create table projects (
id uuid default uuid_generate_v4() primary key,
video_url text not null,
video_path text,
screenshots jsonb default '[]'::jsonb,
status text default 'pending',
error_message text,
metadata jsonb default '{}'::jsonb,
created_at timestamp with time zone default timezone('utc'::text, now()),
updated_at timestamp with time zone default timezone('utc'::text, now())
);
-- processing_logs テーブル
create table processing_logs (
id uuid default uuid_generate_v4() primary key,
video_id uuid references videos(id),
status text not null,
message text,
created_at timestamp with time zone default timezone('utc'::text, now())
);- 動画の長さは180秒(3分)まで
- 対応フォーマット: MP4
- 必要なストレージ容量: 動画サイズの約2倍
Vercelへのデプロイ:
vercelMIT
ボンポン
-
Google Cloud Console:
- プロジェクトを作成
- OAuth 2.0クライアントIDを設定
- 承認済みのリダイレクトURI:
http://localhost:3000/auth/callback https://your-production-url.vercel.app/auth/callback
-
Supabase認証設定:
- Authentication → Providers → Google
- Client ID・Client Secretを設定
- Redirect URLsを追加:
http://localhost:3000/** https://your-production-url.vercel.app/**
-
RLSポリシー:
-- videosテーブル ALTER TABLE videos ENABLE ROW LEVEL SECURITY; CREATE POLICY "Public videos are viewable by everyone" ON videos FOR SELECT USING (true); CREATE POLICY "Users can insert their own videos" ON videos FOR INSERT WITH CHECK (auth.role() = 'authenticated'); -- projectsテーブル ALTER TABLE projects ENABLE ROW LEVEL SECURITY; CREATE POLICY "Users can view their own projects" ON projects FOR SELECT USING (true); CREATE POLICY "Users can create projects" ON projects FOR INSERT WITH CHECK (auth.role() = 'authenticated');
-
ストレージポリシー:
-- videosバケット CREATE POLICY "Videos are publicly accessible" ON storage.objects FOR SELECT USING (bucket_id = 'videos'); CREATE POLICY "Only authenticated users can upload" ON storage.objects FOR INSERT WITH CHECK ( bucket_id = 'videos' AND auth.role() = 'authenticated' );
-
環境別設定:
# .env.development HOST=0.0.0.0 PORT=3000 VERCEL_ENV=development # .env.production HOST=0.0.0.0 PORT=3000 VERCEL_ENV=production
- Chromeで youtube.com にログイン
- F12キーでデベロッパーツールを開く
- Application → Storage → Cookies → https://youtube.com
- 以下のクッキーの値をコピー:
- SID
- HSID
- SSID
- APISID
- SAPISID
- クッキーを以下の形式で環境変数に設定:
YOUTUBE_COOKIES=SID=xxx; HSID=yyy; SSID=zzz; APISID=aaa; SAPISID=bbb
- クッキーは定期的に更新が必要な場合があります
- クッキーは機密情報として扱い、安全に管理してください