Google OAuth YouTube API Claude Code Handover 全家桶

Google OAuth 全家桶授權 + YouTube 上傳 + Claude 雙窗口 Handover

Thomas 從零搞定 Google API 全套授權,讓 AI 能上傳 YouTube、讀寫 Drive、收發 Gmail。附 IDE ↔ 終端機 Handover 溝通術。

頁內目錄

第一章:原理 — 為什麼需要 OAuth?

生活比喻

沒有 OAuth 的世界:你把家門鑰匙(密碼)直接給快遞員 → 他能進你家做任何事,包括翻你的抽屜、改你的門鎖。你無法限制他的行為,也無法收回鑰匙(除非改鎖)。

有 OAuth 的世界:你在門禁系統登記快遞公司 → 快遞員刷工牌進入 → 只能到指定區域(玄關放包裹)→ 你可以隨時在門禁系統取消授權,不用換鎖。

OAuth 授權流程
你(Thomas)在 GCP 註冊一個 App
App 說:「我需要 YouTube + Drive 權限」
Google 彈出登入頁面問你:「允許嗎?」
你點「允許」→ Google 給 App 一個 Token
App 拿 Token 去呼叫 API(上傳影片、讀 Drive 等)
Token 過期?自動用 Refresh Token 續期,不用重新登入
關鍵:你從來不需要把 Google 密碼交給任何 App

OAuth 的核心設計就是:App 永遠拿不到你的密碼。它只拿到一個有限期的 Token,而且你可以隨時在 Google 帳號設定 撤銷授權。

第二章:三個核心概念

概念 白話翻譯 文件
OAuth Client Secret
用戶端密碼(Client Secret)
你 App 的「身份證」,告訴 Google「我是誰」。下載一次,長期使用。 google_oauth_thomastangnz.json
Access Token
存取權杖
臨時通行證,1 小時過期。程式自動管理,你不用管。 自動管理,不用管
Refresh Token
重新整理權杖
通行證續期卡,長期有效。Access Token 過期時自動用它換新的。 google_token_thomastangnz.json

三者的關係比喻

Client Secret = 你的駕照(證明你是你)

Access Token = 停車場的臨時票(1 小時到期)

Refresh Token = 停車場的月卡(到期自動續,不用重新申請)

第三章:實戰 — 5 分鐘搞定 Google 全家桶授權

1啟用 YouTube Data API v3
其他 API 用到時再啟用

Drive、Gmail、Calendar、Sheets、Docs、Slides 各有獨立的 API,需要時到 API Library 搜名字點 ENABLE 即可。

2設定 OAuth 同意畫面(Google Auth Platform)

左側菜單結構(新版 UI):

踩坑:新版 UI 跟舊教程不同

2024 年後 Google 把 OAuth Consent Screen 改名為 Google Auth Platform,左側選單變成:總覽 / 品牌 / 目標對象 / 用戶端 / 資料存取權 / 驗證中心 / 設定。網上大多數教程還是舊版截圖,不要被搞混。

3建立 OAuth 憑證(OAuth Client ID)

在左側「用戶端(Clients) 頁面:

重要:選「電腦版應用程式」而非「網路應用程式」

Desktop app 類型適合本機腳本(Python / Claude Code),不需要設定 redirect URI。如果選了 Web app 類型,需要額外處理 callback URL,本機跑腳本會很麻煩。

4首次授權(跑一次就好)
"This app isn't verified" 是正常的

因為你的 App 沒有提交 Google 審核(也不需要,只有你自己用)。點「進階 → 繼續」就好,完全安全,因為這個 App 就是你自己建的。

第四章:授權後能做什麼?(能力清單)

🎨 服務 能做什麼 Scope
🎥 YouTube 上傳影片、管理播放清單、編輯/刪除影片、查看數據 youtube, youtube.upload
📁 Google Drive 讀寫所有文件、上傳下載、管理權限分享 drive
Gmail 收發郵件、搜索、管理標籤 gmail.modify, gmail.send
📅 Google Calendar 讀寫日曆、建立/編輯事件 calendar
📊 Google Sheets 讀寫試算表、批量更新儲存格 spreadsheets
📄 Google Docs 讀寫文件、插入內容 documents
🎬 Google Slides 讀寫簡報、新增投影片 presentations
目前只啟用了 YouTube Data API v3

其他服務(Gmail、Calendar、Sheets 等)用到時再去 API Library 啟用對應 API 即可。OAuth 權限已經全給了,不用重新授權,只要啟用 API 就能用。

第五章:Claude 雙窗口 Handover 溝通術

這是本篇的特色章節。Thomas 在實戰中發現,用「IDE 裡的 Claude」和「終端機裡的 Claude」協作,效率遠超單窗口。

為什麼需要兩個 Claude?

兩個 Claude 各有所長
IDE 裡的 Claude(VS Code 擴展)
✓ 看得到你打開的文件、截圖、選取的代碼
✓ 可以用 MCP 遠端工具(Gmail、Notion、Cloudflare)
✗ 權限彈窗多(即使設了 bypass)
終端機裡的 Claude(CLI)
✓ bypass 權限更徹底,適合批量操作
✓ 適合長時間跑腳本(上傳影片等)
✗ 看不到你的 IDE 上下文

比喻:分工合作

