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

无需遍历播放列表,能否用YouTube API查询视频是否在指定列表中?

如何通过YouTube API直接查询视频是否在指定播放列表中

问题描述

我有一个YouTube视频数组,想要确认这些视频是否已存在于某个指定播放列表里。目前使用的代码能正常运行,但每次都需要拉取目标播放列表的所有视频并遍历,当播放列表较长时效率特别低下。想咨询:是否可以通过YouTube API直接查询「视频X是否在播放列表Y中」,无需获取整个播放列表再遍历所有视频?

当前使用的代码

var targetPlaylistId = "some_playlist_id";
var targetPlaylist = YouTube.Playlists.list("snippet", {id: targetPlaylistId});
var targetPlaylistTitle = targetPlaylist.items[0].snippet.title

var targetVideos = YouTube.PlaylistItems.list("snippet", {playlistId: targetPlaylistId, maxResults: 50});

for (var i = 0; i < sourceVideos.length; i++) {
  var sourceVideoId = sourceVideos[i].snippet.resourceId.videoId;
  var sourceVideoTitle = sourceVideos[i].snippet.title
  var isAlreadyAdded = false;

  for (var j = 0; j < targetVideos.items.length; j++) {
    var targetVideoId = targetVideos.items[j].snippet.resourceId.videoId;

    if (sourceVideoId == targetVideoId) {
      isAlreadyAdded = true;
      break;
    }
  }

  if (!isAlreadyAdded) {
    var resource = {
      snippet: {
        playlistId: targetPlaylistId,
        resourceId: {
          kind: "youtube#video",
          videoId: sourceVideoId
        }
     }
    };
    YouTube.PlaylistItems.insert(resource, "snippet");
    Logger.log("Added video " + sourceVideoTitle + " with ID " + sourceVideoId + " to playlist " + targetPlaylistTitle);
  }
}

解决方案

可以直接通过YouTube Data API的PlaylistItems.list接口,结合playlistId和videoId参数实现精准查询,无需拉取整个播放列表的内容。

核心思路

调用PlaylistItems.list时,同时传入目标播放列表的playlistId和要检查的视频videoId:

  • 如果视频存在于该播放列表,接口会返回对应的播放列表条目(只需请求id字段即可,减少数据传输)
  • 如果返回结果为空数组,说明视频不在播放列表中,执行添加操作

优化后的代码示例

var targetPlaylistId = "some_playlist_id";
var targetPlaylist = YouTube.Playlists.list("snippet", {id: targetPlaylistId});
var targetPlaylistTitle = targetPlaylist.items[0].snippet.title;

for (var i = 0; i < sourceVideos.length; i++) {
  var sourceVideoId = sourceVideos[i].snippet.resourceId.videoId;
  var sourceVideoTitle = sourceVideos[i].snippet.title;
  
  // 直接查询视频是否在目标播放列表中
  var existingEntry = YouTube.PlaylistItems.list("id", {
    playlistId: targetPlaylistId,
    videoId: sourceVideoId,
    maxResults: 1 // 仅需判断存在性,限制返回1条结果即可
  });
  
  if (existingEntry.items.length === 0) {
    // 视频未在播放列表中,执行添加
    var resource = {
      snippet: {
        playlistId: targetPlaylistId,
        resourceId: {
          kind: "youtube#video",
          videoId: sourceVideoId
        }
      }
    };
    YouTube.PlaylistItems.insert(resource, "snippet");
    Logger.log("Added video " + sourceVideoTitle + " with ID " + sourceVideoId + " to playlist " + targetPlaylistTitle);
  }
}

注意事项

  • 效率提升:当目标播放列表条目较多时,这种方式避免了拉取大量无关数据和本地遍历,效率提升明显。
  • API配额权衡:每个PlaylistItems.list查询会消耗1个API配额单位。如果源视频数量远大于播放列表的条目数,原方式(拉取一次播放列表再遍历)会更节省配额;反之,优化后的方式在效率上更有优势。根据实际场景选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:05:40