본문 바로가기
인공지능 (AI,GPT)

YouTube API와 ChatGPT로 자막 요약 자동화 구현하기

by 날으는물고기 2025. 1. 8.

YouTube API와 ChatGPT로 자막 요약 자동화 구현하기

유튜브 자막 정보를 자동으로 가져와 ChatGPT를 통해 요약하고, Gmail을 통해 메일로 전송하는 자동화를 구현할 수 있습니다.

1. 프로세스 설계

  1. 유튜브 자막 가져오기: YouTube Data API를 사용하여 자막 정보를 가져옵니다.
  2. ChatGPT 요약: OpenAI API를 사용하여 자막 내용을 요약합니다.
  3. Gmail 전송: Gmail API를 사용하여 요약된 내용을 이메일로 전송합니다.

2. 필요한 도구 및 라이브러리

  • YouTube Data API: 유튜브 데이터와 자막 정보를 가져오기 위해 필요.
  • OpenAI API: ChatGPT를 사용하여 요약 작업을 수행.
  • Gmail API: 이메일 전송을 자동화.
  • Python: 스크립트 작성.

3. 단계별 구현

3.1. YouTube 자막 가져오기

  1. Google Cloud Console에서 YouTube Data API 키를 생성합니다.
  2. pytube 또는 google-api-python-client 라이브러리를 설치합니다.
    pip install pytube google-api-python-client
  3. Python 코드를 작성하여 자막을 다운로드
    from pytube import YouTube
    
    def get_youtube_captions(video_url):
        yt = YouTube(video_url)
        caption = yt.captions.get_by_language_code('en')  # 언어 코드 변경 가능
        if caption:
            return caption.generate_srt_captions()
        else:
            return "자막을 찾을 수 없습니다."
    
    video_url = "https://www.youtube.com/watch?v=YOUR_VIDEO_ID"
    captions = get_youtube_captions(video_url)
    print(captions)

3.2. ChatGPT를 통한 요약

  1. OpenAI API 키를 생성합니다.
  2. openai 라이브러리를 설치합니다.
    pip install openai
  3. 자막을 요약하는 Python 코드 작성
    import openai
    
    openai.api_key = "YOUR_OPENAI_API_KEY"
    
    def summarize_text(text):
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "You are a helpful assistant that summarizes text."},
                {"role": "user", "content": f"Summarize this: {text}"}
            ]
        )
        return response['choices'][0]['message']['content']
    
    summarized_captions = summarize_text(captions)
    print(summarized_captions)

3.3. Gmail을 통해 이메일 전송

  1. Google Cloud Console에서 Gmail API를 활성화합니다.
  2. google-auth, google-api-python-client, google-auth-oauthlib 라이브러리를 설치합니다.
    pip install google-auth google-auth-oauthlib google-api-python-client
  3. Gmail API로 이메일 전송
    from googleapiclient.discovery import build
    from google_auth_oauthlib.flow import InstalledAppFlow
    from google.auth.transport.requests import Request
    import base64
    from email.mime.text import MIMEText
    import os
    import pickle
    
    # Gmail API 인증
    def authenticate_gmail():
        SCOPES = ['https://www.googleapis.com/auth/gmail.send']
        creds = None
        if os.path.exists('token.pickle'):
            with open('token.pickle', 'rb') as token:
                creds = pickle.load(token)
        if not creds or not creds.valid:
            if creds and creds.expired and creds.refresh_token:
                creds.refresh(Request())
            else:
                flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
                creds = flow.run_local_server(port=0)
            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)
        return build('gmail', 'v1', credentials=creds)
    
    # 이메일 전송
    def send_email(service, to, subject, body):
        message = MIMEText(body)
        message['to'] = to
        message['subject'] = subject
        raw = base64.urlsafe_b64encode(message.as_bytes()).decode()
        message = {'raw': raw}
        service.users().messages().send(userId="me", body=message).execute()
    
    service = authenticate_gmail()
    send_email(service, "recipient@example.com", "유튜브 자막 요약", summarized_captions)

유용한 팁

  1. Google API 인증: 인증 파일(credentials.json)을 안전한 위치에 보관.
  2. 에러 처리: 자막 없는 영상, API 호출 실패 등에 대비한 예외 처리를 추가.
  3. 확장성: 다양한 언어를 지원하거나, 특정 포맷으로 메일 본문을 꾸밀 수 있도록 코드를 확장.

위 과정을 통해 유튜브 자막 정보를 자동으로 요약하고 이메일로 전송하는 시스템을 구축할 수 있습니다. n8n을 활용하여 유튜브 자막 정보를 가져와 ChatGPT로 요약한 뒤, 슬랙으로 전송하는 워크플로우입니다.

