You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为YouTube抓取脚本添加日期间隔过滤及ID转URL功能

具体修改方案

1. 新增日期范围筛选功能

修改位置:原脚本中调用YouTube.Search.list的参数配置部分
YouTube Data API的搜索接口支持publishedAfter(发布起始时间)和publishedBefore(发布结束时间)两个参数,要求时间格式为ISO 8601格式(示例:2024-09-19T00:00:00Z代表2024年9月19日0点,末尾Z代表UTC时间),直接添加到搜索参数里即可。
你可以把关键词、时间范围、返回结果数都单独提为变量放在函数开头,后续修改不需要翻代码逻辑。

2. 新增ID转URL功能

修改位置:原脚本中search.items.map生成初始results数组的部分

  • 视频URL固定格式:https://www.youtube.com/watch?v= + 视频ID
  • 频道URL固定格式:https://www.youtube.com/channel/ + 频道ID
    如果需要在谷歌表格里生成可直接点击的链接,可以用表格内置的HYPERLINK函数拼接。

修改后完整代码

function YoutubeScraper() {
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet()
  var activeSheet = spreadSheet.getActiveSheet();

  // -------------------------- 可自定义配置项 --------------------------
  const KEYWORD = "Gang Beasts" // 搜索关键词
  const MAX_RESULTS = 10 // 最多返回结果数
  const PUBLISH_AFTER = "2024-09-19T00:00:00Z" // 搜索起始时间(ISO格式)
  const PUBLISH_BEFORE = "2024-10-04T23:59:59Z" // 搜索结束时间(ISO格式)
  // -------------------------------------------------------------------

  // 搜索接口新增时间范围参数
  var search = YouTube.Search.list("snippet", { 
    q: KEYWORD, 
    maxResults: MAX_RESULTS,
    publishedAfter: PUBLISH_AFTER,
    publishedBefore: PUBLISH_BEFORE
  });
  // 新增频道URL、视频URL字段,当前配置为表格可点击链接,不需要可改为普通字符串拼接
  var results = search.items.map((item) => [
    item.snippet.channelId, 
    `=HYPERLINK("https://www.youtube.com/channel/${item.snippet.channelId}","频道链接")`,
    item.id.videoId, 
    `=HYPERLINK("https://www.youtube.com/watch?v=${item.id.videoId}","视频链接")`,
    item.snippet.title, 
    item.snippet.publishedAt
  ]);
  
  // 适配新的数组结构,提取频道、视频ID,逻辑不变
  var {channelIds, videoIds} = results.reduce((o, [channelId, _, videoId]) => {
    o.channelIds.push(channelId);
    o.videoIds.push(videoId);
    return o;
  }, {channelIds: [], videoIds: []});

  // 以下原有逻辑不变
  var videoList = YouTube.Videos.list("statistics", {id: videoIds.join(",")});
  var videoStats = videoList.items.map((item) => [item.id, item.statistics.viewCount, item.statistics.likeCount, item.statistics.dislikeCount]).reduce((o, [id, ...v]) => Object.assign(o, {[id]: v}), {});

  var channelList = YouTube.Channels.list("statistics", { id: channelIds.join(",") });
  var channelStats = channelList.items.map((item) => [item.id, item.statistics.subscriberCount]).reduce((o, [id, ...v]) => Object.assign(o, {[id]: v}), {});

  results = results.map(e => channelStats[e[0]] ? e.concat(channelStats[e[0]]) : e.concat(Array(2).fill("")));
  results = results.map(e => videoStats[e[2]] ? e.concat(videoStats[e[2]]) : e.concat(Array(3).fill("")));
  activeSheet.getRange(2, 1, results.length, results[0].length).setValues(results);
}

内容的提问来源于stack exchange,提问作者Matt Clements

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:45:00