php Youtube播放器API获取服务器URL几次返回错误,而工程,如果我再次重新加载

agxfikkp  于 2023-04-28  发布在  PHP
关注(0)|答案(1)|浏览(90)

我在PHP中使用这段代码来获取Youtube服务器URL

$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://www.youtube.com/youtubei/v1/player?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, '{
      "videoId": "'.$yt_video_id.'",
      "context": {
        "client": {
          "clientName": "ANDROID",
          "clientVersion": "16.20.35"
        },
        "device": {
          "platform": "ANDROID",
          "platformVersion": "11"
        }
      },
      "playbackMode": "EMBEDDED",
      "playerParams": {
        "autoplay": 1
      }
    }');
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

    $headers = array();
    $headers[] = 'Content-Type: application/json';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close($ch);
    echo '<pre>';print_r($result);

它工作正常,并返回视频信息沿着格式和自适应格式。返回的服务器URL本身也有expire字段,这意味着返回的媒体URL将在该时间之后过期。
我添加了在数据库中保存expire的逻辑,并重新运行上述代码,以便在当前时间大于前一个expire时间时获取新的媒体URL。
问题是,有时上面的curl请求会返回以下错误,但当我刷新时,它工作了:

"reason": {
  "runs": [{
    "text": "The following content is not available on this app."
  }]
}

我担心这可能会发生在我的直播视频上,用户将无法观看视频。
我做错了什么,什么是最好的方式来处理到期?我在这里错过了什么?我已经看到许多其他视频播放器工作正常没有错误。

更新-如果我尝试使用“WEB”作为客户端,那么它每次都有效。我从这个链接get_video_info YouTube endpoint suddenly returning 404 not found跟随@马哈德回答网络。

kd3sttzy

kd3sttzy1#

不是100%确定,但在代码中你使用了一个通用的apikey;所以被随机屏蔽的几率非常高。尝试申请一个普通的密钥,如果你太频繁地达到10000个限额,就请求增加配额。
由于通用密钥的可靠性,我们中没有人会使用我们自己的个人数据,事实上,他们的控制程序无效。

相关问题