我需要使用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?
答案 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
。开发人员可以根据您的应用和需求重新格式化它。
视频的长度。标签值是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;
}