Files
erika/docs/youtube-api-setup-th.md
T

138 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# คู่มือตั้งค่า 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** การอัปโหลดวิดีโอใช้โควตาสูงกว่าการอ่านข้อมูลทั่วไป