From sundial-org-awesome-openclaw-skills-4
Analyzes YouTube channels, videos, and search results using Data API v3. Fetches stats, views, subscribers, engagement metrics, comparisons, and trends. Requires API key.
npx claudepluginhub joshuarweaver/cascade-ai-ml-agents-misc-2 --plugin sundial-org-awesome-openclaw-skills-4This skill uses the workspace's default tool permissions.
Install dependencies:
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Install dependencies:
cd scripts && npm install
Configure credentials by creating a .env file in the project root:
YOUTUBE_API_KEY=AIzaSy...your-api-key
YOUTUBE_DEFAULT_MAX_RESULTS=50
Prerequisites: A Google Cloud project with the YouTube Data API v3 enabled. Get your API key from the Google Cloud Console.
| User says | Function to call |
|---|---|
| "Analyze this YouTube channel" | analyzeChannel(channelId) |
| "Compare these two channels" | compareChannels([id1, id2]) |
| "How is this video performing?" | analyzeVideo(videoId) |
| "Search YouTube for [topic]" | searchAndAnalyze(query) |
| "Get stats for this channel" | getChannelStats(channelId) |
| "Get this video's view count" | getVideoStats(videoId) |
| "Find channels about [topic]" | searchChannels(query) |
| "Show recent uploads from this channel" | getChannelVideos(channelId) |
Execute functions by importing from scripts/src/index.ts:
import { analyzeChannel, searchAndAnalyze } from './scripts/src/index.js';
const analysis = await analyzeChannel('UCxxxxxxxx');
Or run directly with tsx:
npx tsx scripts/src/index.ts
Every analysis follows three phases:
Run API functions. Each call hits the YouTube Data API and returns structured data.
All results automatically save as JSON files to results/{category}/. File naming patterns:
{sanitized_name}.jsonYYYYMMDD_HHMMSS__{operation}.jsonAfter analysis, read the saved JSON files and create a markdown summary in results/summaries/ with data tables, comparisons, and insights.
| Function | Purpose | What it gathers |
|---|---|---|
analyzeChannel(channelId) | Full channel analysis | Channel info, recent videos, avg views per video |
compareChannels(channelIds) | Compare multiple channels | Side-by-side subscribers, views, video counts |
analyzeVideo(videoId) | Video performance analysis | Views, likes, comments, like rate, comment rate |
searchAndAnalyze(query, maxResults?) | Search + stats | Search results with full video statistics |
For granular control, import specific functions from the API modules. See references/api-reference.md for the complete list of 13 API functions with parameters, types, and examples.
| Function | Purpose |
|---|---|
getChannel(channelId) | Get full channel details |
getChannelStats(channelId) | Get simplified stats (subscribers, views, videoCount) |
getMultipleChannels(channelIds) | Batch fetch multiple channels |
| Function | Purpose |
|---|---|
getVideo(videoId) | Get full video details |
getVideoStats(videoId) | Get simplified stats (views, likes, comments) |
getMultipleVideos(videoIds) | Batch fetch multiple videos |
getChannelVideos(channelId) | Get recent uploads from a channel |
| Function | Purpose |
|---|---|
searchVideos(query, options?) | Search for videos |
searchChannels(query, options?) | Search for channels |
Results auto-save to results/ with this structure:
results/
├── channels/ # Channel data and comparisons
├── videos/ # Video data and analyses
├── search/ # Search results
└── summaries/ # Human-readable markdown summaries
import { listResults, loadResult, getLatestResult } from './scripts/src/index.js';
// List recent results
const files = listResults('channels', 10);
// Load a specific result
const data = loadResult(files[0]);
// Get most recent result for an operation
const latest = getLatestResult('channels', 'channel_analysis');
UC (e.g., UCxxxxxxxx). You can find them in the channel URL or page source.compareChannels() to benchmark competitors side by side.getMultipleChannels() or getMultipleVideos() for efficient batch lookups.searchAndAnalyze() combines search with full video stats in one call.