티스토리 뷰
경제·투자·기술 유튜브를 여러 개 구독하고 있다면 매일 모든 영상을 직접 보는 것은 사실상 불가능하다. 그렇다고 제목만 보고 넘어가면 중요한 시그널을 놓칠 수 있다. 이 글에서는 YouTube 업로드 감지 → 자막 수집 → OpenAI 요약 → 슬랙 전송까지 실제로 동작 가능한 수준의 코드 흐름을 포함해 설명한다. 단순 개념이 아니라, 바로 실험해볼 수 있는 구조를 기준으로 정리한다.
1. 전체 시스템 구조
구성은 다음 네 단계다.
- 특정 채널의 최신 영상 감지
- 영상 자막(Transcript) 수집
- OpenAI API로 구조화 요약
- 슬랙 또는 이메일로 자동 전송
리눅스 서버 기준으로 cron에 등록해 10~30분마다 실행하도록 설정하면 완전 자동화가 된다.
2. YouTube 최신 영상 감지 코드
먼저 YouTube Data API 키를 발급받는다.
환경 변수에 저장해두는 것이 안전하다.
export YOUTUBE_API_KEY="your_api_key"
Python 코드 예시는 다음과 같다.
import os
import requests
YOUTUBE_API_KEY = os.getenv("YOUTUBE_API_KEY")
CHANNEL_ID = "UCxxxxxxxxxxxx" # 대상 채널 ID
def get_latest_video():
url = "https://www.googleapis.com/youtube/v3/search"
params = {
"key": YOUTUBE_API_KEY,
"channelId": CHANNEL_ID,
"part": "snippet",
"order": "date",
"maxResults": 1
}
res = requests.get(url, params=params)
data = res.json()
if "items" in data and len(data["items"]) > 0:
video = data["items"][0]
return video["id"]["videoId"], video["snippet"]["title"]
return None, None
실무에서는 마지막으로 처리한 videoId를 파일이나 DB에 저장해두고, 새로운 ID일 경우에만 다음 단계로 진행한다.
3. 영상 자막 수집 코드
공식 API는 자막 접근이 제한적일 수 있어 youtube-transcript-api 라이브러리를 사용하는 것이 편리하다.
pip install youtube-transcript-api
from youtube_transcript_api import YouTubeTranscriptApi
def get_transcript(video_id):
transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=["ko", "en"])
text = " ".join([item["text"] for item in transcript])
return text
이때 자막 길이가 매우 길 수 있다. 바로 API에 넘기지 말고 정제 과정을 거친다.
def clean_text(text):
text = text.replace("\n", " ")
return text[:10000] # 과도한 길이 제한
실무에서는 광고 멘트, 반복 문장 제거 로직을 추가하는 것이 좋다.
4. OpenAI로 구조화 요약 요청
OpenAI API 키도 환경 변수로 관리한다.
export OPENAI_API_KEY="your_openai_key"
Python 코드 예시:
from openai import OpenAI
client = OpenAI()
def summarize_video(title, transcript):
prompt = f"""
역할: 당신은 투자 리서치 애널리스트다.
아래 유튜브 영상 자막을 기반으로 투자 관점에서 정리하라.
영상 제목: {title}
출력 형식:
1. 핵심 주장 3가지
2. 긍정 요인
3. 리스크 요인
4. 시장 영향 분석
5. 한 줄 결론
자막:
{transcript}
"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0.3
)
return response.choices[0].message.content
여기서 temperature를 낮추면 결과의 일관성이 높아진다.
5. 슬랙으로 자동 전송
슬랙 Webhook URL을 생성한 뒤 다음 코드로 전송할 수 있다.
SLACK_WEBHOOK = "https://hooks.slack.com/services/xxxx"
def send_to_slack(message):
payload = {"text": message}
requests.post(SLACK_WEBHOOK, json=payload)
6. 전체 실행 흐름 통합
def main():
video_id, title = get_latest_video()
if not video_id:
return
transcript = get_transcript(video_id)
cleaned = clean_text(transcript)
summary = summarize_video(title, cleaned)
send_to_slack(summary)
if __name__ == "__main__":
main()
이 스크립트를 cron에 등록한다.
예시:
*/30 * * * * /usr/bin/python3 /home/user/youtube_summary.py
30분마다 실행되어 새 영상이 올라오면 자동으로 요약이 전달된다.
7. 비용 최적화 전략
자막이 길 경우 한 번에 호출하면 비용이 증가한다.
실무에서는 다음 전략을 사용한다.
- 2,000~3,000자 단위 분할 후 1차 요약
- 부분 요약 결과를 다시 통합 요약
- 제목과 설명란을 함께 전달해 맥락 강화
또한 특정 키워드가 제목에 포함된 경우에만 요약하도록 필터링할 수 있다.
예:
if "금리" not in title and "AI" not in title:
return
8. 확장 아이디어
여기서 멈추지 않고 다음과 같은 확장이 가능하다.
- 여러 채널 동시 모니터링
- 특정 종목 언급 횟수 카운트
- 감성 분석 추가
- 주간 PDF 리포트 자동 생성
요약 결과를 구글 스프레드시트에 누적 저장하면
한 달간 “금리 인하” 언급 빈도 같은 통계도 만들 수 있다.
마무리
이 시스템의 핵심은 단순 요약이 아니라
“영상 콘텐츠를 데이터화하는 것”이다.
YouTube API와 OpenAI API를 결합하면
개인 투자자도 자신만의 리서치 자동화 환경을 만들 수 있다.
영상을 소비하는 단계에서 끝나지 않고,
영상에서 구조화된 인사이트를 추출하는 단계로 넘어가는 것.
그것이 이 자동화 프로젝트의 진짜 가치다.
'AI' 카테고리의 다른 글
| Cloudflare + AI로 내부 개발 환경 자동 관리하는 방법 (실무 코드 포함) (0) | 2026.02.20 |
|---|---|
| AI로 회의록 자동 정리하고 Jira 티켓까지 생성하는 워크플로우 (실무 코드 포함) (0) | 2026.02.20 |
| 슬랙 알림을 AI로 자동 분류하는 업무 자동화 시스템 구축기 (0) | 2026.02.19 |
| Python + OpenAI API로 이메일 요약 봇 만들기 (0) | 2026.02.19 |
| ChatGPT로 매일 아침 자동 업무 리포트 생성하는 방법 (실전 예제 포함) (0) | 2026.02.19 |