IDE Claude = 軍師(看地圖、制定方案、寫文件)

終端機 Claude = 執行者(拿到指令就埋頭幹活,不問問題)

兩者之間靠一份 handover.md 文件傳遞任務,就像軍師寫好的作戰計劃交給執行者。

Handover 流程

IDE ↔ 終端機 Handover 完整流程
IDE Claude 分析任務、制定方案
IDE Claude 寫一個 handover.md 到 d:/tmp/
Thomas 複製一行指令貼到終端機
終端機 Claude 讀 handover.md,理解任務
終端機 Claude 執行任務(修改文件、跑腳本、部署)
終端機 Claude 存入記憶 → 刪除 handover.md
下次對話,任何一邊的 Claude 都能從記憶恢復上下文

Handover 文件模板

# 任務名稱 Handover

## 目標
一句話說明要做什麼

## 背景
- 為什麼要做
- 相關文件路徑
- 已完成的前置步驟

## 具體任務
1. 第一步...
2. 第二步...
3. 第三步...

## 完成後
- 存入記憶(寫到 MEMORY.md 或對應的 lesson 文件)
- 刪除本文件:`rm d:/tmp/xxx-handover.md`
為什麼放 d:/tmp/?

d:/tmp/ 不備份、不 git track,用完即丟。Handover 文件是臨時的溝通橋樑,任務完成後刪掉就好,不需要保留。重要的上下文已經被寫進 Claude 的記憶系統了。

第六章:實戰案例 — YouTube 批量上傳

這次實際完成的任務流程:

YouTube 批量上傳全流程
IDE Claude 制定方案:要上傳哪些影片、標題、描述
IDE Claude 寫上傳腳本 d:/tmp/youtube_upload.py
7 個影片全部上傳成功
自動建立播放清單,影片按順序排列
寫 handover 文件通知終端機 Claude 記憶新能力

Python 上傳核心代碼(簡化版)

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

# 讀取本地 Token(首次授權後自動生成的文件)
creds = Credentials.from_authorized_user_file("google_token_thomastangnz.json")

# 建立 YouTube API 客戶端
youtube = build("youtube", "v3", credentials=creds)

# 上傳一個影片
request = youtube.videos().insert(
    part="snippet,status",
    body={
        "snippet": {
            "title": "影片標題",
            "description": "影片描述",
            "tags": ["標籤1", "標籤2"],
            "categoryId": "22"  # People & Blogs
        },
        "status": {
            "privacyStatus": "unlisted"  # 不公開(有連結才能看)
        }
    },
    media_body=MediaFileUpload("video.mp4", resumable=True)
)
response = request.execute()
print(f"上傳成功!影片 ID: {response['id']}")
privacyStatus 三個選項

建立播放清單 + 加入影片

# 建立播放清單
playlist = youtube.playlists().insert(
    part="snippet,status",
    body={
        "snippet": {
            "title": "播放清單名稱",
            "description": "播放清單描述"
        },
        "status": {"privacyStatus": "unlisted"}
    }
).execute()

# 把影片加入播放清單
youtube.playlistItems().insert(
    part="snippet",
    body={
        "snippet": {
            "playlistId": playlist["id"],
            "resourceId": {
                "kind": "youtube#video",
                "videoId": "上傳後拿到的影片ID"
            }
        }
    }
).execute()

第七章:安全注意事項

絕對不能上傳公開 repo 的文件

這兩個文件放 d:/tmp/,不在任何 git 備份範圍內。

命名規範:多帳號不會搞混

例如:google_oauth_thomastangnz.json / google_token_thomastangnz.json

如果有第二個帳號:google_oauth_work.json / google_token_work.json

萬一洩漏了怎麼辦?
  1. 立刻去 GCP Console → Credentials 刪除該 OAuth Client
  2. 建一個新的 Client,下載新的 JSON
  3. 重新跑一次首次授權流程
  4. Google 帳號 → 第三方應用 撤銷舊的授權

FAQ 常見問題

Q: Token 過期了怎麼辦?

不用管。程式會自動用 Refresh Token 換新的 Access Token。除非你手動撤銷了授權,否則不需要重新登入。

Q: "This app isn't verified" 安全嗎?

安全。這個警告是給別人看的(提醒他們小心不認識的 App)。你自己建的 App、自己的 Google 帳號,完全沒問題。不需要花時間提交 Google 驗證審核。

Q: 可以給多個 Google 帳號授權嗎?

可以。每個帳號生成自己的 token 文件(如 google_token_account2.json),腳本裡指定不同的 token 文件即可。OAuth Client Secret 可以共用同一個。

Q: Handover 文件一定要用 .md 嗎?

不一定。任何文字格式都行(.txt、.md、甚至直接在對話裡貼文字)。用 .md 是因為 Claude 讀 Markdown 格式最順暢,結構也最清晰。

Q: 為什麼不直接在一個窗口做完所有事?

因為 IDE Claude 和終端機 Claude 的權限和能力不同。IDE Claude 有 MCP 工具但權限限制多;終端機 Claude bypass 更徹底但缺少上下文。分工合作比一個人死磕效率高。

原理 核心概念 實戰授權 能力清單 Handover YouTube案例 安全 FAQ ← 返回首頁 ↑ 回到頂部