如何通过YouTube API版本3获取视频时长?

sle*_*rfx 86 php rest objective-c youtube-api youtube-data-api

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

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

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

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

Mat*_*ela 111

拨打电话后,您必须拨打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}
Run Code Online (Sandbox Code Playgroud)

给出这个结果:

{
 "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"
     ]
    }
   }
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

时间格式为ISO 8601字符串.PT代表时间持续时间,4M是4分钟,13S是13秒.

  • 什么时间格式?这是Objective C支持的标准吗? (3认同)
  • 迟到的评论,但也许你想明星并留意这张票,请求持续时间包含在搜索回复中:https://code.google.com/p/gdata-issues/issues/detail?id = 4294 (3认同)
  • @Andrew - 它是ISO 8601格式.我同意它看起来非常残酷,但至少它可以很容易地用任何语言转换 - 只需查看ISO 8601转换器. (3认同)
  • 什么视频在YouTube上播放了几周?!? (3认同)
  • 对于Python,一个很好的转换持续时间的库是[aniso8601](https://pypi.python.org/pypi/aniso8601/0.70).它返回一个`datetime.timedelta`,它可以被格式化为基本上任何东西. (2认同)

小智 14

我知道了!

$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'];
Run Code Online (Sandbox Code Playgroud)

在那里它返回YouTube API版本3的时间(按顺序组成密钥;).我用过$vId我从频道播放的视频中删除了我正在播放的视频...

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

  • 你能指望什么?是Google,他们没有采取正确的方法。 (2认同)

Dim*_* L. 6

我编写了以下课程,以使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,您需要API_KEY才能使用YouTube API:

  1. 在此处创建一个新项目:https://console.developers.google.com/project
  2. 在"API&auth" - > API下启用"YouTube Data API"
  3. 在"API&auth" - >凭据下创建新的服务器密钥