scripts/youtube_quiz.py
scripts/youtube_quiz.pyBrowse 3 files
567 tokens
2,349 bytes
Token encoding: o200k_base
Snapshot 24fd22b
← Back to SKILL.md
1#!/usr/bin/env python32"""Fetch YouTube transcripts for Memento quiz generation.3 4Requires: pip install youtube-transcript-api5The quiz question *generation* is done by the agent's LLM — this script only fetches transcripts.6"""7 8import argparse9import json10import re11import sys12 13 14def _out(obj: object) -> None:15 json.dump(obj, sys.stdout, indent=2, ensure_ascii=False)16 sys.stdout.write("\n")17 18 19def _normalize_segments(segments: list) -> str:20 parts = []21 for seg in segments:22 text = str(seg.get("text", "")).strip()23 if text:24 parts.append(text)25 return re.sub(r"\s+", " ", " ".join(parts)).strip()26 27 28def cmd_fetch(args: argparse.Namespace) -> None:29 try:30 import youtube_transcript_api # noqa: F81131 except ImportError:32 _out({33 "ok": False,34 "error": "missing_dependency",35 "message": "Run: pip install youtube-transcript-api",36 })37 sys.exit(1)38 39 video_id = args.video_id40 languages = ["en", "en-US", "en-GB", "en-CA", "en-AU"]41 42 api = youtube_transcript_api.YouTubeTranscriptApi()43 try:44 raw = api.fetch(video_id, languages=languages)45 except Exception as exc:46 error_type = type(exc).__name__47 _out({48 "ok": False,49 "error": "transcript_unavailable",50 "error_type": error_type,51 "message": f"Could not fetch transcript for {video_id}: {exc}",52 })53 sys.exit(1)54 55 segments = raw56 if hasattr(raw, "to_raw_data"):57 segments = raw.to_raw_data()58 59 text = _normalize_segments(segments)60 if not text:61 _out({62 "ok": False,63 "error": "empty_transcript",64 "message": f"Transcript for {video_id} contained no usable text.",65 })66 sys.exit(1)67 68 _out({69 "ok": True,70 "video_id": video_id,71 "transcript": text,72 })73 74 75def main() -> None:76 parser = argparse.ArgumentParser(description="Memento YouTube transcript fetcher")77 sub = parser.add_subparsers(dest="command", required=True)78 79 p_fetch = sub.add_parser("fetch", help="Fetch transcript for a video")80 p_fetch.add_argument("video_id", help="YouTube video ID")81 82 args = parser.parse_args()83 if args.command == "fetch":84 cmd_fetch(args)85 86 87if __name__ == "__main__":88 main()89