7.4 KiB
คู่มือตั้งค่า YouTube API สำหรับ Erika
คู่มือนี้ใช้สำหรับเชื่อมช่อง YouTube หนึ่งช่องกับหน้า /admin/upload เพื่ออ่านรายการวิดีโอล่าสุด อัปโหลดวิดีโอ ตั้งภาพปก และตั้งเวลาเผยแพร่
1. สร้าง Google Cloud Project
- เข้า Google Cloud Console
- กดชื่อโปรเจกต์ด้านบน แล้วเลือก New project
- ตั้งชื่อ เช่น
Erika YouTube Uploader - กด Create และเลือกโปรเจกต์ที่สร้างใหม่
2. เปิดใช้ YouTube Data API v3
- เปิด YouTube Data API v3
- ตรวจสอบว่าเลือกโปรเจกต์ถูกต้อง
- กด Enable
API นี้ใช้ทั้งอ่านวิดีโอล่าสุดและอัปโหลดวิดีโอ โดยคำขอทุกแบบจะใช้โควตาของโปรเจกต์ ดูรายละเอียดได้ที่ YouTube Data API Overview
3. ตั้งค่า OAuth consent screen
- ไปที่ Google Auth Platform → Branding
- ใส่ชื่อแอป อีเมลซัพพอร์ต และอีเมลติดต่อผู้พัฒนา
- ไปที่ Audience
- ถ้าใช้ส่วนตัว ให้เลือก External และสถานะ Testing
- เพิ่มบัญชี Google ที่เป็นเจ้าของช่อง YouTube ในรายการ Test users
- ไปที่ Data Access และเพิ่ม scope:
https://www.googleapis.com/auth/youtube.upload
scope นี้อนุญาตให้ Erika จัดการวิดีโอที่อัปโหลดไปยังช่อง ดูรายละเอียด OAuth ของ YouTube ได้ที่ OAuth 2.0 for Web Server Applications
4. สร้าง OAuth Client
- ไปที่ Google Auth Platform → Clients
- กด Create client
- เลือกชนิด Web application
- ตั้งชื่อ เช่น
Erika Admin - ใน Authorized redirect URIs เพิ่ม URL นี้ โดยเปลี่ยนโดเมนให้ตรงกับ
BASE_URL:
https://your-domain.com/api/auth/youtube/callback
ตัวอย่าง production:
https://erika.sudloh.com/api/auth/youtube/callback
ถ้าทดสอบในเครื่องและ BASE_URL=http://localhost:4000 ให้เพิ่ม:
http://localhost:4000/api/auth/youtube/callback
- กด Create แล้วคัดลอก Client ID และ Client secret
5. สร้าง API Key สำหรับรายการวิดีโอล่าสุด
- ไปที่ APIs & Services → Credentials
- กด Create credentials → API key
- เปิด Edit API key
- ใน API restrictions เลือก Restrict key
- เลือกเฉพาะ YouTube Data API v3 แล้วบันทึก
หา Channel ID ได้จาก YouTube Studio หรือ URL/ข้อมูลขั้นสูงของช่อง
6. เพิ่มค่าในไฟล์ environment
เพิ่มค่าต่อไปนี้ใน .env และ .env.local ตามฐานข้อมูล/สภาพแวดล้อมที่ใช้งาน:
BASE_URL=https://your-domain.com
YOUTUBE_API_KEY=your_api_key
YOUTUBE_CHANNEL_ID=your_channel_id
YOUTUBE_CLIENT_ID=your_oauth_client_id
YOUTUBE_CLIENT_SECRET=your_oauth_client_secret
อย่าใส่ secret ในตัวแปรที่ขึ้นต้นด้วย NEXT_PUBLIC_ และอย่า commit ไฟล์ .env
7. ขอ Refresh Token
- รีสตาร์ตแอปหลังเพิ่ม environment variables
- ล็อกอินด้วยบัญชี Discord ที่อยู่ใน
ADMIN_DISCORD_IDS - เปิด URL:
https://your-domain.com/api/auth/youtube
- เลือกบัญชี Google ที่เป็นเจ้าของช่อง YouTube
- อนุญาตสิทธิ์อัปโหลดวิดีโอ
- หน้า callback จะแสดง
YOUTUBE_REFRESH_TOKEN - คัดลอกไปใส่
.envหรือ.env.local:
YOUTUBE_REFRESH_TOKEN=your_refresh_token
- รีสตาร์ตแอปอีกครั้ง
Refresh token เป็นข้อมูลลับ ห้ามส่งให้ผู้อื่นหรือบันทึกลง Git
8. ทดสอบ
- เปิด
/admin/upload - ไปแท็บ Recent videos และตรวจสอบว่าวิดีโอ YouTube ล่าสุดแสดงขึ้นมา
- ไปแท็บ Upload เลือกไฟล์วิดีโอและรอแถบ Background upload ครบ 100%
- กรอกชื่อ รายละเอียด และตั้งค่า YouTube
- กด Upload to both platforms หรือเลือกวันเวลาแล้วกด Schedule both uploads
- ตรวจสอบผลในแท็บ History
แก้ปัญหาที่พบบ่อย
redirect_uri_mismatch
ค่า redirect URI ใน Google Cloud ต้องตรงกับ ${BASE_URL}/api/auth/youtube/callback ทุกตัวอักษร รวม http/https โดเมน พอร์ต และ path
ไม่ได้รับ Refresh Token
ลบสิทธิ์แอปเดิมจากบัญชี Google แล้วเปิด /api/auth/youtube ใหม่ ระบบของ Erika ส่ง access_type=offline และ prompt=consent เพื่อขอ refresh token ใหม่
เห็นหน้า “Google hasn’t verified this app”
ถ้าแอปอยู่ในโหมด Testing ให้เพิ่มบัญชี Google เป็น Test user ก่อน สำหรับแอปสาธารณะอาจต้องผ่านขั้นตอน OAuth verification ของ Google
วิดีโอถูกจำกัดเป็น Private
โปรเจกต์ API ที่ยังไม่ผ่านการตรวจสอบจาก YouTube อาจถูกจำกัดให้อัปโหลดเป็น Private จนกว่าจะผ่าน API audit
Quota เต็ม
ตรวจสอบที่ Google Cloud Console → APIs & Services → YouTube Data API v3 → Quotas การอัปโหลดวิดีโอใช้โควตาสูงกว่าการอ่านข้อมูลทั่วไป