如何获取YouTube视频时长?现有PHP方法无法返回时长求解决
获取YouTube视频时长的正确方法
你说得对,YouTube的oEmbed接口确实不会返回视频时长,这就是为什么你之前的代码拿不到这个字段。要获取视频时长,你需要使用YouTube Data API v3,这是官方支持的、目前有效的解决方案。
步骤说明
- 先从传入的URL里提取视频ID(比如你示例里的
jmQsk6tm5aY) - 调用YouTube Data API v3的
Videos.list端点,需要一个免费的API密钥(可在Google Cloud控制台创建并启用YouTube Data API v3) - 解析API返回的JSON数据,其中
duration字段以ISO 8601格式存在,可按需转换为易读格式
修改后的PHP代码示例
public function getYTdata($url) { // 第一步:从URL提取视频ID,兼容多数YouTube链接格式 preg_match('/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/', $url, $matches); if (!isset($matches[1])) { return ['error' => '无法提取YouTube视频ID']; } $videoId = $matches[1]; // 第二步:调用YouTube Data API v3,替换为你的API密钥 $apiKey = '你的Google API密钥'; $apiUrl = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id={$videoId}&key={$apiKey}"; $curl = curl_init($apiUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $return = curl_exec($curl); curl_close($curl); $apiData = json_decode($return, true); if (empty($apiData['items'][0]['contentDetails']['duration'])) { return ['error' => '无法获取视频时长']; } // 可选:将ISO 8601格式时长转换为易读格式(如"3分45秒") $rawDuration = $apiData['items'][0]['contentDetails']['duration']; $readableDuration = $this->convertISO8601ToReadable($rawDuration); // 合并原oEmbed数据与时长信息 $oEmbedData = $this->getOriginalOEmbedData($url); $oEmbedData['duration'] = $readableDuration; $oEmbedData['raw_duration'] = $rawDuration; // 保留原始格式供后续使用 return $oEmbedData; } // 获取原oEmbed数据的辅助函数 private function getOriginalOEmbedData($url) { $youtube = "http://www.youtube.com/oembed?url=". urlencode($url) ."&format=json"; $curl = curl_init($youtube); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $return = curl_exec($curl); curl_close($curl); return json_decode($return, true); } // 转换ISO 8601时长为易读格式的辅助函数 private function convertISO8601ToReadable($duration) { $interval = new DateInterval($duration); $parts = []; if ($interval->h > 0) $parts[] = $interval->h . '小时'; if ($interval->i > 0) $parts[] = $interval->i . '分钟'; if ($interval->s > 0) $parts[] = $interval->s . '秒'; return implode(' ', $parts); }
关键注意事项
- API密钥获取:登录Google Cloud控制台,创建新项目后搜索启用"YouTube Data API v3",生成API密钥即可,免费配额足够个人日常使用(每日10000次免费调用)
- 视频ID兼容性:代码中的正则表达式支持普通链接、嵌入链接、短链接等多数YouTube URL格式
- 时长转换:利用PHP的
DateInterval类可直接解析ISO 8601格式,你也可以根据需求调整转换后的展示样式
内容的提问来源于stack exchange,提问作者enj100
相关产品推荐
相关产品推荐

