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

使用API密钥调用YouTube API仅能获取2万条公开视频问题咨询

问题解决方法

1. 程序运行2小时10分钟停止、仅拉取20000条视频的解决方案

  • 解除PHP运行限制:原代码没有修改PHP默认的执行时间、内存上限配置,进程长时间运行后会被PHP主动终止。在代码开头加入两行配置即可取消对应限制:
set_time_limit(0);
ini_set('memory_limit', '-1');
  • 突破uploads播放列表2万条返回上限:YouTube官方对公开的uploads播放列表接口的返回条目上限固定为20000条,超过部分无法通过该接口拉取。你需要替换为Search.list接口拉取全量视频,指定参数channelId为你的频道ID、type=video、order=date,分页拉取即可获取超过2万条的视频数据。
  • 新增错误重试机制:原代码没有异常处理逻辑,遇到网络波动、API临时限流/报错会直接终止。可以在请求接口部分增加重试逻辑,遇到非致命错误时重试3-5次再终止,大幅提升运行稳定性。

2. 仅能拉取PUBLIC公开视频的解决方案

  • 原代码使用API Key进行身份校验,API Key仅能获取频道的公开数据,无法拿到非公开(私有、未列出、成员专属)内容。你作为频道所有者,需要替换为OAuth 2.0授权方式,申请只读权限,使用账号授权后的access token调用接口,即可拉取你名下频道所有权限等级的视频。
  • 拉取视频属性时,请求参数的part字段新增status,返回结果中status.privacyStatus字段即为视频的访问权限属性,包含public、unlisted、private等取值。

调整后核心代码参考

<?php
// 解除PHP运行限制
set_time_limit(0);
ini_set('memory_limit', '-1');

$baseUrl = 'https://www.googleapis.com/youtube/v3/';
// 替换为你OAuth2授权后拿到的access token,无需再使用API Key
$accessToken = 'YOUR_OAUTH2_ACCESS_TOKEN';
$channelId = 'YOUR_CHANNEL_ID';

$videos = [];
$nextPageToken = '';

do {
    $params = [
        'channelId' => $channelId,
        'part' => 'id,snippet',
        'maxResults' => 50,
        'type' => 'video',
        'order' => 'date',
        'pageToken' => $nextPageToken,
        'access_token' => $accessToken
    ];
    $url = $baseUrl . 'search?' . http_build_query($params);
    
    // 增加3次重试逻辑,应对临时网络/接口错误
    $retry = 0;
    $json = null;
    while ($retry < 3) {
        $context = stream_context_create([
            'http' => [
                'timeout' => 30
            ]
        ]);
        $response = @file_get_contents($url, false, $context);
        if ($response) {
            $json = json_decode($response, true);
            break;
        }
        $retry++;
        sleep(2);
    }
    if (!$json) break;
    
    foreach($json['items'] as $item) {
        $videoId = $item['id']['videoId'];
        $videos[] = $videoId;
        // 可在此处追加调用videos.list接口,拉取单条视频的status等自定义属性
    }
    
    $nextPageToken = $json['nextPageToken'] ?? '';
} while ($nextPageToken);

// 后续生成csv的逻辑保持原有逻辑即可
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:06:08