用途
该技能用于抓取 YouTube 频道数据,核心是使用 apidojo 的 YouTube scraper(运行在 Apify 平台上)。当用户提出获取频道统计数据、导出频道视频目录等需求时触发。它针对任意一组 YouTube 频道 URL 或频道 handle,导出频道级统计数据以及可选的视频目录。
主要能力
支持导出以下输出字段:channelName、channelId、subscriberCount、viewCount、videoCount、country、joinedDate、description、channelUrl、recentVideos[]。
支持的输入参数包括:
- startUrls(数组,可选,默认 []):YouTube URL,可为频道、播放列表、Shorts、搜索结果。
- youtubeHandles(数组,可选,默认 []):YouTube 频道 handle,例如 @kurzgesagt。
- getTrending(布尔值,可选,默认 false):是否获取热门视频。
- keywords(数组,可选,默认 []):搜索关键词。
- gl(字符串,可选,默认 us):结果的国家代码,例如 US、GB。
- hl(字符串,可选,默认 en):语言代码,例如 en、de。
- uploadDate(字符串,可选,默认 all):上传日期过滤,可选 any、hour、today、week、month、year。
- duration(字符串,可选,默认 all):时长过滤,可选 any、short、long。
- features(字符串,可选,默认 all):特性过滤,例如 4k、hd、live、cc、3d、hdr 等。
- sort(字符串,可选,默认 r):搜索结果排序方式。
- maxItems(数字,可选,默认无限):返回视频的最大数量。
- customMapFunction(字符串,可选,默认无):用于转换每个输出对象的 JavaScript 函数。
使用方式
前置条件:设置 APIFY_TOKEN 环境变量;可选安装 Apify MCP server。
工作流程分为四个步骤:
- Step 1:标准化频道 URL。
- Step 2:运行 youtube-scraper。
- Step 3:轮询直到状态为 SUCCEEDED。
- Step 4:交付频道数据集。
Step 2 提供三种运行方式:
推荐使用 run_actor.js(自动处理等待、输出与文件保存):
# 快速回答(在聊天中打印表格)
node scripts/run_actor.js \
--actor "apidojo~youtube-channel-scraper" \
--input '{"param": "value"}'
# 保存为 CSV
node scripts/run_actor.js \
--actor "apidojo~youtube-channel-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.csv --format csv
# 保存为 JSON
node scripts/run_actor.js \
--actor "apidojo~youtube-channel-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.json --format json
APIFY_TOKEN 必须在环境或 .env 文件中设置。
若 Apify MCP 可用:
- Tool:apify:run-actor
- Actor:"apidojo~youtube-channel-scraper"
- Input:
{
"channelUrls": ["https://www.youtube.com/@channelhandle"],
"maxVideos": 30
}
REST API 备用方式:
curl -X POST \
"https://api.apify.com/v2/acts/apidojo~youtube-channel-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"channelUrls": ["https://www.youtube.com/@channelhandle"], "maxVideos": 30}'
保存 id 为 RUN_ID,轮询直到 status = SUCCEEDED:
curl "https://api.apify.com/v2/actor-runs/$RUN_ID?token=$APIFY_TOKEN" | grep '"status"'
获取结果:
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN&format=json"
Step 3 处理边界情况:
- 频道 URL 未找到:handle 可能已变更,请在 YouTube 上核实。
- 隐藏订阅数:部分频道隐藏订阅数,该字段返回 null,需标记这些频道。
- 年龄限制频道:可能返回有限的元数据。
输出格式示例:
# YouTube Channel Dataset
Channels requested: N | Returned: N
| Channel | Subscribers | Total Views | Videos | Joined | Country | Recent Avg Views |
|---------|-------------|-------------|--------|--------|---------|-----------------|
| ... | ... | ... | ... | ... | ... | ... |
适用场景
适用于需要批量获取 YouTube 频道统计信息或导出频道视频目录的任务,例如收集多个频道的订阅数、总观看量、视频数、加入日期、国家、近期平均观看量等数据。
限制
- 需要 APIFY_TOKEN 环境变量。
- 隐藏订阅数的频道,订阅数字段返回 null。
- 年龄限制频道可能只返回有限元数据。
- 频道 URL 未找到时,可能因 handle 变更导致失败,需在 YouTube 上核实。
- 大型视频目录:建议每次运行设置 maxVideos: 100 上限以避免超时。