前言

如果想要用 RSS 訂閱 YouTube 頻道動態,Google 官方有提供 RSS 訂閱網址訂閱頻道。

RSS 訂閱網址:https://www.youtube.com/feeds/videos.xml?channel_id={channel_id}

頻道簡介可以取得 channel_id

Channel_ID

channel_id 填入網址可以透過 RSS 程式訂閱頻道更新。

https://www.youtube.com/feeds/videos.xml?channel_id=UCpGk56cJDZcVqIxZatX7nbQ

RSS_Sub

但是訂閱頻道數量多的話就要重複步驟很多次,有更快速的方法獲得所有訂閱頻道的 RSS 網址呢?

答案是可以,透過 Google 提供的 YouTube Data API 可以做到,以下分享 利用 YouTube API 取得訂閱頻道 RSS 網址

1. 建立 YouTube Data API

1. 新增專案

首先進入 Google Cloud Console,建立新專案。

Create_Project_1

專案名稱可以自由取名。

Create_Project

建立專案之後,前往 API 和服務。

Console_API

2. 啟用 API

啟用 API 服務,選擇 YouTube Data API v3。讀取訂閱頻道需要 API 協助。

Enable_API

3. 設定憑證

選擇 API 之後,我們要設定使用 API 金鑰和 OAuth 用戶端 ID。

建立憑證,選擇 API 金鑰。

Create_API_Key

API 金鑰建立好,會顯示金鑰密碼,不要讓別人取得這個金鑰。

API_Key

建立 OAuth 用戶端 ID。

Create_OAuth_ID

選擇電腦版應用程式,名稱自由取名。

Create_OAuth_ID1

進入 OAuth 用戶端 ID,右方下載 JSON 檔,後面金鑰驗證會用到。

Download_JSON

設定 OAuth 同意畫面,填寫基本資訊。

OAuth

在 OAuth 同意畫面新增測試使用者,這個測試使用者是要存取 YouTube 資料的帳戶。若沒有設定會沒有權限使用 API 金鑰

OAuth1

2. 撰寫 Python 程式碼

測試環境:

  • Windows 11
  • Python 3.12.6
import os
import requests
import google.auth
from google_auth_oauthlib.flow import InstalledAppFlow

# 認證範圍
SCOPES = ['https://www.googleapis.com/auth/youtube.readonly']

# 取得 API 金鑰
credentials = None

# 如果已經存在 token.json,就直接使用
if os.path.exists('token.json'):
    from google.oauth2.credentials import Credentials
    credentials = Credentials.from_authorized_user_file('token.json', SCOPES)

# 如果沒有可用的憑證,讓用戶登入
if not credentials or not credentials.valid:
    if credentials and credentials.expired and credentials.refresh_token:
        credentials.refresh(requests.Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file('client_secrets.json', SCOPES)
        credentials = flow.run_local_server(port=0)

    # 儲存憑證以供下次使用
    with open('token.json', 'w') as token:
        token.write(credentials.to_json())

# 讀取訂閱列表
api_url = 'https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&mine=true'
subscriptions = []
next_page_token = None

while True:
    if next_page_token:
        response = requests.get(api_url + f'&pageToken={next_page_token}', headers={'Authorization': f'Bearer {credentials.token}'})
    else:
        response = requests.get(api_url, headers={'Authorization': f'Bearer {credentials.token}'})

    if response.status_code != 200:
        print(f'發生錯誤: {response.status_code}, {response.text}')
        break

    data = response.json()
    subscriptions.extend(data.get('items', []))
    next_page_token = data.get('nextPageToken')

    # 如果沒有下一頁,停止請求
    if not next_page_token:
        break

# 將所有訂閱頻道的 RSS 網址寫入 RSS.txt
with open('RSS.txt', 'w', encoding='utf-8') as f:
    for item in subscriptions:
        channel_title = item['snippet']['title']
        channel_id = item['snippet']['resourceId']['channelId']
        rss_feed = f'https://www.youtube.com/feeds/videos.xml?channel_id={channel_id}'
        f.write(f'頻道名稱: {channel_title}, RSS 訂閱網址: {rss_feed}\n')

print("RSS 連結已寫入 RSS.txt")

3. 使用 API

重新命名下載的 JSON 檔改為 client_secrets.json,並和程式碼放在同一個目錄。

安裝 Python 套件

pip install requests google-auth google-auth-oauthlib

執行 Python 程式

$ python youtube_sub.py
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type= ....

瀏覽器會跳出驗證網頁,選擇要讀取的 YouTube 帳戶,最後出現「這個應用程式未經 Google 驗證」,選擇「繼續」。

Validation

如果不想看到這個畫面,在 OAuth 同意畫面將應用程式發佈。

驗證成功後會存到 token.json 裡面,這是放驗證的 Token,以後執行程式就不用再重複驗證。

最後所有訂閱頻道的 RSS 網址就會儲存同目錄的 RSS.txt 中,我們可以用 RSS 軟體來批次訂閱。

附錄

Google Cloud Console

YouTube Data API Reference

Python 下載