如何通过YouTube Analytics API获取分渠道分日的详细观看时长数据
获取YouTube分频道日观看时长数据的解决方案
当前代码仅能获取自身频道的基础日维度分析数据,无法按分频道+日维度拆分观看时长。以下是调整方案:
现有代码
async function getYouTubeAnalyticsData(result: GoogleTokensResult) { const params = { dimensions: "day", startDate: "2023-07-01", endDate: "2023-08-02", ids: "channel==MINE", metrics: "views,estimatedMinutesWatched,averageViewDuration,averageViewPercentage" }; const searchParams = new URLSearchParams(params); const response = await fetch(`https://youtubeanalytics.googleapis.com/v2/reports?${searchParams}`, { headers: { Authorization: `Bearer ${result.access_token}` } }); return response.json(); }
当前返回结构
{ "columnHeaders": [ {"name": "day", "columnType": "DIMENSION", "dataType": "STRING"}, {"name": "channel", "columnType": "DIMENSION", "dataType": "STRING"}, {"name": "views", "columnType": "METRIC", "dataType": "INTEGER"}, {"name": "estimatedMinutesWatched", "columnType": "METRIC", "dataType": "INTEGER"}, {"name": "averageViewDuration", "columnType": "METRIC", "dataType": "INTEGER"}, {"name": "averageViewPercentage", "columnType": "METRIC", "dataType": "FLOAT"} ], "kind": "youtubeAnalytics#resultTable", "rows": [ ["2023-07-01", "CHANNEL_ID", 27, 39, 87, 11.95], [...] ] }
需求示例
期望获取精细化数据:
- 第1天,用户在A频道观看了100秒,在B频道观看了200秒
- 第2天,用户在C频道观看了300秒,在D频道观看了400秒
解决方案
1. 调整API请求参数
要获取分频道的日维度数据,需修改dimensions参数为day,channel,同时根据账号类型调整ids参数:
- 内容所有者账号:使用
contentOwner==OWNER_ID可访问旗下所有频道数据 - 普通用户账号:仅能使用
channel==MINE获取自身频道数据
修改后的参数示例:
const params = { dimensions: "day,channel", // 新增channel维度实现按频道拆分 startDate: "2023-07-01", endDate: "2023-08-02", ids: "contentOwner==YOUR_OWNER_ID", // 替换为实际内容所有者ID metrics: "estimatedMinutesWatched" // 仅保留观看时长指标,按需添加其他指标 };
2. 格式化返回数据
将API返回的原始数据转换为直观的按天分组结构:
async function getFormattedYouTubeAnalytics(result: GoogleTokensResult) { const params = { dimensions: "day,channel", startDate: "2023-07-01", endDate: "2023-08-02", ids: "contentOwner==YOUR_OWNER_ID", metrics: "estimatedMinutesWatched" }; const searchParams = new URLSearchParams(params); const response = await fetch(`https://youtubeanalytics.googleapis.com/v2/reports?${searchParams}`, { headers: { Authorization: `Bearer ${result.access_token}` } }); const rawData = await response.json(); // 转换为按天分组的结构,将分钟转为秒 const formattedData: Record<string, Record<string, number>> = {}; rawData.rows.forEach(row => { const [day, channelId, minutesWatched] = row; const secondsWatched = minutesWatched * 60; if (!formattedData[day]) { formattedData[day] = {}; } formattedData[day][channelId] = secondsWatched; }); return formattedData; }
转换后输出示例
{ "2023-07-01": { "CHANNEL_A": 100, "CHANNEL_B": 200 }, "2023-07-02": { "CHANNEL_C": 300, "CHANNEL_D": 400 } }
注意事项
- 普通用户账号无法获取其他频道的观看数据,需使用内容所有者账号并配置对应权限
estimatedMinutesWatched为估算分钟数,需乘以60转换为秒- 确保授权范围包含
https://www.googleapis.com/auth/youtube.analytics.readonly
内容的提问来源于stack exchange,提问作者Avi
相关产品推荐
相关产品推荐

