我如何与YouTube API第3版的视频时长?(How do I get video durati

2019-07-23 00:31发布

我使用YouTube API V3搜索YouTube上。

https://developers.google.com/youtube/v3/docs/search

正如你所看到的,JSON不响应所包含的视频时长。 有没有办法让视频时长?

最好不要再要求结果中的每个元素的API(除非这是获得持续时间的唯一方法)。

Answer 1:

你将不得不作出在YouTube数据API的视频资源的调用,你让搜索调用之后。 你可以把多达50点视频的ID在搜索,这样你就不必把它的每个元素。

https://developers.google.com/youtube/v3/docs/videos/list

你要设定part=contentDetails ,因为时间是存在的。

例如,下面的调用:

https://www.googleapis.com/youtube/v3/videos?id=9bZkp7q19f0&part=contentDetails&key={YOUR_API_KEY}

给出了这样的结果:

{
 "kind": "youtube#videoListResponse",
 "etag": "\"XlbeM5oNbUofJuiuGi6IkumnZR8/ny1S4th-ku477VARrY_U4tIqcTw\"",
 "items": [
  {

   "id": "9bZkp7q19f0",
   "kind": "youtube#video",
   "etag": "\"XlbeM5oNbUofJuiuGi6IkumnZR8/HN8ILnw-DBXyCcTsc7JG0z51BGg\"",
   "contentDetails": {
    "duration": "PT4M13S",
    "dimension": "2d",
    "definition": "hd",
    "caption": "false",
    "licensedContent": true,
    "regionRestriction": {
     "blocked": [
      "DE"
     ]
    }
   }
  }
 ]
}

时间被格式化为ISO 8601字符串。 PT代表时间期限,4M为4分钟,13S为13秒。



Answer 2:

我知道了!

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

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

在那里,它返回的YouTube API版本3时(钥匙的方式组成)。 我用$vId ,我已经关闭的从我显示从视频频道的视频返回列表的得到...

它的工作原理... :)谷歌真的需要包括在段时间,所以你可以用一个电话,而不是两个得到这一切......叹.......这是他们的“wontfix名单上。



Answer 3:

我写了下面的类使用YouTube API V3(它返回缩略图以及),以获得YouTube的视频时长:

class Youtube
{
    static $api_key = '<API_KEY>';
    static $api_base = 'https://www.googleapis.com/youtube/v3/videos';
    static $thumbnail_base = 'https://i.ytimg.com/vi/';

    // $vid - video id in youtube
    // returns - video info
    public static function getVideoInfo($vid)
    {
        $params = array(
            'part' => 'contentDetails',
            'id' => $vid,
            'key' => self::$api_key,
        );

        $api_url = Youtube::$api_base . '?' . http_build_query($params);
        $result = json_decode(@file_get_contents($api_url), true);

        if(empty($result['items'][0]['contentDetails']))
            return null;
        $vinfo = $result['items'][0]['contentDetails'];

        $interval = new DateInterval($vinfo['duration']);
        $vinfo['duration_sec'] = $interval->h * 3600 + $interval->i * 60 + $interval->s;

        $vinfo['thumbnail']['default']       = self::$thumbnail_base . $vid . '/default.jpg';
        $vinfo['thumbnail']['mqDefault']     = self::$thumbnail_base . $vid . '/mqdefault.jpg';
        $vinfo['thumbnail']['hqDefault']     = self::$thumbnail_base . $vid . '/hqdefault.jpg';
        $vinfo['thumbnail']['sdDefault']     = self::$thumbnail_base . $vid . '/sddefault.jpg';
        $vinfo['thumbnail']['maxresDefault'] = self::$thumbnail_base . $vid . '/maxresdefault.jpg';

        return $vinfo;
    }
}

请注意,您必须对API_KEY使用YouTube API:

  1. 在这里创建一个新项目: https://console.developers.google.com/project
  2. 下启用“API和验证”,“YouTube数据API” - >的API
  3. 建立在“API和验证”的新服务器密钥 - >凭证


Answer 4:

此代码提取使用YouTube API第3版通过使视频ID YouTube视频的持续时间。 它为我工作。

<?php
    function getDuration($videoID){
       $apikey = "YOUR-Youtube-API-KEY"; // Like this AIcvSyBsLA8znZn-i-aPLWFrsPOlWMkEyVaXAcv
       $dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=$videoID&key=$apikey");
       $VidDuration =json_decode($dur, true);
       foreach ($VidDuration['items'] as $vidTime)
       {
           $VidDuration= $vidTime['contentDetails']['duration'];
       }
       preg_match_all('/(\d+)/',$VidDuration,$parts);
       return $parts[0][0] . ":" .
              $parts[0][1] . ":".
              $parts[0][2]; // Return 1:11:46 (i.e.) HH:MM:SS
    }

    echo getDuration("zyeubYQxHyY"); // Video ID
?>

你可以在你的域的自己的YouTube API密钥https://console.developers.google.com并生成自己需要的凭据。



Answer 5:

时间在使用Python 2.7和YouTube API V3秒:

    try:        
        dur = entry['contentDetails']['duration']
        try:
            minutes = int(dur[2:4]) * 60
        except:
            minutes = 0
        try:
            hours = int(dur[:2]) * 60 * 60
        except:
            hours = 0

        secs = int(dur[5:7])
        print hours, minutes, secs
        video.duration = hours + minutes + secs
        print video.duration
    except Exception as e:
        print "Couldnt extract time: %s" % e
        pass


文章来源: How do I get video durations with YouTube API version 3?