Google Apps Script获取YouTube订阅新视频邮件报错求助
问题排查与修复方案
1. 语法错误直接解决
你代码第一行的module { }是Node.js的模块语法,但Google Apps Script不支持这种写法,这就是导致SyntaxError: Unexpected token '{'的直接原因——直接删除这行和对应的闭合}即可解决语法问题。
2. 功能层面的关键修复
除了语法错误,你的代码还有几个会导致功能失效的问题,一并修正:
(1)获取订阅列表必须加mine: true
调用YouTube.subscriptions.list时,必须指定mine: true才能获取当前授权用户的订阅列表,否则会返回空结果:
var subscriptions = YouTube.subscriptions.list("snippet", { mine: true });
(2)频道ID取值错误
subscription.id是订阅项的ID,不是频道ID,正确的频道ID应该从subscription.snippet.resourceId.channelId获取:
var channelId = subscription.snippet.resourceId.channelId;
(3)当日视频时间范围逻辑错误
new Date().toISOString()取的是当前时间,会漏掉当日凌晨到现在的视频,应该重置到当日零点:
var startOfDay = new Date(); startOfDay.setHours(0, 0, 0, 0); // 定位到当日0点0分0秒
(4)邮件需启用HTML渲染
你用HTML标签构建了邮件内容,但MailApp.sendEmail的body参数是纯文本,必须改用htmlBody才能正确渲染格式:
MailApp.sendEmail({ to: "your@email.com", subject: "你的每日YouTube更新", htmlBody: body });
修复后的完整代码
function sendDailyEmail() { // 设定当日零点,用于筛选当日发布的视频 var startOfDay = new Date(); startOfDay.setHours(0, 0, 0, 0); // 获取当前用户的YouTube订阅列表 var subscriptions = YouTube.subscriptions.list("snippet", { mine: true }); // 收集所有订阅频道的当日新视频 var newVideos = []; for (var i = 0; i < subscriptions.items.length; i++) { var subscription = subscriptions.items[i]; var channelId = subscription.snippet.resourceId.channelId; var newVideosForSubscription = YouTube.videos.list("snippet", { part: "snippet", channelId: channelId, publishedAfter: startOfDay.toISOString(), order: "date" // 按发布时间排序,确保优先显示最新视频 }); newVideosForSubscription.items.forEach(function(video) { newVideos.push(video); }); } // 构建HTML格式的邮件内容 var body = ""; if (newVideos.length === 0) { body = "<p>今日没有订阅频道发布新视频哦~</p>"; } else { newVideos.forEach(function(video) { body += `<h3>${video.snippet.title}</h3>`; body += `<p>${video.snippet.description}</p>`; body += `<img src="${video.snippet.thumbnails.medium.url}" alt="视频缩略图"><br><br>`; }); } // 发送邮件 MailApp.sendEmail({ to: "your@email.com", subject: "你的每日YouTube更新", htmlBody: body }); }
额外注意事项
- 必须在Google Apps Script编辑器中启用YouTube Data API v3:点击左侧「服务」→ 添加服务 → 选择YouTube Data API v3。
- 首次运行脚本时需要完成权限授权,按照页面提示操作即可。
内容的提问来源于stack exchange,提问作者HenriDo
相关产品推荐
相关产品推荐

