2015-07-01 3 views
1

Мне нужно получить продолжительность видео, используя Youtube API V3. Мое приложение отлично работало с API V3, но теперь оно не работает.Получить продолжительность с помощью API YouTube

я нашел рабочий пример, и он работает:

$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']; 
} 

Credits: Youtube API v3 , how to get video durations?

Это будет возвращать формат времени что-то вроде этого.

PT24M30S 

Как я могу заключить это в удобочитаемое время. Как 24:30?

ответ

1

Один из возможных способов заключается в использовании функции str_replace();

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

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

содержания Bonus - ведущие нули

Для того, чтобы добавить ведущие нули один должны первым разделите строку с помощью explode(), затем форматируйте числа индивидуально с помощью sprintf(); и, наконец, добавить все это вместе.

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

Просто заметьте это будет конвертировать 'PT2M3S' в' 2: 3' – johnh10

+0

@ johnh10 отредактировал мой ответ на что Адресные. – Niddro

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

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; 
0

Я использую следующие функции для преобразования длительности YouTube. Просто замените $ yt на формат YouTube, предоставленный вам, и он распечатает его красиво и легко.

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"; 
} 
} 
Смежные вопросы