使用YouTube API获取时长

时间:2015-07-01 12:53:41

标签: php youtube youtube-api

我需要使用Youtube API V3获取视频时长。我的应用程序在API V3上运行良好,但现在它无法正常工作。

我找到了一个有效的例子,它有效:

$dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=[VIDOID]&key=[API KEY]");


$duration =json_decode($dur, true);

foreach ($duration['items'] as $vidTime) {
    $vTime= $vidTime['contentDetails']['duration'];
}

致谢:Youtube API v3 , how to get video durations?

这将返回类似这样的时间格式。

PT24M30S 

我怎样才能把它变成可读的时间。喜欢24:30?

6 个答案:

答案 0 :(得分:3)

我无法相信,任何人都使用DateInterval,为什么?就像这样:

$duration = new DateInterval('PT24M30S');

print $duration->format('%H:%i:%s'); // outputs: 00:24:30

有用的链接:

答案 1 :(得分:1)

 $time_format = "PT24M30S ";

preg_match_all('/(\d+)/',$time_format,$parts);

$hours = floor($parts[0][0]/60);
$minutes = $parts[0][0]%60;
$seconds = $parts[0][1];

echo $hours . ": ". $minutes .":". $seconds; 

答案 2 :(得分:1)

一种可能的方法是使用函数str_replace();

$stamp = "PT24M30S";
$formated_stamp = str_replace(array("PT","M","S"), array("",":",""),$stamp);

echo $formated_stamp; //should give "24:30"

加分内容 - 前导零

为了添加前导零,必须首先用explode()分割字符串,然后使用sprintf()单独格式化数字;最后再把它们全部加在一起。

$exploded_string = explode(":",$formated_stamp);
$new_formated_stamp = sprintf("%02d", $exploded_string[0]).":".sprintf("%02d", $exploded_string[1]);

答案 3 :(得分:0)

video resource包含duration字段,该字段是以下格式的string。开发人员可以根据您的应用和需求重新格式化它。

contentDetails.duration

  

视频的长度。标签值是ISO 8601持续时间。对于   例如,对于至少一分钟长且小于的视频   一小时长,持续时间格式为PT#M#S,其中   字母PT表示该值指定一段时间,并且   字母M和S分别表示分钟和秒的长度。   M和S字母前面的#个字符都是整数   指定视频的分钟数(或秒数)。例如,   PT15M33S的值表示视频是15分钟和33   几秒钟。

     

如果视频长度至少为一小时,则持续时间为格式   PT#H#M#S,其中字母H前面的#指定长度   几个小时的视频和所有其他细节是相同的   如上所述。如果视频至少有一天长,则字母为P.   和T分开,值的格式为P#DT#H#M#S。请   有关完整的详细信息,请参阅ISO 8601规范。

关于如何做到这一点,我不得不说删除PT和S并用以下代码替换M.根据当值为null时发生的情况,可能需要对您进行一些测试。我会对ISO-8061

进行一些研究

答案 4 :(得分:0)

我使用以下功能转换YouTube持续时间。只需用YouTube提供的格式替换$ yt,它就会将其打印出来并且可读性很好。

function ConvertYoutubeVideoDuration($yt){
$yt=str_replace(['P','T'],'',$yt);
foreach(['D','H','M','S'] as $a){
    $pos=strpos($yt,$a);
    if($pos!==false) ${$a}=substr($yt,0,$pos); else { ${$a}=0; continue; }
    $yt=substr($yt,$pos+1);
}
if($D>0){
    $M=str_pad($M,2,'0',STR_PAD_LEFT);
    $S=str_pad($S,2,'0',STR_PAD_LEFT);
    return ($H+(24*$D)).":$M:$S"; // add days to hours
} elseif($H>0){
    $M=str_pad($M,2,'0',STR_PAD_LEFT);
    $S=str_pad($S,2,'0',STR_PAD_LEFT);
    return "$H:$M:$S";
} else {
    $S=str_pad($S,2,'0',STR_PAD_LEFT);
    return "$M:$S";
}
}

答案 5 :(得分:0)

解决方案PHP

function covtime($youtube_time){
            preg_match_all('/(\d+)/',$youtube_time,$parts);
            $hours = $parts[0][0];
            $minutes = $parts[0][1];
            $seconds = $parts[0][2];
            if($seconds != 0)
                return $hours.':'.$minutes.':'.$seconds;
            else
                return $hours.':'.$minutes;
        }