YouTube 视频元数据(标题、观看次数、点赞次数、描述、标签、频道名称和上传日期)对于内容分析、影响者研究和竞争基准测试非常有价值。 YouTube 数据 API v3 施加了严格的每日配额,限制了大规模分析。 Scavio YouTube 元数据端点按视频 ID 返回丰富的视频元数据,无需担心 YouTube API 配额问题。本教程演示如何有效地获取单个视频的元数据并批量进行多个查找。
前置条件
- Python 3.8 或更高版本
- 请求已安装库
- Scavio API 密钥
- 要查找的一个或多个 YouTube 视频 ID
操作指南
步骤 1: 获取单个视频的元数据
使用平台 youtube、操作元数据和 video_id POST 到 Scavio 端点。
def get_video_metadata(video_id: str) -> dict:
response = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "youtube", "action": "metadata", "video_id": video_id}
)
response.raise_for_status()
return response.json()步骤 2: 提取关键字段
解析元数据响应以提取标题、观看次数、点赞次数和频道信息。
meta = get_video_metadata("dQw4w9WgXcQ")
video = meta.get("video", {})
print("Title:", video.get("title"))
print("Views:", video.get("view_count"))
print("Likes:", video.get("like_count"))
print("Channel:", video.get("channel_name"))
print("Published:", video.get("published_at"))步骤 3: 批量获取多个视频
循环播放视频 ID 列表并收集每个 ID 的元数据。使用 time.sleep 保持在速率限制内。
import time
def batch_metadata(video_ids: list[str]) -> list[dict]:
results = []
for vid_id in video_ids:
meta = get_video_metadata(vid_id)
results.append(meta.get("video", {}))
time.sleep(0.5) # polite rate limiting
return results步骤 4: 按观看次数对视频进行排序
按观看次数对获取的视频进行排名,以确定最受欢迎的内容。
videos = batch_metadata(["dQw4w9WgXcQ", "9bZkp7q19f0", "kJQP7kiw5Fk"])
sorted_videos = sorted(videos, key=lambda v: int(v.get("view_count", 0) or 0), reverse=True)
for v in sorted_videos:
print(f"{v.get('title', 'N/A')[:50]}: {v.get('view_count')} views")Python 示例
import os
import time
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def get_metadata(video_id: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"platform": "youtube", "action": "metadata", "video_id": video_id})
r.raise_for_status()
return r.json().get("video", {})
def batch(ids: list[str]) -> list[dict]:
results = []
for vid in ids:
results.append(get_metadata(vid))
time.sleep(0.3)
return results
if __name__ == "__main__":
ids = ["dQw4w9WgXcQ", "9bZkp7q19f0"]
videos = batch(ids)
for v in sorted(videos, key=lambda x: int(x.get("view_count") or 0), reverse=True):
print(f"{v.get('title', 'N/A')[:60]}: {v.get('view_count')} views")JavaScript 示例
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
async function getMetadata(videoId) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform: "youtube", action: "metadata", video_id: videoId })
});
const data = await res.json();
return data.video || {};
}
async function main() {
const ids = ["dQw4w9WgXcQ", "9bZkp7q19f0"];
const videos = await Promise.all(ids.map(getMetadata));
videos.sort((a, b) => (parseInt(b.view_count) || 0) - (parseInt(a.view_count) || 0));
videos.forEach(v => console.log(`${v.title?.slice(0, 60)}: ${v.view_count} views`));
}
main().catch(console.error);预期输出
{
"video": {
"video_id": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video)",
"channel_name": "Rick Astley",
"channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw",
"view_count": "1547823901",
"like_count": "17200000",
"published_at": "2009-10-25",
"duration": "PT3M33S",
"description": "The official video for Rick Astley's Never Gonna Give You Up..."
}
}