date: 2026-08-10
source: gemini-conversation
agent: Gemini + Claude Code (파싱·정제)
status: 설계 완료 → 구현 대기
라디오 초대권 자동화 시스템 — “Classic Pass” 설계
AI 에이전트(DeepSeek/Aider) + 크롤링 + GitHub Actions + GUI 자동화로
라디오 공개방송·초대권 당첨률을 극대화하는 자동화 파이프라인.
1. 핵심 제약 — 수요일 Only
Boss의 쉬는 날이 수요일이므로, 수요일에 진행/참여 가능한 프로그램만 타겟팅.
모든 크롤링·사연 생성·신청은 이 제약 위에서 동작.
2. 3대 채널 포트폴리오
| 채널 | 장르 | 타깃 방송사 | 프로그램 예시 |
|---|---|---|---|
| 채널 A | 클래식 (치유·전공) | KBS Classic FM 단일 | KBS 음악실, 출발 FM과 함께, 가정음악, 살롱 드 피아노 |
| 채널 B | 옛날 가요 (작은누나) | 지상파 3사 전체 | KBS 열린음악회, 불후의 명곡, MBC/SBS 특집 |
| 채널 C | 해외 팝 (Boss 추억) | MBC FM4U 단일 | 배철수의 음악캠프 |
3. 기술 아키텍처
┌─────────────────────────────────────────────────────────┐
│ Classic Pass Pipeline │
├──────────┬──────────┬──────────┬──────────┬────────────┤
│ 크롤링 │ LLM 생성 │ 스케줄러 │ 전송 │ 제출 │
│ (Python) │ (DeepSeek)│ (GH Act) │ (TG Bot) │ (GUI/수동) │
├──────────┼──────────┼──────────┼──────────┼────────────┤
│5대 공연장 │역산 알고리즘│주1회 실행 │스마트폰 │ADB 매크로 │
│3사 방청 │당첨 패턴 │cron │알림+복사 │or Paste │
│배캠 공지 │학습·생성 │ │ │Pipeline │
└──────────┴──────────┴──────────┴──────────┴────────────┘
Module 1 — 크롤링 & 타겟팅 스케줄러
5대 클래식 공연장 타깃 도메인:
- 예술의전당 (sac.or.kr) — 달력형 HTML
- 롯데콘서트홀 (lotteconcerthall.com) — AJAX 비동기, JSON 엔드포인트 직접 타격 필요
- 세종문화회관 (sejongpac.or.kr)
- 금호아트홀 연세
- KBS홀
필터링 로직:
날짜 → day_of_week == "수요일"
장르 → "피아노" | "리사이틀" | "오케스트라" | "필하모닉" | "협주곡"
제휴 → 주최/협찬에 "KBS" | "KBS 클래식FM" 포함
가요·팝 방청 크롤링 추가:
- KBS 열린음악회 방청 신청 페이지
- MBC 라디오 공개방송 공지사항
- SBS 전설의 무대 아카이브K
- MBC FM4U 배철수의 음악캠프 공지사항 게시판
데이터 스키마 (JSON):
{
"performance_id": "SAC_20260812_01",
"location": "예술의전당 콘서트홀",
"date": "2026-08-12",
"day_of_week": "수요일",
"time": "19:30",
"title": "백건우 피아노 리사이틀",
"genre": "클래식 / 솔로 악기",
"repertoire": ["쇼팽 녹턴", "쇼팽 발라드 전곡"],
"hosts": ["주최: 예술의전당", "협찬: KBS 클래식FM"],
"program_match": "KBS 음악실",
"deadline": "2026-08-05",
"apply_url": "https://..."
}
Module 2 — DeepSeek 사연 역산 생성기
역산(Reverse Engineering) 로직:
1. 과거 당첨 사연 수집 → 텍스트 패턴 분석
2. 패턴: 길이, 감정 단어 빈도, 문체(구어체/문어체), 스토리 구조
3. 프롬프트에 내장 → “이 패턴을 따르되 새로운 맥락으로”
디폴트 프로필 (Persona Settings):
- 보호자(동생), 육체노동자, 출판사 AI 프로젝트 진행 중
- 쉬는 날: 수요일
- 가족: 치매 어머니, 조현병 작은누나(취미: 피아노), 큰누나(피아노 전공)
채널별 톤앤매너:
| 채널 | 프로그램 | 톤 |
|------|---------|-----|
| KBS 음악실 | 살롱 드 피아노 | 우아하고 전문성 있는 클래식 애호가 |
| 출발 FM | 아침 클래식 | 산뜻하고 간결하게 |
| 가정음악 | 저녁 클래식 | 따뜻하고 차분하게 |
| 열린음악회 | 가요 방청 | 작은누나의 추억 + 감동 가족 스토리 |
| 배철수의 음악캠프 | 팝 라이브 | 젊은 날의 열정 + 깊은 팬심 |
Module 3 — 알림 & 전송 (GitHub Actions → TG)
GitHub Actions cron (매주 일요일 밤)
→ 크롤링 스크립트 실행
→ DeepSeek API 사연 생성
→ 결과물을 GitHub Artifact + Telegram으로 전송
TG 메시지 포맷:
[프로그램명] / [마감일] / [신청 페이지 링크] / [생성된 사연]
Module 4 — 최종 제출 (GUI/수동 하이브리드)
API 없는 방송사 게시판 대응:
- 완전 자동화: 안드로이드 ADB + MacroDroid/Tasker → 클립보드 주입 + Input Text
- 반자동 (현실적): TG로 받은 사연 복사 → 링크 눌러 게시판 이동 → 붙여넣기 → 제출 (5분)
WSL 한계 우회:
- WSL에서는 GUI 자동화 까다로움
- 저가형 안드로이드 폰에서 ADB/Termux로 구동
- 또는 GitHub Actions에서 사연 생성까지만 하고, 제출은 사람이 Paste Pipeline으로
4. 일정 역산 로직
목표일 = 공연/행사일 - 14일 (초대권 발송 프로세스 고려)
실행일 = 목표일 - 3일 (접수 마감 여유)
→ GitHub Actions cron: 매주 실행, 조건 충족 항목만 타겟팅
5. 수요일 참여 가능 프로그램 (1차 타겟)
클래식 (KBS Classic FM)
- 오전 11시 — KBS 음악실 (살롱 드 피아노)
- 저녁 8시 — 출발 FM과 함께 / 가정음악
달달·일상 사연
- KBS Cool FM — 유인나의 볼륨을 높여요 (20:00~22:00)
- SBS Power FM — 박소현의 러브게임 (18:00~20:00)
진지·감동 사연
- MBC 표준FM — 여성시대 양희은, 김일중입니다 (09:05~11:00)
- CBS 음악FM — 한동준의 FM POPS (16:00~18:00)
유쾌·웃음 사연
- SBS Power FM — 두시탈출 컬투쇼 (14:00~16:00)
- MBC FM4U — 정오의 희망곡 김신영입니다 (12:00~14:00)
6. 개발 우선순위
| 단계 | 내용 | 의존성 |
|---|---|---|
| 1단계 | 3~5개 프로그램 선정, 게시판 URL 구조 파악 → 크롤러 작성 | 없음 |
| 2단계 | DeepSeek 프롬프트 튜닝 (“당첨 치트키 패러다임”) | 1단계 |
| 3단계 | GitHub Actions cron 연동 + TG 알림 | 2단계 |
| 4단계 | ADB/Tasker GUI 자동화 또는 Paste Pipeline | 3단계 |
7. Gemini와의 대화 핵심 결론
- 크롤링은 전통적 하드코딩으로 — LLM에게 크롤링 맡기면 할루시네이션 위험 (날짜 오차, 동적 JS 누락). 정확한 도메인 타격이 먼저.
- 사연 생성은 LLM에게 — 톤앤매너 매칭, 디폴트 프로필 유지, 감동적인 스토리텔링은 AI의 강점.
- 제출은 사람이 최종 관여 — API 없음 + 캡차 + 로그인 보안. Paste Pipeline 모델 재활용.
- 채널 분리가 핵심 — 클래식(KBS 단일) / 가요(3사) / 팝(배캠 단일) — 채널마다 크롤링 도메인과 사연 톤이 완전히 다름.
8. 기존 helena_phone 파이프라인과의 연계
| 기존 시스템 | Classic Pass 재활용 |
|---|---|
| PD Pipeline (P0~P6) | 크롤링·파싱 모듈 구조 그대로 도메인만 교체 |
| Paste Pipeline (TG→복붙) | 최종 제출 단계에서 동일 패턴 |
| GitHub Actions cron | 동일 인프라, workflow 파일 추가 |
| DeepSeek API (Aider) | LLM 생성 파트에서 동일 API |
| helana_log/기자/ RSS sync | 방송사 공지사항 RSS 파싱으로 확장 가능 |
한 줄: “AI가 사연을 쓰고, 크롤러가 일정을 따고, GitHub가 스케줄을 돌리고, 사람이 5분만 투자해서 제출한다.”
— Boss의 Paste Pipeline 철학을 라디오 초대권으로 확장.