1. YouTube 자막 정보 가져오기

1.1. 유튜브 API 키 생성

  • Google Cloud Console에 접속하여 프로젝트를 생성하거나 기존 프로젝트를 선택합니다.
  • API 및 서비스 > 라이브러리에서 YouTube Data API v3를 검색 후 활성화합니다.
  • API 및 서비스 > 자격 증명에서 API 키를 생성하고 저장합니다.

1.2. n8n에서 HTTP Request 노드 추가

  1. n8n의 워크플로우 화면에서 HTTP Request 노드를 추가합니다.
  2. Node 설정
    • Method: GET
    • URL:
      https://www.googleapis.com/youtube/v3/captions?part=snippet&videoId={{videoId}}&key={{apiKey}}
    • Query Parameters:
      • videoId: 유튜브 동영상 ID (예: YOUR_VIDEO_ID)
      • apiKey: YouTube API 키
  3. 출력 데이터 처리: 이 호출로 자막 ID와 관련 정보를 가져옵니다. 반환된 데이터 중 id 값을 다음 단계에서 사용합니다.

2. 자막 다운로드

2.1. HTTP Request 노드 추가

  1. 새로운 HTTP Request 노드를 추가합니다.
  2. Node 설정
    • Method: GET
    • URL:
      https://www.googleapis.com/youtube/v3/captions/{{captionId}}?tfmt=srt&key={{apiKey}}
    • Query Parameters:
      • captionId: 이전 단계에서 가져온 자막 ID
      • apiKey: YouTube API 키
  3. 반환된 SRT 데이터를 텍스트 형태로 저장하여 ChatGPT로 전송할 준비를 합니다.

3. ChatGPT로 요약

3.1. OpenAI 노드 추가

n8n에 OpenAI API를 호출하기 위해 HTTP Request 노드를 추가합니다.

  1. Node 설정
    • Method: POST
    • URL:
      https://api.openai.com/v1/chat/completions
    • Headers:
      • Authorization: Bearer YOUR_OPENAI_API_KEY
      • Content-Type: application/json
    • Body: JSON 형식으로 입력합니다.
      {
        "model": "gpt-3.5-turbo",
        "messages": [
          {
            "role": "system",
            "content": "You are a helpful assistant that summarizes text."
          },
          {
            "role": "user",
            "content": "{{srtContent}}"
          }
        ]
      }
      • srtContent: 이전 단계에서 받은 자막 텍스트를 삽입.
  2. 응답으로 ChatGPT가 생성한 요약 텍스트를 반환받습니다.

4. 슬랙으로 전송

4.1. Slack 노드 추가

  1. n8n의 슬랙 노드를 추가합니다.
  2. Node 설정
    • Credential: Slack API 토큰을 설정.
    • Channel: 요약 내용을 전송할 채널 ID.
    • Text:
      {{summarizedText}}
      • summarizedText: ChatGPT API에서 반환받은 요약 내용.

5. 워크플로우 자동화

5.1. 트리거 설정

  • Cron 노드를 추가하여 주기적으로 실행되도록 설정합니다.
    예를 들어, 매일 특정 시간에 실행되도록 구성.

6. 에러 핸들링

  • 각 노드에 Fail Safe 옵션을 활성화하거나 에러가 발생했을 때 알림을 보내는 별도 흐름을 추가합니다.
  • ChatGPT API 호출 실패, 자막 데이터 누락 등을 대비한 조건부 흐름을 설정합니다.

7. 최종 워크플로우 구성

  1. Trigger (Cron Node): 주기적으로 실행.
  2. HTTP Request Node (Get YouTube Captions): 유튜브 자막 정보 가져오기.
  3. HTTP Request Node (Download Captions): 자막 다운로드.
  4. HTTP Request Node (Summarize Captions): ChatGPT로 요약.
  5. Slack Node: 요약 내용 전송.

추가 고려 사항

  1. OAuth 사용: 유튜브 API 호출이 더 복잡한 데이터 요청을 포함할 경우 OAuth 인증이 필요할 수 있습니다.
  2. Webhook 활용: 특정 동영상 업로드 시 자동 실행되도록 YouTube 웹훅을 사용할 수 있습니다.
  3. n8n 실행 환경: n8n을 Docker, 클라우드 또는 로컬에서 실행 가능.

이 설정을 통해 유튜브 자막 요약 자동화 워크플로우를 완성할 수 있습니다.

728x90

댓글