Получить продолжительность от URL YouTube - PullRequest
9 голосов
/ 07 февраля 2012

Я ищу функцию, которая будет извлекать продолжительность YouTube видео из URL.Я прочитал несколько уроков, но не понял.Я вставляю видео на свой сайт, используя URL-адрес, и у меня есть функция, которая вытягивает миниатюру, и я просто хочу что-то подобное, которое получает продолжительность.Вот как я получаю большой палец ...

function get_youtube_screen_link( $url = '', $type = 'default', $echo = true ) {
if( empty( $url ) )
    return false;

if( !isset( $type ) )
    $type = '';

$url = esc_url( $url );

preg_match("|[\\?&]v=([^&#]*)|",$url,$vid_id);

if( !isset( $vid_id[1] ) )
    return false;

$img_server_num =  'i'. rand(1,4);

switch( $type ) {
    case 'large':
        $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/0.jpg";
        break;
    case 'first':
        // Thumbnail of the first frame
        $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/1.jpg";
        break;
    case 'small':
        // Thumbnail of a later frame(i'm not sure how they determine this)
        $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/2.jpg";
        break;
    case 'default':
    case '':
    default:
        $img_link = "http://{$img_server_num}.ytimg.com/vi/{$vid_id[1]}/default.jpg";
        break;
}
if( $echo )
    echo $img_link;
else
    return $img_link;

}

Ответы [ 6 ]

13 голосов
/ 07 февраля 2012

Вы можете использовать что-то вроде этого:

<?php

    function getDuration($url){

        parse_str(parse_url($url,PHP_URL_QUERY),$arr);
        $video_id=$arr['v']; 


        $data=@file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$video_id.'?v=2&alt=jsonc');
        if (false===$data) return false;

        $obj=json_decode($data);

        return $obj->data->duration;
    }

    echo getDuration('http://www.youtube.com/watch?v=rFQc7VRJowk');

?>

, который возвращает продолжительность в секундах видео.

Ссылка: http://code.google.com/apis/youtube/2.0/developers_guide_protocol.html

Вы можете использовать такую ​​функцию, как эта , чтобы изменить секунды на часы, минуты и секунды.

4 голосов
/ 04 июня 2015

YouTube API v3


использование

echo youtubeVideoDuration('video_url', 'your_api_key');
// output: 63 (seconds)

функция

/**
* Return video duration in seconds.
* 
* @param $video_url
* @param $api_key
* @return integer|null
*/
function youtubeVideoDuration($video_url, $api_key) {

    // video id from url
    parse_str(parse_url($video_url, PHP_URL_QUERY), $get_parameters);
    $video_id = $get_parameters['v'];

    // video json data
    $json_result = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=$video_id&key=$api_key");
    $result = json_decode($json_result, true);

    // video duration data
    if (!count($result['items'])) {
        return null;
    }
    $duration_encoded = $result['items'][0]['contentDetails']['duration'];

    // duration
    $interval = new DateInterval($duration_encoded);
    $seconds = $interval->days * 86400 + $interval->h * 3600 + $interval->i * 60 + $interval->s;

    return $seconds;
}
3 голосов
/ 23 июля 2017

Это моя функция, чтобы получить продолжительность YouTube в секунду. он полностью на 100% работает. вам нужно только видео с идентификатором YouTube и ключ API для YouTube.

как добавить шоу ключей API YouTube это видео https://www.youtube.com/watch?v=4AQ9UamPN6E

public static function getYoutubeDuration($id)
    {



         $Youtube_KEY='';

         $dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id={$id}&key={$Youtube_KEY}");

         $vTime='';
         $H=0;
         $M=0;
         $S=0;

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

         $vTime = substr($vTime, 2);
         $exp = explode("H",$vTime);

         //if explode executed
         if( $exp[0] != $vTime )
         {
             $H = $exp[0];
             $vTime = $exp[1];
         }

         $exp = explode("M",$vTime);

         if( $exp[0] != $vTime )
         {
             $M = $exp[0];
             $vTime = $exp[1];
         }

         $exp = explode("S",$vTime);
         $S = $exp[0];


         $H = ($H*3600);
         $M = ($M*60);
         $S = ($H+$M+$S);


         return $S;

    }

Это моя функция, чтобы получить продолжительность YouTube в секундах. он полностью на 100% работает. Вам нужно только видео с идентификатором YouTube и API-ключ YouTube.

как добавить шоу API ключа YouTube это видео https://www.youtube.com/watch?v=4AQ9UamPN6E

0 голосов
/ 05 сентября 2017

1) Вам понадобится ключ API.Перейдите на https://developers.google.com/ и войдите или создайте учетную запись, если это необходимо.После входа перейдите по этой ссылке https://console.developers.google.com/project и нажмите синюю кнопку CREATE PROJECT.Подождите, пока Google подготовит ваш проект.

2) Вам понадобится веб-хост, работающий на PHP с поддержкой file_get_content.Вы можете проверить, создав новый скрипт просто с помощью "echo php_info ();"и проверка того, что allow_url_fopen установлен на On.Если это не так, измените конфигурацию или обратитесь к своему веб-хосту.

<?php

  $sYouTubeApiKey = "<enter the key you get>";
  //Replace This With The Video ID. You can get it from the URL.
  //ie https://www.youtube.com/XWuUdJo9ubM would be
  $sVideoId = "XWuUdJo9ubM";

  //Get The Video Details From The API.
  function getVideoDetails ($sVideoId) {
    global $sYouTubeApiKey;
    //Generate The API URL
    $sUrl = "https://www.googleapis.com/youtube/v3/videos?id=".$sVideoId."&key=".$sYouTubeApiKey."&part=contentDetails";
    //Perform The Request
    $sData = file_get_contents($sUrl);
    //Decode The JSON Response
    return json_decode($sData);
  }

  //Get The Video Duration In Seconds.
  function getVideoDuration ($sVideoId) {
    $oData = getVideoDetails($sVideoId);
    //Deal With No Videos In List
    if (count($oData->items) < 1) return false;
    //Get The First Video
    $oVideo = array_shift($oData->items);
    //Extract The Duration
    $sDuration = $oVideo->contentDetails->duration;
    //Use Regular Expression To Parse The Length
    $pFields = "'PT(?:([0-9]+)H)?(?:([0-9]+)M)?(?:([0-9]+)S)?'si";
    if (preg_match($pFields, $sDuration, $aMatch)) {
      //Add Up Hours, Minutes, and Seconds
      return $aMatch[1]*3600 + $aMatch[2]*60 + $aMatch[3];
    }
  }

  header("Content-Type: text/plain");
  $oData = getVideoDetails($sVideoId);
  print_r($oData);
  echo "Length: ".getVideoDuration($sVideoId);
?>

Надеюсь, это поможет!

0 голосов
/ 20 июля 2014
function getYoutubeDuration($videoid) {
      $xml = simplexml_load_file('https://gdata.youtube.com/feeds/api/videos/' . $videoid . '?v=2');
      $result = $xml->xpath('//yt:duration[@seconds]');
      $total_seconds = (int) $result[0]->attributes()->seconds;

      return $total_seconds;
}

//now call this pretty function. 
//As parameter I gave a video id to my function and bam!
echo getYoutubeDuration("y5nKxHn4yVA");
0 голосов
/ 11 июня 2013

Вы можете просто использовать форматирование времени, чтобы изменить секунды в любой формат, который вам нравится. т.е. вернуть gmdate ("H: i: s", $ obj-> data-> duration);

...