借助 YouTube 数据分析服务,您可以在 Apps 脚本中使用 YouTube Analytics API。此 API 可让用户检索 YouTube 视频和频道的观看统计信息、热门程度指标以及受众特征信息。
参考
示例代码
以下示例代码使用了 YouTube Analytics API 第 2 版和 YouTube Data API 第 3 版(您可以通过 Apps 脚本中的 YouTube 服务进行访问)。
如需报告问题和寻求其他支持,请参阅 YouTube API 支持指南。
创建报告
此函数会创建一个电子表格,其中包含频道视频的每日观看次数、观看时长指标和新订阅者人数。
advanced/youtubeAnalytics.gs
/**
* Creates a spreadsheet containing daily view counts, watch-time metrics,
* and new-subscriber counts for a channel's videos.
*/
function createReport() {
// Retrieve info about the user's YouTube channel.
const channels = YouTube.Channels.list('id,contentDetails', {
mine: true
});
const channelId = channels.items[0].id;
// Retrieve analytics report for the channel.
const oneMonthInMillis = 1000 * 60 * 60 * 24 * 30;
const today = new Date();
const lastMonth = new Date(today.getTime() - oneMonthInMillis);
const metrics = [
'views',
'estimatedMinutesWatched',
'averageViewDuration',
'subscribersGained'
];
const result = YouTubeAnalytics.Reports.query({
ids: 'channel==' + channelId,
startDate: formatDateString(lastMonth),
endDate: formatDateString(today),
metrics: metrics.join(','),
dimensions: 'day',
sort: 'day'
});
if (!result.rows) {
console.log('No rows returned.');
return;
}
const spreadsheet = SpreadsheetApp.create('YouTube Analytics Report');
const sheet = spreadsheet.getActiveSheet();
// Append the headers.
const headers = result.columnHeaders.map((columnHeader)=> {
return formatColumnName(columnHeader.name);
});
sheet.appendRow(headers);
// Append the results.
sheet.getRange(2, 1, result.rows.length, headers.length)
.setValues(result.rows);
console.log('Report spreadsheet created: %s',
spreadsheet.getUrl());
}
/**
* Converts a Date object into a YYYY-MM-DD string.
* @param {Date} date The date to convert to a string.
* @return {string} The formatted date.
*/
function formatDateString(date) {
return Utilities.formatDate(date, Session.getScriptTimeZone(), 'yyyy-MM-dd');
}
/**
* Formats a column name into a more human-friendly name.
* @param {string} columnName The unprocessed name of the column.
* @return {string} The formatted column name.
* @example "averageViewPercentage" becomes "Average View Percentage".
*/
function formatColumnName(columnName) {
let name = columnName.replace(/([a-z])([A-Z])/g, '$1 $2');
name = name.slice(0, 1).toUpperCase() + name.slice(1);
return name;
}

