인공지능 (AI,GPT)

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

날으는물고기 2025. 1. 8. 00:39
728x90

유튜브 자막 정보를 자동으로 가져와 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