AgentSkillsCN

youtube-data-api

YouTube Data API v3完整封装——支持视频搜索、获取视频/频道/播放列表详情、获取评论、下载字幕等功能。同时支持按时间、观看次数、评分等条件进行筛选与排序。

SKILL.md
--- frontmatter
name: youtube-data-api
description: YouTube Data API v3 complete wrapper - search videos, get video/channel/playlist details, get comments, download subtitles, etc. Supports filtering and sorting by time/views/rating and more.
version: 1.0.0
user-invocable: true
allowed-tools:
  - Bash
  - Read
  - Write
  - Edit
  - WebFetch
  - Task

YouTube Data API v3 Skill

Complete wrapper based on official YouTube Data API v3 documentation.

Configuration

API Key Setup

bash
# Option 1: Environment variable (recommended)
export YOUTUBE_API_KEY="YOUR_API_KEY_HERE"

# Option 2: Edit config file directly
# Edit ~/.claude/skills/youtube-data-api/scripts/config.py

Getting an API Key

  1. Go to Google Cloud Console
  2. Create a new project or select existing
  3. Enable YouTube Data API v3
  4. Create credentials → API Key
  5. (Optional) Restrict API Key to YouTube Data API only

Quota Limits

Operation TypeQuota Cost (units)
Read operations (list)1
Search requests100
Write operations (insert/update/delete)50
Video upload1600

Default daily quota: 10,000 units


Core Features

1. Search Videos (Search)

Quota cost: 100 units/request

bash
# Basic search
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "Python tutorial" \
    --max-results 25

# Filter by time (last week)
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "machine learning" \
    --published-after "7d" \
    --type video

# Sort by view count
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "React hooks" \
    --order viewCount \
    --type video

# HD videos only
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "4K nature" \
    --video-definition high \
    --type video

# Videos with captions
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "TED talk" \
    --video-caption closedCaption \
    --type video

# Live streaming videos
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "gaming" \
    --event-type live \
    --type video

# Filter by region
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "news" \
    --region-code US \
    --relevance-language en

# Filter by video duration
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "documentary" \
    --video-duration long \
    --type video

Search Parameters Reference

ParameterDescriptionValues
--query, -qSearch keywordsSupports boolean operators (python AND tutorial)
--typeResource typevideo, channel, playlist
--max-resultsResults count1-50, default 25
--orderSort orderrelevance(default), date, rating, viewCount, title
--published-afterPublished after1d, 7d, 30d, 1y or ISO 8601 format
--published-beforePublished beforeSame as above
--region-codeRegion codeISO 3166-1 (e.g., US, CN, JP)
--relevance-languageLanguageISO 639-1 (e.g., en, zh, ja)
--video-durationVideo lengthshort(<4min), medium(4-20min), long(>20min)
--video-definitionDefinitionhigh(HD), standard(SD)
--video-captionCaptionsclosedCaption(has captions), none(no captions)
--video-dimensionDimension2d, 3d
--event-typeLive statuslive(streaming), completed(ended), upcoming(scheduled)
--channel-idLimit to channelChannel ID
--safe-searchSafe searchnone, moderate, strict

2. Get Video Details (Videos)

Quota cost: 1 unit/request

bash
# Get single video details
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py video \
    --id "dQw4w9WgXcQ" \
    --parts snippet,statistics,contentDetails

# Get multiple videos (batch)
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py video \
    --id "dQw4w9WgXcQ,jNQXAC9IVRw,9bZkp7q19f0" \
    --parts snippet,statistics

# Get trending videos
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py video \
    --chart mostPopular \
    --region-code US \
    --max-results 50

# Get trending by category
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py video \
    --chart mostPopular \
    --video-category-id 10 \
    --region-code JP

Video Parts Reference

PartContains
snippetTitle, description, thumbnails, channel info, publish time, tags
statisticsView count, like count, comment count
contentDetailsDuration, definition, caption info, region restrictions
statusUpload status, privacy, license
playerEmbedded player HTML
topicDetailsRelated topic IDs
recordingDetailsRecording location, date
liveStreamingDetailsLive info (start/end time, viewer count)

