使用AppScript与YouTube Data API v3获取频道视频遇索引问题
解决YouTube Data API无法获取频道历史视频的问题
问题原因
你当前使用的Search API并不适用于获取频道的完整视频列表——它的结果基于YouTube的搜索索引逻辑,优先返回近期、曝光度高的内容,不会包含频道所有历史视频(比如你提到的11月视频)。要获取频道全部公开上传的视频,必须通过频道专属的上传播放列表来查询。
解决方案步骤
- 调用
ChannelsAPI获取目标频道的「上传视频播放列表ID」 - 通过
PlaylistItemsAPI遍历该播放列表,按发布时间排序获取视频数据
修改后的完整脚本
var apiKey = '你的API密钥'; var channelId = 'UCAoy6rzhSf4ydcYjJw3WoVg'; function fetchRecentVideos() { // 第一步:获取频道的上传播放列表ID var channelUrl = 'https://www.googleapis.com/youtube/v3/channels'; var channelParams = { 'part': 'contentDetails', 'channelId': channelId, 'key': apiKey }; var channelResponse = UrlFetchApp.fetch(channelUrl + '?' + encodeParams(channelParams)); var channelResult = JSON.parse(channelResponse.getContentText()); var uploadsPlaylistId = channelResult.items[0].contentDetails.relatedPlaylists.uploads; // 第二步:从上传播放列表获取视频数据 var playlistUrl = 'https://www.googleapis.com/youtube/v3/playlistItems'; var playlistParams = { 'part': 'snippet', 'playlistId': uploadsPlaylistId, 'maxResults': 50, 'order': 'date', // 按发布时间倒序排列 'key': apiKey }; var playlistResponse = UrlFetchApp.fetch(playlistUrl + '?' + encodeParams(playlistParams)); var playlistResult = JSON.parse(playlistResponse.getContentText()); // 打印视频信息 for (var i = 0; i < playlistResult.items.length; i++) { var video = playlistResult.items[i].snippet; Logger.log('视频标题:'+ video.title); Logger.log('发布时间:'+ video.publishedAt); Logger.log('--------------------'); } // 如果需要获取更早的视频(比如11月的),可以处理分页 // if (playlistResult.nextPageToken) { // playlistParams.pageToken = playlistResult.nextPageToken; // // 再次调用API获取下一页数据 // } } function encodeParams(params) { return Object.keys(params) .map(function (key) { return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]); }) .join('&'); }
关键说明
- 上传播放列表:每个YouTube频道都有一个自动维护的「上传视频」播放列表,里面包含该频道所有公开上传的视频,通过
ChannelsAPI的contentDetails.relatedPlaylists.uploads字段可以获取这个列表的ID。 - 分页处理:如果要获取50条以外的更早视频(比如11月的),可以利用API返回的
nextPageToken参数,循环调用PlaylistItemsAPI,直到拿到目标时间范围内的视频。
内容的提问来源于stack exchange,提问作者Zainuz Zuha
相关产品推荐
相关产品推荐

