Initial commit with translated description
This commit is contained in:
209
SKILL.md
Normal file
209
SKILL.md
Normal file
@@ -0,0 +1,209 @@
|
||||
---
|
||||
name: youtube-full
|
||||
description: "完整的YouTube工具包——转录、搜索、频道、播放列表和元数据。"
|
||||
homepage: https://transcriptapi.com
|
||||
user-invocable: true
|
||||
metadata: {"openclaw":{"emoji":"🎯","requires":{"env":["TRANSCRIPT_API_KEY"],"bins":["node"],"config":["~/.openclaw/openclaw.json"]},"primaryEnv":"TRANSCRIPT_API_KEY"}}
|
||||
---
|
||||
|
||||
# YouTube Full
|
||||
|
||||
Complete YouTube toolkit via [TranscriptAPI.com](https://transcriptapi.com). Everything in one skill.
|
||||
|
||||
## Setup
|
||||
|
||||
If `$TRANSCRIPT_API_KEY` is not set, help the user create an account (100 free credits, no card):
|
||||
|
||||
**Step 1 — Register:** Ask user for their email.
|
||||
|
||||
```bash
|
||||
node ./scripts/tapi-auth.js register --email USER_EMAIL
|
||||
```
|
||||
|
||||
→ OTP sent to email. Ask user: _"Check your email for a 6-digit verification code."_
|
||||
|
||||
**Step 2 — Verify:** Once user provides the OTP:
|
||||
|
||||
```bash
|
||||
node ./scripts/tapi-auth.js verify --token TOKEN_FROM_STEP_1 --otp CODE
|
||||
```
|
||||
|
||||
> API key saved to `~/.openclaw/openclaw.json`. See **File Writes** below for details. Existing file is backed up before modification.
|
||||
|
||||
Manual option: [transcriptapi.com/signup](https://transcriptapi.com/signup) → Dashboard → API Keys.
|
||||
|
||||
## File Writes
|
||||
|
||||
The verify and save-key commands save the API key to `~/.openclaw/openclaw.json` (sets `skills.entries.transcriptapi.apiKey` and `enabled: true`). **Existing file is backed up to `~/.openclaw/openclaw.json.bak` before modification.**
|
||||
|
||||
To use the API key in terminal/CLI outside the agent, add to your shell profile manually:
|
||||
`export TRANSCRIPT_API_KEY=<your-key>`
|
||||
|
||||
## API Reference
|
||||
|
||||
Full OpenAPI spec: [transcriptapi.com/openapi.json](https://transcriptapi.com/openapi.json) — consult this for the latest parameters and schemas.
|
||||
|
||||
## Transcript — 1 credit
|
||||
|
||||
```bash
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
|
||||
?video_url=VIDEO_URL&format=text&include_timestamp=true&send_metadata=true" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
```
|
||||
|
||||
| Param | Required | Default | Values |
|
||||
| ------------------- | -------- | ------- | ------------------------------- |
|
||||
| `video_url` | yes | — | YouTube URL or 11-char video ID |
|
||||
| `format` | no | `json` | `json`, `text` |
|
||||
| `include_timestamp` | no | `true` | `true`, `false` |
|
||||
| `send_metadata` | no | `false` | `true`, `false` |
|
||||
|
||||
**Response** (`format=json`):
|
||||
|
||||
```json
|
||||
{
|
||||
"video_id": "dQw4w9WgXcQ",
|
||||
"language": "en",
|
||||
"transcript": [{ "text": "...", "start": 18.0, "duration": 3.5 }],
|
||||
"metadata": { "title": "...", "author_name": "...", "author_url": "..." }
|
||||
}
|
||||
```
|
||||
|
||||
## Search — 1 credit
|
||||
|
||||
```bash
|
||||
# Videos
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
|
||||
# Channels
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=channel&limit=10" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
```
|
||||
|
||||
| Param | Required | Default | Validation |
|
||||
| ------- | -------- | ------- | ------------------ |
|
||||
| `q` | yes | — | 1-200 chars |
|
||||
| `type` | no | `video` | `video`, `channel` |
|
||||
| `limit` | no | `20` | 1-50 |
|
||||
|
||||
## Channels
|
||||
|
||||
All channel endpoints accept `channel` — an `@handle`, channel URL, or `UC...` channel ID. No need to resolve first.
|
||||
|
||||
### Resolve handle — FREE
|
||||
|
||||
```bash
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
```
|
||||
|
||||
Response: `{"channel_id": "UC...", "resolved_from": "@TED"}`
|
||||
|
||||
### Latest 15 videos — FREE
|
||||
|
||||
```bash
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
```
|
||||
|
||||
Returns exact `viewCount` and ISO `published` timestamps.
|
||||
|
||||
### All channel videos — 1 credit/page
|
||||
|
||||
```bash
|
||||
# First page (100 videos)
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
|
||||
# Next pages
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?continuation=TOKEN" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
```
|
||||
|
||||
Provide exactly one of `channel` or `continuation`. Response includes `continuation_token` and `has_more`.
|
||||
|
||||
### Search within channel — 1 credit
|
||||
|
||||
```bash
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/channel/search\
|
||||
?channel=@TED&q=QUERY&limit=30" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
```
|
||||
|
||||
## Playlists — 1 credit/page
|
||||
|
||||
Accepts `playlist` — a YouTube playlist URL or playlist ID.
|
||||
|
||||
```bash
|
||||
# First page
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_ID" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
|
||||
# Next pages
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/playlist/videos?continuation=TOKEN" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
```
|
||||
|
||||
Valid ID prefixes: `PL`, `UU`, `LL`, `FL`, `OL`. Response includes `playlist_info`, `results`, `continuation_token`, `has_more`.
|
||||
|
||||
## Credit Costs
|
||||
|
||||
| Endpoint | Cost |
|
||||
| --------------- | -------- |
|
||||
| transcript | 1 |
|
||||
| search | 1 |
|
||||
| channel/resolve | **free** |
|
||||
| channel/latest | **free** |
|
||||
| channel/videos | 1/page |
|
||||
| channel/search | 1 |
|
||||
| playlist/videos | 1/page |
|
||||
|
||||
## Validation Rules
|
||||
|
||||
| Field | Rule |
|
||||
| ---------- | ------------------------------------------------------- |
|
||||
| `channel` | `@handle`, channel URL, or `UC...` ID |
|
||||
| `playlist` | Playlist URL or ID (`PL`/`UU`/`LL`/`FL`/`OL` prefix) |
|
||||
| `q` | 1-200 chars |
|
||||
| `limit` | 1-50 |
|
||||
|
||||
## Errors
|
||||
|
||||
| Code | Meaning | Action |
|
||||
| ---- | ---------------- | ------------------------------------- |
|
||||
| 401 | Bad API key | Check key |
|
||||
| 402 | No credits | transcriptapi.com/billing |
|
||||
| 404 | Not found | Resource doesn't exist or no captions |
|
||||
| 408 | Timeout | Retry once after 2s |
|
||||
| 422 | Validation error | Check param format |
|
||||
| 429 | Rate limited | Wait, respect Retry-After |
|
||||
|
||||
## Typical Workflows
|
||||
|
||||
**Research workflow:** search → pick videos → fetch transcripts
|
||||
|
||||
```bash
|
||||
# 1. Search
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/search\
|
||||
?q=machine+learning+explained&limit=5" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
# 2. Transcript
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
|
||||
?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
```
|
||||
|
||||
**Channel monitoring:** latest (free) → transcript
|
||||
|
||||
```bash
|
||||
# 1. Latest uploads (free — pass @handle directly)
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
# 2. Transcript of latest
|
||||
curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
|
||||
?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true" \
|
||||
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
|
||||
```
|
||||
|
||||
Free tier: 100 credits, 300 req/min. Starter ($5/mo): 1,000 credits.
|
||||
Reference in New Issue
Block a user