Video Category IDs Reference

IDCategoryIDCategory
1Film & Animation20Gaming
2Autos & Vehicles22People & Blogs
10Music23Comedy
15Pets & Animals24Entertainment
17Sports25News & Politics
19Travel & Events26Howto & Style
27Education28Science & Technology

3. Get Channel Info (Channels)

Quota cost: 1 unit/request

bash
# Get by channel ID
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py channel \
    --id "UC_x5XG1OV2P6uZZ5FSM9Ttw" \
    --parts snippet,statistics,contentDetails

# Get by username
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py channel \
    --for-username "GoogleDevelopers" \
    --parts snippet,statistics

# Get by handle (@username)
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py channel \
    --for-handle "@Google" \
    --parts snippet,statistics,brandingSettings

Channel Parts Reference

PartContains
snippetChannel name, description, thumbnails, country
statisticsSubscriber count, video count, total views
contentDetailsRelated playlists (uploads, likes, etc.)
brandingSettingsChannel banner, keywords, default language
topicDetailsChannel topics
statusChannel status (long video upload permission, etc.)

4. Get Playlists (Playlists)

Quota cost: 1 unit/request

bash
# Get playlist by ID
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py playlist \
    --id "PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf" \
    --parts snippet,contentDetails

# Get all playlists for a channel
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py playlist \
    --channel-id "UC_x5XG1OV2P6uZZ5FSM9Ttw" \
    --max-results 50

5. Get Playlist Videos (PlaylistItems)

Quota cost: 1 unit/request

bash
# Get all videos in a playlist
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py playlist-items \
    --playlist-id "PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf" \
    --max-results 50

# Paginated retrieval
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py playlist-items \
    --playlist-id "PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf" \
    --page-token "NEXT_PAGE_TOKEN"

6. Get Comments (Comments & CommentThreads)

Quota cost: 1 unit/request

bash
# Get all comments for a video (top-level)
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py comments \
    --video-id "dQw4w9WgXcQ" \
    --max-results 100 \
    --order relevance

# Get comments for a channel
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py comments \
    --channel-id "UC_x5XG1OV2P6uZZ5FSM9Ttw" \
    --max-results 50

# Get replies to a comment
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py comment-replies \
    --parent-id "COMMENT_ID" \
    --max-results 50

Comment Sort Options

SortDescription
relevanceBy relevance (default)
timeBy time (newest first)

7. Get Captions (Captions)

Quota cost: 1 unit/request (list), 50 units (download)

bash
# List all caption tracks for a video
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py captions \
    --video-id "dQw4w9WgXcQ" \
    --list

# Download captions (requires OAuth)
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py captions \
    --video-id "dQw4w9WgXcQ" \
    --download \
    --caption-id "CAPTION_ID" \
    --format srt

Note: Downloading captions requires video owner authorization (OAuth). For public videos, use yt-dlp to get auto-generated captions.

Using yt-dlp for Subtitles (Alternative)

bash
# Install yt-dlp
pip install yt-dlp

# List available subtitles
yt-dlp --list-subs "https://www.youtube.com/watch?v=VIDEO_ID"

# Download subtitles (skip video)
yt-dlp --write-sub --write-auto-sub --sub-lang en,zh-Hans --skip-download \
    "https://www.youtube.com/watch?v=VIDEO_ID"

# Download and convert to SRT format
yt-dlp --write-sub --write-auto-sub --sub-lang en --sub-format srt --skip-download \
    "https://www.youtube.com/watch?v=VIDEO_ID"

8. Get Video Categories (VideoCategories)

Quota cost: 1 unit/request

bash
# Get video categories for a region
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py categories \
    --region-code US

# Get categories for China
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py categories \
    --region-code CN

9. Get Supported Regions and Languages

