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

如何基于URL检测YouTube视频可播放性?解决302误判问题

检测YouTube视频可播放状态的可行方案

仅通过URL字符串本身无法直接判断视频是否可播放——YouTube的播放权限(地区限制、视频删除、私有设置等)由后端逻辑控制,URL中没有内置这类标识。针对你遇到的「不可播放视频返回302状态码」问题,可通过以下更可靠的方式检测:

1. 解析页面内容判断(低成本替代方案)

YouTube不可播放的视频通常会跳转到带有明确错误提示的页面,即使返回200状态码,页面内容也会包含特定关键词。可以修改原脚本,跟随跳转后解析页面文本:

function isVideoPlayable(url) {
  var url_trimmed = url.trim();
  var cache = CacheService.getScriptCache();
  var cachedResult = cache.get(url_trimmed);
  
  if (cachedResult !== null) {
    return cachedResult === "true";
  }

  var options = {
    'muteHttpExceptions': true,
    'followRedirects': true // 跟随跳转获取最终页面
  };
  var response = UrlFetchApp.fetch(url_trimmed, options);
  var content = response.getContentText();
  
  // 检测常见的不可播放提示关键词
  var unavailableKeywords = [
    "Video unavailable",
    "This video is no longer available",
    "This video has been removed",
    "Private video"
  ];
  var isPlayable = !unavailableKeywords.some(keyword => content.includes(keyword));

  cache.put(url_trimmed, isPlayable.toString(), 21600);
  return isPlayable;
}

注意:这种方法依赖YouTube页面的文本内容,若官方更新页面文案,需同步调整关键词列表。

2. 使用YouTube Data API(最可靠方案)

通过官方API直接查询视频的状态信息,是准确性最高的方式:

  • 先申请API密钥(Google Cloud控制台可免费获取,有每日调用配额)
  • 提取URL中的视频ID(即v=后的参数),调用videos.list接口获取视频状态
  • 依据返回的status字段判断可播放性:
function checkVideoViaAPI(videoId) {
  var apiKey = "你的API密钥";
  var apiUrl = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&part=status,contentDetails&key=${apiKey}`;
  
  var response = UrlFetchApp.fetch(apiUrl);
  var data = JSON.parse(response.getContentText());
  
  if (data.items.length === 0) {
    return false; // 视频不存在
  }
  
  var videoStatus = data.items[0].status;
  // 基础判断:视频已处理完成、公开可见
  var isPlayable = videoStatus.uploadStatus === "processed" && videoStatus.privacyStatus === "public";
  
  // 可选:判断地区限制(需结合当前访问地区)
  var regionRestriction = data.items[0].contentDetails?.regionRestriction;
  if (regionRestriction?.blockedCountries?.includes("CN")) {
    isPlayable = false;
  }
  
  return isPlayable;
}

优点:官方接口,结果准确稳定;缺点:有调用配额限制(免费配额足够处理上千条视频),需配置API密钥。

3. 关于原脚本的问题说明

原脚本设置followRedirects: false,获取的是跳转前的302状态码,但YouTube很多不可播放的视频会先返回302重定向到错误页面,因此仅靠状态码无法区分可播放/不可播放视频,必须结合跳转后的页面内容或官方API数据判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:37:55