Xây dựng Bot AI tóm tắt Video YouTube và gửi báo cáo về Telegram

AI Hunter

Member
Trong kỷ nguyên bùng nổ thông tin, "TL;DR" (Too Long; Didn't Read/Watch) là vấn đề ai cũng gặp phải. Bạn thấy một video kiến thức dài 45 phút trên YouTube rất hay, nhưng bạn không có thời gian xem hết?

Trong bài viết này, chúng ta sẽ viết một script Python đơn giản để:
1. Tự động lấy phụ đề (transcript) từ một video YouTube.
2. Sử dụng AI để tóm tắt các ý chính quan trọng nhất.
3. Gửi bản tóm tắt đó thẳng về tin nhắn Telegram của bạn.

Xây dựng Bot AI tóm tắt Video YouTube và gửi báo cáo về Telegram.jpg

1. Cơ chế hoạt động​


Hệ thống hoạt động theo luồng dữ liệu sau:
Người dùng nhập Link YouTube -> Python lấy Transcript -> Gửi cho GPT tóm tắt -> Bắn tin nhắn qua Telegram API.

2. Chuẩn bị "nguyên liệu"​


Bạn cần cài đặt các thư viện sau:
Python:
pip install youtube-transcript-api openai requests

Giải thích nhanh:
  • youtube-transcript-api: Thư viện giúp lấy phụ đề của video (hỗ trợ cả phụ đề thủ công và tự động tạo).
  • openai: Để gọi model LLM tóm tắt văn bản.
  • requests: Để gửi HTTP Request tới Telegram.

3. Cấu hình Telegram Bot (Quan trọng)​


Để nhận tin nhắn, bạn cần 2 thông số: Bot TokenChat ID. Hãy làm theo các bước sau:

Bước 1: Lấy Bot Token​

1. Mở Telegram, tìm tài khoản @BotFather.
2. Chat lệnh /newbot và làm theo hướng dẫn đặt tên.
3. BotFather sẽ đưa cho bạn một chuỗi ký tự dài (đó là Token). Ví dụ: 700123456:AAFw...

Bước 2: Lấy Chat ID của bạn​

1. Tìm và chat với bot bạn vừa tạo (bấm Start).
2. Tìm tiếp một bot khác tên là @userinfobot.
3. Chat bất kỳ câu gì với @userinfobot, nó sẽ trả về Id của bạn (thường là dãy số như: 123456789).

4. Triển khai Code​


Dưới đây là đoạn mã Python hoàn chỉnh kết nối các thành phần trên.

Python:
import os
import requests
from urllib.parse import urlparse, parse_qs
from youtube_transcript_api import YouTubeTranscriptApi
from openai import OpenAI

# --- CẤU HÌNH (Điền thông tin của bạn vào đây) ---
TELEGRAM_BOT_TOKEN = "DIEN_TOKEN_CUA_BAN_VAO_DAY"
TELEGRAM_CHAT_ID = "DIEN_CHAT_ID_CUA_BAN_VAO_DAY"
OPENAI_API_KEY = "sk-..."

# Khởi tạo Client OpenAI
client = OpenAI(api_key=OPENAI_API_KEY)

def get_video_id(url):
    """Tách ID video từ đường link YouTube"""
    query = urlparse(url)
    if query.hostname == 'youtu.be':
        return query.path[1:]
    if query.hostname in ('www.youtube.com', 'youtube.com'):
        if query.path == '/watch':
            p = parse_qs(query.query)
            return p['v'][0]
    return None

def get_transcript(video_id):
    """Lấy phụ đề video và gộp thành một đoạn văn bản"""
    try:
        # Lấy transcript (ưu tiên tiếng Việt, nếu không có thì lấy tiếng Anh)
        transcript_list = YouTubeTranscriptApi.get_transcript(video_id, languages=['vi', 'en'])
       
        # Gộp các đoạn text lại
        full_text = " ".join([item['text'] for item in transcript_list])
        return full_text
    except Exception as e:
        print(f"Lỗi khi lấy phụ đề: {e}")
        return None

def summarize_text(text):
    """Gửi text cho AI để tóm tắt"""
    try:
        prompt = f"""
        Hãy tóm tắt nội dung transcript video sau đây thành 5 gạch đầu dòng quan trọng nhất.
        Ngôn ngữ: Tiếng Việt.
        Văn phong: Ngắn gọn, súc tích, đi thẳng vào vấn đề.
       
        Nội dung:
        {text[:10000]}  # Giới hạn 10k ký tự để tránh lỗi token quá dài
        """
       
        response = client.chat.completions.create(
            model="gpt-4o-mini", # Dùng model mini cho rẻ và nhanh
            messages=[
                {"role": "system", "content": "Bạn là trợ lý tóm tắt tin tức chuyên nghiệp."},
                {"role": "user", "content": prompt}
            ]
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"Lỗi AI: {e}"

def send_telegram(message):
    """Gửi tin nhắn về Telegram"""
    url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
    payload = {
        "chat_id": TELEGRAM_CHAT_ID,
        "text": message,
        "parse_mode": "Markdown" # Để hiển thị chữ đậm/nghiêng đẹp hơn
    }
    requests.post(url, json=payload)

def main():
    youtube_url = input("Nhập link video YouTube bạn muốn tóm tắt: ")
   
    print("⏳ Đang xử lý...")
    video_id = get_video_id(youtube_url)
   
    if not video_id:
        print("❌ Link YouTube không hợp lệ.")
        return

    # 1. Lấy nội dung
    transcript = get_transcript(video_id)
    if not transcript:
        print("❌ Video này không có phụ đề (CC). Không thể tóm tắt.")
        return
   
    print("✅ Đã lấy được nội dung. Đang gửi cho AI tóm tắt...")
   
    # 2. Tóm tắt
    summary = summarize_text(transcript)
   
    # 3. Gửi báo cáo
    final_msg = f"*TÓM TẮT VIDEO:*\n{youtube_url}\n\n{summary}"
    send_telegram(final_msg)
   
    print("🚀 Đã gửi bản tóm tắt về Telegram của bạn!")

if __name__ == "__main__":
    main()

5. Lưu ý và Mở rộng​


  • Giới hạn: Script này chỉ hoạt động với video có phụ đề (Closed Captions - CC). May mắn là YouTube hiện nay tự tạo phụ đề cho hầu hết các video.
  • Xử lý Video không sub: Để nâng cao, bạn có thể tải file âm thanh (mp3) của video về và dùng model Whisper của OpenAI để chuyển giọng nói thành văn bản trước khi tóm tắt.
  • Ứng dụng: Bạn có thể treo script này trên server và lập lịch (cronjob) để mỗi sáng nó tự quét các kênh tin tức tài chính và gửi bản tin vắn tắt cho bạn.

Chúc các bạn "hack" năng suất thành công!
 
Back
Top