
今天筆者要替昨天完成的中文轉英文影片翻譯 App 加上一個實用功能: 翻譯完成後,按一下按鈕,就把影片自動上傳到 YouTube! 不然每次還要手動下載、開 YouTube Studio、填標題、填說明、選隱私權……光想到就累了啊 ![]()
🎯 這次的目標:替翻譯完成的影片增加 YouTube 自動發布功能。
筆者在介面上增加一個 Submit to YouTube 按鈕,讓使用者在翻譯結果頁面輸入影片標題、 描述與隱私權設定,再交給後端背景處理。預設值會設成私人,畢竟影片還沒確認就直接公開, 這種事情一失手就是社死現場,先保守一點比較好 😅
📌 這次要完成的三件事
在結果頁面增加 YouTube 發布表單與按鈕。
使用 YouTube Data API 上傳影片與 metadata。
建立連線測試程式,完成 OAuth 授權後保存必要的 Refresh Token。
🔐 YouTube API 不是預設開好:先去 Google Cloud 找開關
原本以為 YouTube API 應該是拿來就能用,結果居然不是。筆者要先進入 Google Cloud Console, 找到 API 與 Services,再到 Library 裡面搜尋並啟用 YouTube Data API。

在 Google Cloud Console 建立 OAuth Client,讓程式可以連線到 YouTube。
接著要建立 OAuth Client ID。筆者這次選擇 Desktop application,因為開發與授權流程主要在本機進行, 不需要先架一個正式網站給 Google 回呼。建立完成後會拿到 Client ID,並依照應用程式類型取得對應的密鑰資訊。

OAuth Client 建立完成後,保存 Client ID 與 Client Secret。
⚠️ 憑證不是裝飾品,請不要丟進 Git
Client ID、Client Secret、Access Token 與 Refresh Token 都屬於敏感資訊。 筆者會把它們放在 .env,並且確定把 .env 加進 .gitignore。 不然一個不小心推到公開儲存庫,接下來就不是發影片,而是發現自己的雲端帳單開始長大了 😱
🪪 OAuth 授權:第一次麻煩,後面才方便
YouTube 不會讓程式拿著一把 API Key 就直接代表使用者上傳影片,因為這牽涉到頻道權限, 所以筆者要走 OAuth 2.0 授權流程。第一次執行連線測試程式時,瀏覽器會跳出 Google 登入與授權畫面, 筆者按一下繼續、選擇帳號、同意權限,完成後程式就能取得 Token。

OAuth 流程需要使用者完成登入與授權。
這裡有一個眉角:短效的 Access Token 會過期,所以程式需要保存 Refresh Token, 未來才能換回新的 Access Token,不必每次執行都重新登入。筆者把取得到的 Refresh Token 寫回環境變數, 讓後端在上傳時自動完成更新。
🧩 用 AI 加功能:Prompt 講清楚,少一點來回拉扯
這次筆者也順便用 Vibe Coding 的方式補功能,但沒有只丟一句「幫我加 YouTube」就期待奇蹟發生。 我把需求拆成幾個明確任務:增加按鈕、建立上傳函式、做連線測試、保存 Token、加入進度狀態, 以及把錯誤寫到 log。需求越具體,AI 越容易一次做到位。

新增 YouTube 功能後,先重新整理並檢查網頁結果。
🧪 先驗證連線,再來上傳影片
筆者沒有直接拿完整影片流程當第一個測試,而是先執行連線測試程式,確認 OAuth 能正常取得 Token, 並且把 Refresh Token 寫回 .env。這個步驟非常重要,因為如果授權本身就有問題, 後面看到「影片上傳失敗」時,根本不知道是憑證、權限、檔案路徑,還是 YouTube API 出包。

授權完成後,筆者回到翻譯結果頁面,就可以看到 YouTube 發布區塊。 使用者可以輸入標題、描述,選擇私人、非公開或公開,然後按下 Submit to YouTube。
影片已成功送往 YouTube,接著等待 YouTube 完成轉檔。

更多實作細節,請參考完整版影片囉
⚠️ 本日結論
YouTube Data API 預設不啟用,要先到 Google Cloud Library 開啟。
第一次授權要使用 OAuth,後續利用 Refresh Token 自動登入。
不過從「影片翻譯完成」一路做到「自動發到 YouTube」,以前寫網站要花好幾天的功能,現在搭配 AI、API, Vibe Coding 可以快速做出可執行版本,這也是它會風行的原因啊~![]()