@@ -1,137 +0,0 @@
# คู่มือตั้งค่า YouTube API สำหรับ Erika
คู่มือนี้ใช้สำหรับเชื่อมช่อง YouTube หนึ่งช่องกับหน้า `/admin/upload` เพื่ออ่านรายการวิดีโอล่าสุด อัปโหลดวิดีโอ ตั้งภาพปก และตั้งเวลาเผยแพร่
## 1. สร้าง Google Cloud Project
1. เข้า [Google Cloud Console ](https://console.cloud.google.com/ )
2. กดชื่อโปรเจกต์ด้านบน แล้วเลือก **New project **
3. ตั้งชื่อ เช่น `Erika YouTube Uploader`
4. กด **Create ** และเลือกโปรเจกต์ที่สร้างใหม่
## 2. เปิดใช้ YouTube Data API v3
1. เปิด [YouTube Data API v3 ](https://console.cloud.google.com/apis/library/youtube.googleapis.com )
2. ตรวจสอบว่าเลือกโปรเจกต์ถูกต้อง
3. กด **Enable **
API นี้ใช้ทั้งอ่านวิดีโอล่าสุดและอัปโหลดวิดีโอ โดยคำขอทุกแบบจะใช้โควตาของโปรเจกต์ ดูรายละเอียดได้ที่ [YouTube Data API Overview ](https://developers.google.com/youtube/v3/getting-started )
## 3. ตั้งค่า OAuth consent screen
1. ไปที่ **Google Auth Platform ** → **Branding **
2. ใส่ชื่อแอป อีเมลซัพพอร์ต และอีเมลติดต่อผู้พัฒนา
3. ไปที่ **Audience **
4. ถ้าใช้ส่วนตัว ให้เลือก **External ** และสถานะ **Testing **
5. เพิ่มบัญชี Google ที่เป็นเจ้าของช่อง YouTube ในรายการ **Test users **
6. ไปที่ **Data Access ** และเพิ่ม scope:
``` text
https://www.googleapis.com/auth/youtube.upload
```
scope นี้อนุญาตให้ Erika จัดการวิดีโอที่อัปโหลดไปยังช่อง ดูรายละเอียด OAuth ของ YouTube ได้ที่ [OAuth 2.0 for Web Server Applications ](https://developers.google.com/youtube/v3/guides/auth/server-side-web-apps )
## 4. สร้าง OAuth Client
1. ไปที่ **Google Auth Platform ** → **Clients **
2. กด **Create client **
3. เลือกชนิด **Web application **
4. ตั้งชื่อ เช่น `Erika Admin`
5. ใน **Authorized redirect URIs ** เพิ่ม URL นี้ โดยเปลี่ยนโดเมนให้ตรงกับ `BASE_URL` :
``` text
https://your-domain.com/api/auth/youtube/callback
```
ตัวอย่าง production:
``` text
https://erika.sudloh.com/api/auth/youtube/callback
```
ถ้าทดสอบในเครื่องและ `BASE_URL=http://localhost:4000` ให้เพิ่ม:
``` text
http://localhost:4000/api/auth/youtube/callback
```
6. กด **Create ** แล้วคัดลอก **Client ID ** และ **Client secret **
## 5. สร้าง API Key สำหรับรายการวิดีโอล่าสุด
1. ไปที่ **APIs & Services ** → **Credentials **
2. กด **Create credentials ** → **API key **
3. เปิด **Edit API key **
4. ใน **API restrictions ** เลือก **Restrict key **
5. เลือกเฉพาะ **YouTube Data API v3 ** แล้วบันทึก
หา Channel ID ได้จาก YouTube Studio หรือ URL/ข้อมูลขั้นสูงของช่อง
## 6. เพิ่มค่าในไฟล์ environment
เพิ่มค่าต่อไปนี้ใน `.env` และ `.env.local` ตามฐานข้อมูล/สภาพแวดล้อมที่ใช้งาน:
``` env
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
1. รีสตาร์ตแอปหลังเพิ่ม environment variables
2. ล็อกอินด้วยบัญชี Discord ที่อยู่ใน `ADMIN_DISCORD_IDS`
3. เปิด URL:
``` text
https://your-domain.com/api/auth/youtube
```
4. เลือกบัญชี Google ที่เป็นเจ้าของช่อง YouTube
5. อนุญาตสิทธิ์อัปโหลดวิดีโอ
6. หน้า callback จะแสดง `YOUTUBE_REFRESH_TOKEN`
7. คัดลอกไปใส่ `.env` หรือ `.env.local` :
``` env
YOUTUBE_REFRESH_TOKEN = your_refresh_token
```
8. รีสตาร์ตแอปอีกครั้ง
Refresh token เป็นข้อมูลลับ ห้ามส่งให้ผู้อื่นหรือบันทึกลง Git
## 8. ทดสอบ
1. เปิด `/admin/upload`
2. ไปแท็บ **Recent videos ** และตรวจสอบว่าวิดีโอ YouTube ล่าสุดแสดงขึ้นมา
3. ไปแท็บ **Upload ** เลือกไฟล์วิดีโอและรอแถบ Background upload ครบ 100%
4. กรอกชื่อ รายละเอียด และตั้งค่า YouTube
5. กด **Upload to both platforms ** หรือเลือกวันเวลาแล้วกด **Schedule both uploads **
6. ตรวจสอบผลในแท็บ **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 ** การอัปโหลดวิดีโอใช้โควตาสูงกว่าการอ่านข้อมูลทั่วไป