Telegram Saved Messages에서 YouTube URL을 수집하고 youtube-summary 파이프라인으로 자동 처리. 사용법: /telegram-youtube-fetch [-l 메시지수] [-d 일수] [-n 처리수] [--fetch-only] [--process-only] [--stats] [--retry]. 트리거: 텔레그램 유튜브, telegram youtube, 텔레그램 수집
Telegram Saved Messages에서 YouTube URL을 수집 → SQLite 중복 제거 → youtube-summary 파이프라인으로 자동 처리
/telegram-youtube-fetch # 기본: 최근 50개 메시지에서 수집 + 5건 처리
/telegram-youtube-fetch -l 100 -n 3 # 100개 메시지 스캔, 3건 처리
/telegram-youtube-fetch -d 7 # 최근 7일 메시지만 스캔
/telegram-youtube-fetch --fetch-only -l 200 # 수집만 (처리 안함)
/telegram-youtube-fetch --process-only -n 3 # DB에서 pending만 처리
/telegram-youtube-fetch --stats # DB 통계 확인
/telegram-youtube-fetch --retry # error 항목을 pending으로 리셋
-l, --limit N: 스캔할 Telegram 메시지 수 (기본: 50)-d, --days N: 최근 N일 메시지만 스캔-n, --count N: 처리할 URL 수 (기본: 5)-f, --format FORMAT: NotebookLM 보고서 포맷 (기본: blog)-t, --topic TOPIC: 주제 폴더 직접 지정--fetch-only: URL 수집 + DB 저장만 (youtube-summary 호출 안함)--process-only: DB pending URL만 처리 (Telegram 수집 안함)--stats: DB 통계만 출력--retry: error 상태 항목을 pending으로 리셋pip install 'telethon>=1.42,<2.0'.env에 TELEGRAM_API_ID, TELEGRAM_API_HASH 설정python3 scripts/fetch_telegram_urls.py --limit 1 수동 실행하여 .session 생성notebooklm login 완료 상태$ARGUMENTS에서 옵션을 파싱한다.
파싱 규칙:
-l N 또는 --limit N: LIMIT (기본 50)-d N 또는 --days N: DAYS (선택)-n N 또는 --count N: COUNT (기본 5)-f FORMAT 또는 --format FORMAT: FORMAT (기본 blog)-t TOPIC 또는 --topic TOPIC: TOPIC (선택)--fetch-only: FETCH_ONLY=true--process-only: PROCESS_ONLY=true--stats: STATS_ONLY=true--retry: RETRY=true--stats인 경우:
python3 scripts/db_manager.py stats
통계를 사용자에게 표시하고 종료.
--retry인 경우:
python3 scripts/db_manager.py retry
리셋 결과를 사용자에게 표시하고 종료.
# .env 파일에서 환경변수 로드
source .env 2>/dev/null || true
# URL 수집 + DB 삽입 (파이프라인)
python3 scripts/fetch_telegram_urls.py --limit {LIMIT} [--days {DAYS}] | python3 scripts/db_manager.py insert
에러 처리:
fetch_telegram_urls.py가 stderr에 JSON 에러 출력 시 → 사용자에게 에러 내용 표시수집 결과(inserted/skipped)를 사용자에게 표시.
--fetch-only인 경우: 여기서 pending 목록 표시 후 종료.
python3 scripts/db_manager.py pending --limit 20
python3 scripts/db_manager.py pending --limit {COUNT}
pending 항목이 없으면 "처리할 URL이 없습니다" 표시 후 종료.
pending URL 목록을 순회하며 각 URL에 대해:
# 4-1. processing 상태로 변경
python3 scripts/db_manager.py processing --video-id {video_id}
4-2. /youtube-summary 스킬을 호출한다:
/youtube-summary {clean_url} [-f {FORMAT}] [-t {TOPIC}]
주의: youtube-summary 스킬을 Skill 도구로 호출한다. 인수로 clean_url과 옵션을 전달.
4-3. 처리 결과에 따라 DB 업데이트:
성공 시:
python3 scripts/db_manager.py done --video-id {video_id} --title "{영상 제목}"
실패 시:
python3 scripts/db_manager.py error --video-id {video_id} --message "{에러 메시지}"
다음 URL로 계속 진행 (fail-forward).
각 YouTube 요약 처리 성공 후, .omc/wiki/youtube-insights.md에 핵심 인사이트 1줄을 append한다.
형식:
- YYYY-MM-DD [{주제폴더}]: {영상 제목} — {핵심 인사이트 1줄}
실행 방법: Edit 도구로 youtube-insights.md의 ## 최근 인사이트 섹션 마지막에 append
규칙:
처리 결과를 요약하여 사용자에게 표시:
📊 Telegram YouTube 파이프라인 결과:
- 수집: {inserted}건 새로 추가, {skipped}건 중복
- 처리: {success}건 성공, {failed}건 실패
- DB 현황: (stats 출력)
Step 4에서 youtube-summary 호출이 성공해 13.YouTube에 새 파일을 저장한 직후, 각 파일마다 다음을 수행:
python3 .claude/skills/telegram-youtube-fetch/scripts/append_insight.py \
"<newly-saved .md path>"
역할:
summary, area, domain, title, created 추출.omc/wiki/youtube-insights.md "## 최근 인사이트" 섹션 상단에 1줄 append:
- {created} [{area}/{domain}]: [[{basename}]] — {summary 80자 압축}
area == "Technology" 이면 .omc/wiki/instinct-patterns.md의 "## YouTube 학습" 섹션에도 append (최대 10개 rolling)실패 처리: append 실패해도 파이프라인 전체를 중단하지 않음 (non-blocking). 오류는 stderr로만 출력.
처리 건수 집계: Step 5 보고 시 insights_added: N 필드 추가.
youtube-summary 스킬이 각 영상마다 커밋하므로 별도 커밋 불필요.
수집만 한 경우(--fetch-only)에는 커밋하지 않음.
주의: Step 5.5 가 수정한 .omc/wiki/ 파일들은 .gitignore 에 포함되어 있으므로 자동 커밋 대상 아님 (의도된 동작).
~/.config/telegram/reader/에 저장됨, iCloud 동기화 대상 아님--count 5 기본값은 rate limit 대응