import yt_dlp import csv def fetch_youtube_playlist(playlist_url, output_csv): # yt-dlp 的設定參數 ydl_opts = { 'extract_flat': True, # 關鍵設定:只抓取清單資訊,不下載影片實體檔案 'quiet': True, # 隱藏執行時的除錯訊息,讓終端機畫面乾淨 'nocheckcertificate': True, # 重要設定:略過 SSL 憑證驗證 } print(f"\n正在擷取播放清單資訊,請稍候...") with yt_dlp.YoutubeDL(ydl_opts) as ydl: try: # 獲取播放清單的所有資訊 playlist_info = ydl.extract_info(playlist_url, download=False) # 準備寫入 CSV 檔案 with open(output_csv, mode='w', encoding='utf-8-sig', newline='') as file: # 建議用 utf-8-sig,Excel打開才不會亂碼 writer = csv.writer(file) # 寫入標題列 writer.writerow(['Index', 'Video ID', 'Title', 'URL']) # 遍歷清單中的每一支影片 if 'entries' in playlist_info: for index, video in enumerate(playlist_info['entries'], start=1): vid_id = video.get('id') title = video.get('title') url = f"https://youtu.be/{vid_id}" writer.writerow([index, vid_id, title, url]) print(f"成功抓取: {index}. {title}") print(f"\n🎉 大功告成!資料已儲存至 {output_csv}") except Exception as e: print(f"發生錯誤: {e}") # 執行腳本 if __name__ == "__main__": print("=== YouTube 播放清單資訊擷取工具 ===") # 1. 讓用戶自行輸入 Playlist 連結,並用 strip() 去除前後多餘的空白 target_url = input("請輸入 YouTube 播放清單網址: ").strip() # 簡單的防呆:確保用戶有輸入網址 if not target_url: print("❌ 您沒有輸入任何網址,程式結束。") else: # 2. 讓用戶自訂輸出的 CSV 檔名 (若不輸入則使用預設值) output_filename = input("請輸入要儲存的檔案名稱 (直接按 Enter 預設為 playlist_data.csv): ").strip() # 如果用戶沒有輸入,就給預設檔名 if not output_filename: output_filename = 'playlist_data.csv' # 如果用戶有輸入但忘記打 .csv 副檔名,自動幫忙補上 elif not output_filename.lower().endswith('.csv'): output_filename += '.csv' # 執行擷取任務 fetch_youtube_playlist(target_url, output_filename)