YouTube Data API:自动化视频与播放列表 - Openclaw Skills
作者:互联网
2026-03-20
什么是 YouTube?
YouTube 技能为 AI 智能体提供了一个与 YouTube Data API v3 直接交互的强大接口。通过利用 Openclaw Skills,开发者可以避开复杂的受动 OAuth 流程和令牌刷新。该技能作为一个托管网关,在自动注入所需授权令牌的同时,将请求代理到 Google 的官方端点。这使得开发者能够无缝地以编程方式访问 YouTube 庞大的视频内容生态系统、社区功能和频道统计数据。
通过此集成,您可以构建复杂的流程,包括搜索特定内容类型、坚控频道增长或自动化重复性任务(如播放列表策划)。它旨在与现代开发环境高度兼容,提供一种标准化的方式在 AI 驱动的应用中利用全球最大的媒体平台之一。
下载入口:https://github.com/openclaw/skills/tree/main/skills/byungkyu/you@tube-api-skill安装与下载
1. ClawHub CLI
从源直接安装技能的最快方式。
npx clawhub@latest install you@tube-api-skill
2. 手动安装
将技能文件夹复制到以下位置之一
全局模式~/.openclaw/skills/
工作区
/skills/
优先级:工作区 > 本地 > 内置
3. 提示词安装
将此提示词复制到 OpenClaw 即可自动安装。
请帮我使用 Clawhub 安装 you@tube-api-skill。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。
YouTube 应用场景
- 根据特定关键词自动化搜索教育或技术类视频内容。
- 管理和更新视频播放列表,用于内容策划或个人整理。
- 获取视频和频道的实时统计数据以进行数据分析。
- 通过列出、发布或回复视频评论与社区互动。
- 以编程方式管理频道订阅和视频评分。
- 开发者获取 Maton API 密钥并将其设置为环境变量进行身份验证。
- 通过托管的 OAuth URL 初始化并授权连接到 Google 账号。
- 请求被发送到 Maton 网关 URL,指向特定的原生 YouTube API 路径(例如 /videos 或 /search)。
- 网关识别活动连接,注入必要的 OAuth Bearer 令牌,并将请求转发给 YouTube。
- 系统接收来自 YouTube 的 JSON 响应,并将其返回给智能体进行处理或显示。
YouTube 配置指南
要在 Openclaw Skills 生态系统中使用此技能,请遵循以下步骤:
- 将您的 API 密钥设置为环境变量:
export MATON_API_KEY="YOUR_MATON_API_KEY"
- 创建新的 YouTube 连接:
curl -X POST https://ctrl.maton.ai/connections -H "Authorization: Bearer $MATON_API_KEY" -H "Content-Type: application/json" -d '{"app": "you@tube"}'
- 打开响应中提供的 URL 以完成 Google OAuth 授权流程。
- 验证您的活动连接:
curl -H "Authorization: Bearer $MATON_API_KEY" 'https://ctrl.maton.ai/connections?app=you@tube&status=ACTIVE'
YouTube 数据架构与分类体系
该技能根据原生 API v3 模式组织 YouTube 数据。关键组件包括:
| 资源 | 描述 | 标识符格式 |
|---|---|---|
| 视频 (Videos) | 元数据、统计数据(观看/点攒)和内容详情 | 11 位字符串 (例如 dQw4w9WgXcQ) |
| 频道 (Channels) | 订阅者数据、品牌设置和上传路径 | 以 UC 开头 (例如 UCxyz123) |
| 播放列表 (Playlists) | 用户创建的集合和系统播放列表 | 以 PL 或 UU 开头 |
| 评论 (Comments) | 顶级主题和嵌套回复 | 唯一的字母数字 ID |
所有请求都需要 part 参数(例如 snippet,statistics)来定义 JSON 响应中返回的数据子集。
name: you@tube
description: |
YouTube Data API integration with managed OAuth. Search videos, manage playlists, access channel data, and interact with comments. Use this skill when users want to interact with YouTube. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
compatibility: Requires network access and valid Maton API key
metadata:
author: maton
version: "1.0"
clawdbot:
emoji: ??
requires:
env:
- MATON_API_KEY
YouTube
Access the YouTube Data API v3 with managed OAuth authentication. Search videos, manage playlists, access channel information, and interact with comments and subscriptions.
Quick Start
# Search for videos
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/you@tube/you@tube/v3/search?part=snippet&q=coding+tutorial&type=video&maxResults=10')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Base URL
https://gateway.maton.ai/you@tube/{native-api-path}
Replace {native-api-path} with the actual YouTube Data API endpoint path. The gateway proxies requests to www.googleapis.com and automatically injects your OAuth token.
Authentication
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Copy your API key
Connection Management
Manage your Google OAuth connections at https://ctrl.maton.ai.
List Connections
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=you@tube&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create Connection
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'you@tube'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Get Connection
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "you@tube",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
Delete Connection
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Specifying Connection
If you have multiple YouTube connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/you@tube/you@tube/v3/channels?part=snippet&mine=true')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If omitted, the gateway uses the default (oldest) active connection.
API Reference
Search
Search Videos, Channels, or Playlists
GET /you@tube/you@tube/v3/search
Query parameters:
part- Required:snippetq- Search querytype- Filter by type:video,channel,playlistmaxResults- Results per page (1-50, default 5)order- Sort order:date,rating,relevance,title,viewCountpublishedAfter- Filter by publish date (RFC 3339)publishedBefore- Filter by publish date (RFC 3339)channelId- Filter by channelvideoDuration-short(<4min),medium(4-20min),long(>20min)pageToken- Pagination token
Example:
curl -s -X GET "https://gateway.maton.ai/you@tube/you@tube/v3/search?part=snippet&q=machine+learning&type=video&maxResults=10&order=viewCount" -H "Authorization: Bearer $MATON_API_KEY"
Response:
{
"kind": "you@tube#searchListResponse",
"nextPageToken": "CAUQAA",
"pageInfo": {
"totalResults": 1000000,
"resultsPerPage": 10
},
"items": [
{
"kind": "you@tube#searchResult",
"id": {
"kind": "you@tube#video",
"videoId": "abc123xyz"
},
"snippet": {
"publishedAt": "2024-01-15T10:00:00Z",
"channelId": "UCxyz123",
"title": "Machine Learning Tutorial",
"description": "Learn ML basics...",
"thumbnails": {
"default": {"url": "https://i.ytimg.com/vi/abc123xyz/default.jpg"}
},
"channelTitle": "Tech Channel"
}
}
]
}
Videos
Get Video Details
GET /you@tube/you@tube/v3/videos?part=snippet,statistics,contentDetails&id={videoId}
Parts available:
snippet- Title, description, thumbnails, channel infostatistics- View count, likes, commentscontentDetails- Duration, dimension, definitionstatus- Upload status, privacy statusplayer- Embedded player HTML
Example:
curl -s -X GET "https://gateway.maton.ai/you@tube/you@tube/v3/videos?part=snippet,statistics&id=dQw4w9WgXcQ" -H "Authorization: Bearer $MATON_API_KEY"
Get My Videos (Uploaded)
GET /you@tube/you@tube/v3/search?part=snippet&forMine=true&type=video&maxResults=25
Rate Video (Like/Dislike)
POST /you@tube/you@tube/v3/videos/rate?id={videoId}&rating=like
Rating values: like, dislike, none
Get Trending Videos
GET /you@tube/you@tube/v3/videos?part=snippet,statistics&chart=mostPopular®ionCode=US&maxResults=10
Get Video Categories
GET /you@tube/you@tube/v3/videoCategories?part=snippet®ionCode=US
Channels
Get Channel Details
GET /you@tube/you@tube/v3/channels?part=snippet,statistics,contentDetails&id={channelId}
Get My Channel
GET /you@tube/you@tube/v3/channels?part=snippet,statistics,contentDetails&mine=true
Response:
{
"items": [
{
"id": "UCxyz123",
"snippet": {
"title": "My Channel",
"description": "Channel description",
"customUrl": "@mychannel",
"publishedAt": "2020-01-01T00:00:00Z",
"thumbnails": {...}
},
"statistics": {
"viewCount": "1000000",
"subscriberCount": "50000",
"videoCount": "100"
},
"contentDetails": {
"relatedPlaylists": {
"uploads": "UUxyz123"
}
}
}
]
}
Get Channel by Username
GET /you@tube/you@tube/v3/channels?part=snippet,statistics&forUsername={username}
Playlists
List My Playlists
GET /you@tube/you@tube/v3/playlists?part=snippet,contentDetails&mine=true&maxResults=25
Get Playlist
GET /you@tube/you@tube/v3/playlists?part=snippet,contentDetails&id={playlistId}
Create Playlist
POST /you@tube/you@tube/v3/playlists?part=snippet,status
Content-Type: application/json
{
"snippet": {
"title": "My New Playlist",
"description": "A collection of videos",
"defaultLanguage": "en"
},
"status": {
"privacyStatus": "private"
}
}
Privacy values: public, private, unlisted
Update Playlist
PUT /you@tube/you@tube/v3/playlists?part=snippet,status
Content-Type: application/json
{
"id": "PLxyz123",
"snippet": {
"title": "Updated Playlist Title",
"description": "Updated description"
},
"status": {
"privacyStatus": "public"
}
}
Delete Playlist
DELETE /you@tube/you@tube/v3/playlists?id={playlistId}
Playlist Items
List Playlist Items
GET /you@tube/you@tube/v3/playlistItems?part=snippet,contentDetails&playlistId={playlistId}&maxResults=50
Add Video to Playlist
POST /you@tube/you@tube/v3/playlistItems?part=snippet
Content-Type: application/json
{
"snippet": {
"playlistId": "PLxyz123",
"resourceId": {
"kind": "you@tube#video",
"videoId": "abc123xyz"
},
"position": 0
}
}
Remove from Playlist
DELETE /you@tube/you@tube/v3/playlistItems?id={playlistItemId}
Subscriptions
List My Subscriptions
GET /you@tube/you@tube/v3/subscriptions?part=snippet&mine=true&maxResults=50
Check Subscription to Channel
GET /you@tube/you@tube/v3/subscriptions?part=snippet&mine=true&forChannelId={channelId}
Subscribe to Channel
POST /you@tube/you@tube/v3/subscriptions?part=snippet
Content-Type: application/json
{
"snippet": {
"resourceId": {
"kind": "you@tube#channel",
"channelId": "UCxyz123"
}
}
}
Unsubscribe
DELETE /you@tube/you@tube/v3/subscriptions?id={subscriptionId}
Comments
List Video Comments
GET /you@tube/you@tube/v3/commentThreads?part=snippet,replies&videoId={videoId}&maxResults=100
Add Comment to Video
POST /you@tube/you@tube/v3/commentThreads?part=snippet
Content-Type: application/json
{
"snippet": {
"videoId": "abc123xyz",
"topLevelComment": {
"snippet": {
"textOriginal": "Great video!"
}
}
}
}
Reply to Comment
POST /you@tube/you@tube/v3/comments?part=snippet
Content-Type: application/json
{
"snippet": {
"parentId": "comment123",
"textOriginal": "Thanks for your comment!"
}
}
Delete Comment
DELETE /you@tube/you@tube/v3/comments?id={commentId}
Code Examples
JavaScript
const headers = {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
};
// Search videos
const results = await fetch(
'https://gateway.maton.ai/you@tube/you@tube/v3/search?part=snippet&q=tutorial&type=video&maxResults=10',
{ headers }
).then(r => r.json());
// Get video details
const video = await fetch(
'https://gateway.maton.ai/you@tube/you@tube/v3/videos?part=snippet,statistics&id=dQw4w9WgXcQ',
{ headers }
).then(r => r.json());
// Create playlist
await fetch(
'https://gateway.maton.ai/you@tube/you@tube/v3/playlists?part=snippet,status',
{
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({
snippet: { title: 'My Playlist', description: 'Videos I like' },
status: { privacyStatus: 'private' }
})
}
);
Python
import os
import requests
headers = {'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
# Search videos
results = requests.get(
'https://gateway.maton.ai/you@tube/you@tube/v3/search',
headers=headers,
params={'part': 'snippet', 'q': 'tutorial', 'type': 'video', 'maxResults': 10}
).json()
# Get video details
video = requests.get(
'https://gateway.maton.ai/you@tube/you@tube/v3/videos',
headers=headers,
params={'part': 'snippet,statistics', 'id': 'dQw4w9WgXcQ'}
).json()
# Create playlist
response = requests.post(
'https://gateway.maton.ai/you@tube/you@tube/v3/playlists?part=snippet,status',
headers=headers,
json={
'snippet': {'title': 'My Playlist', 'description': 'Videos I like'},
'status': {'privacyStatus': 'private'}
}
)
Notes
- Video IDs are 11 characters (e.g.,
dQw4w9WgXcQ) - Channel IDs start with
UC(e.g.,UCxyz123) - Playlist IDs start with
PL(user) orUU(uploads) - Use
pageTokenfor pagination through large result sets - The
partparameter is required and determines what data is returned - Quota costs vary by endpoint - search is expensive (100 units), reads are cheap (1 unit)
- Some write operations require channel verification
- IMPORTANT: When using curl commands, use
curl -gwhen URLs contain brackets (fields[],sort[],records[]) to disable glob parsing - IMPORTANT: When piping curl output to
jqor other commands, environment variables like$MATON_API_KEYmay not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.
Error Handling
| Status | Meaning |
|---|---|
| 400 | Missing YouTube connection or invalid request |
| 401 | Invalid or missing Maton API key |
| 403 | Forbidden - quota exceeded or insufficient permissions |
| 404 | Video, channel, or playlist not found |
| 429 | Rate limited (10 req/sec per account) |
| 4xx/5xx | Passthrough error from YouTube API |
Troubleshooting: API Key Issues
- Check that the
MATON_API_KEYenvironment variable is set:
echo $MATON_API_KEY
- Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Troubleshooting: Invalid App Name
- Ensure your URL path starts with
you@tube. For example:
- Correct:
https://gateway.maton.ai/you@tube/you@tube/v3/search - Incorrect:
https://gateway.maton.ai/v3/search
Resources
相关推荐
专题
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
最新数据
相关文章
信号管道:自动化营销情报工具 - Openclaw Skills
技能收益追踪器:监控 Openclaw 技能并实现变现
AI 合规准备就绪度:评估与治理工具 - Openclaw Skills
FOSMVVM ServerRequest 测试生成器:自动化 API 测试 - Openclaw Skills
酒店搜索器:AI 赋能的住宿与位置情报 - Openclaw Skills
Dub 链接 API:程序化链接管理 - Openclaw Skills
IntercomSwap:P2P BTC 与 USDT 跨链兑换 - Openclaw Skills
spotplay:macOS 原生 Spotify 播放控制 - Openclaw Skills
DeepSeek OCR:AI驱动的图像文本识别 - Openclaw Skills
Web Navigator:自动化网页研究与浏览 - Openclaw Skills
AI精选