Quota cost: 1 unit/request

bash
# Get supported regions list
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py regions

# Get supported languages list
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py languages

Common Use Case Examples

Scenario 1: Get Trending Videos on a Topic from Last Week

bash
# Search videos about "AI" from last 7 days, sorted by view count
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "AI artificial intelligence" \
    --published-after "7d" \
    --order viewCount \
    --type video \
    --max-results 50 \
    --output ai_trending.json

# Get detailed statistics for these videos
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py video \
    --ids-from ai_trending.json \
    --parts snippet,statistics,contentDetails \
    --output ai_trending_details.json

Scenario 2: Analyze All Videos from a Channel

bash
# 1. Get channel info
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py channel \
    --for-handle "@GoogleDevelopers" \
    --parts snippet,statistics,contentDetails \
    --output channel_info.json

# 2. Get uploads playlist ID (from contentDetails.relatedPlaylists.uploads)

# 3. Get all uploaded videos
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py playlist-items \
    --playlist-id "UPLOADS_PLAYLIST_ID" \
    --max-results 50 \
    --all-pages \
    --output channel_videos.json

Scenario 3: Get Videos with Subtitles

bash
# 1. Search videos
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "TED talk motivation" \
    --video-caption closedCaption \
    --type video \
    --max-results 10 \
    --output ted_videos.json

# 2. Download subtitles using yt-dlp
for video_id in $(jq -r '.items[].id.videoId' ted_videos.json); do
    yt-dlp --write-sub --write-auto-sub --sub-lang en --skip-download \
        "https://www.youtube.com/watch?v=$video_id" \
        -o "subtitles/%(id)s.%(ext)s"
done

Scenario 4: Analyze Video Comments

bash
# Get all comments for a video
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py comments \
    --video-id "VIDEO_ID" \
    --max-results 100 \
    --all-pages \
    --output comments.json

# Comment data includes:
# - Author name
# - Comment text
# - Like count
# - Publish time
# - Reply count

Output Formats

All commands default to JSON output, save to file with --output parameter.

bash
# Output to file
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "Python" \
    --output results.json

# CSV format (tabular data)
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "Python" \
    --format csv \
    --output results.csv

# Simple output (titles and IDs only)
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "Python" \
    --format simple

Pagination

For large datasets, API uses pageToken for pagination:

bash
# Auto-fetch all pages
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "Python" \
    --all-pages \
    --max-total 500 \
    --output all_results.json

# Manual pagination
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py search \
    --query "Python" \
    --page-token "NEXT_PAGE_TOKEN"

Error Handling

Common Error Codes

CodeDescriptionSolution
400Bad requestCheck parameter format
401UnauthorizedCheck API Key
403Quota exceeded or insufficient permissionsCheck quota or request increase
404Resource not foundVerify ID is correct
429Too many requestsReduce request frequency

Quota Optimization Tips

  1. Use fields parameter to request only needed fields
  2. Batch requests using comma-separated ID lists
  3. Cache results to avoid duplicate requests
  4. Use ETags to check if resource has been updated
bash
# Only get needed fields (reduces response size)
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py video \
    --id "VIDEO_ID" \
    --fields "items(id,snippet(title,channelTitle),statistics(viewCount))"

Operations Requiring OAuth

The following operations require user authorization (API Key alone is not sufficient):

  • Upload videos
  • Update video metadata
  • Delete videos
  • Manage playlists
  • Post/delete comments
  • Download captions
  • Access user private data

For these operations, configure OAuth 2.0 client:

bash
# Setup OAuth (first time use)
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py auth \
    --client-secrets client_secrets.json

Installing Dependencies

bash
# Install Python dependencies
pip install google-api-python-client google-auth-oauthlib

# Optional: Install yt-dlp (for subtitle downloading)
pip install yt-dlp

Quick Check

bash
# Check if API key is valid
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py test

# Check quota usage
python ~/.claude/skills/youtube-data-api/scripts/youtube_api.py quota

References