前言
如果想要用 RSS 訂閱 YouTube 頻道動態,Google 官方有提供 RSS 訂閱網址訂閱頻道。
RSS 訂閱網址:https://www.youtube.com/feeds/videos.xml?channel_id={channel_id}
頻道簡介可以取得 channel_id
。
channel_id
填入網址可以透過 RSS 程式訂閱頻道更新。
https://www.youtube.com/feeds/videos.xml?channel_id=UCpGk56cJDZcVqIxZatX7nbQ
但是訂閱頻道數量多的話就要重複步驟很多次,有更快速的方法獲得所有訂閱頻道的 RSS 網址呢?
答案是可以,透過 Google 提供的 YouTube Data API 可以做到,以下分享 利用 YouTube API 取得訂閱頻道 RSS 網址。
1. 建立 YouTube Data API
1. 新增專案
首先進入 Google Cloud Console,建立新專案。
專案名稱可以自由取名。
建立專案之後,前往 API 和服務。
2. 啟用 API
啟用 API 服務,選擇 YouTube Data API v3
。讀取訂閱頻道需要 API 協助。
3. 設定憑證
選擇 API 之後,我們要設定使用 API 金鑰和 OAuth 用戶端 ID。
建立憑證,選擇 API 金鑰。
API 金鑰建立好,會顯示金鑰密碼,不要讓別人取得這個金鑰。
建立 OAuth 用戶端 ID。
選擇電腦版應用程式,名稱自由取名。
進入 OAuth 用戶端 ID,右方下載 JSON 檔,後面金鑰驗證會用到。
設定 OAuth 同意畫面,填寫基本資訊。
在 OAuth 同意畫面新增測試使用者,這個測試使用者是要存取 YouTube 資料的帳戶。若沒有設定會沒有權限使用 API 金鑰。
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 驗證」,選擇「繼續」。
如果不想看到這個畫面,在 OAuth 同意畫面將應用程式發佈。
驗證成功後會存到 token.json
裡面,這是放驗證的 Token,以後執行程式就不用再重複驗證。
最後所有訂閱頻道的 RSS 網址就會儲存同目錄的 RSS.txt
中,我們可以用 RSS 軟體來批次訂閱。