我在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跟随@马哈德回答网络。
1条答案
按热度按时间kd3sttzy1#
不是100%确定,但在代码中你使用了一个通用的apikey;所以被随机屏蔽的几率非常高。尝试申请一个普通的密钥,如果你太频繁地达到10000个限额,就请求增加配额。
由于通用密钥的可靠性,我们中没有人会使用我们自己的个人数据,事实上,他们的控制程序无效。