首页 文章

如何使用YouTube API版本3获取视频时长?

提问于
浏览
64

我正在使用YouTube API v3搜索YouTube .

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

如您所见,响应JSON不包含视频持续时间 . 有没有办法获得视频时长?

最好不再为结果中的每个元素调用API(除非这是获取持续时间的唯一方法) .

5 回答

  • 0

    拨打电话后,您必须拨打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秒 .

  • 6

    我知道了!

    $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 ,我从 Channels 中返回的视频列表中显示了来自...的视频

    它的工作原理...... :)谷歌真的需要在片段中包含持续时间,这样你就可以通过一个电话而不是两个来获得它......叹息.......它在他们的'wontfix'列表中 .

  • 85

    我编写了以下课程,以使用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:

  • 12

    此代码通过传递视频ID,使用YouTube API v3提取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
    ?>
    

    您可以在https://console.developers.google.com上获取域名自己的YouTube API密钥,并根据自己的要求生成凭据 .

  • 2

    使用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
    

相关问题