当前位置: 首页 > 知识库问答 >
问题:

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

亢嘉茂
2023-03-14

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

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

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

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

共有3个答案

阳福
2023-03-14

我编写了以下类,使用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才能使用YouTubeAPI:

    < li >在此处创建新项目:https://console.developers.google.com/project < li >启用“API”下的“YouTube数据API”
易祖鹤
2023-03-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'];
}

在那里,它返回YouTube API版本3的时间(密钥是通过;)的方式组成的。我用$vId,我已经从我正在播放视频的频道中返回的视频列表中取出...

它起作用了。Google真的需要在片段中包含持续时间,这样您就可以通过一个调用而不是两个调用来获取所有内容......它在他们的“修复”列表中。

公冶京
2023-03-14

在进行搜索调用后,您必须调用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秒。

 类似资料:
  • 所以我试图从用户上传的视频中抓取10个最新视频。 现在唯一的问题是,播放列表请求中唯一可见的日期是已发布的,这是视频上传的日期 - 而不是公开的日期,这会产生巨大的差异。 我注意到我可以通过视频请求获取正确的日期,但它似乎不是最好的地方。 让我给你看一个我正在处理的例子。 我们走Maroon5频道吧。 forUserName: Maroon5VEVO 获取 https://www.googleap

  • 问题内容: 我正在使用YouTube API v3搜索YouTube。 https://developers.google.com/youtube/v3/docs/search 如您所见,响应JSON不包含视频时长。有没有办法获得视频时长? 最好不要再为结果中的每个元素调用API(除非这是获取持续时间的唯一方法)。 问题答案: 进行搜索调用后,您将必须调用YouTube数据API的视频资源。您最多

  • 我正在开发一个PHP项目,需要从特定用户名获取Youtube频道横幅(或封面照片),头像和上传的视频。 对于头像和视频,我使用:https://gdata.youtube.com/feeds/api/channels?q=Username 但是对于频道横幅,我在网上搜索过但没有运气。这里有人可以帮助我吗?非常感谢!

  • 我们有一个网站,显示我们的YouTube视频频道和我们频道中最喜欢的视频等。我们使用YouTube数据API v2.0来获取数据。 例如: https://gdata.youtube.com/feeds/api/users/“ 用户标识 ”/播放列表?v=2 但现在这些链接返回“NetworkError: 410 Gone”。我们检查了新的YouTube Javascript API,但我们不知道

  • 我正在研究YouTubeAPI:https://developers.google.com/youtube/v3/docs/search/list 但是我找不到通过HTTP请求获取360视频列表的任何参数。我想获取q参数为“Ronaldo”的360视频(例如) 有没有人知道如何通过HTTP请求获取360视频或者另一种获取360视频的解决方案?

  • 我需要提取5年前公司YouTube频道上的活动。我遇到了一个YouTube分析API的问题,因为它限制了我最近30天的活动。我正在考虑接下来尝试YouTube数据API V3,但我想首先在这里问一下,是否有人知道如何从YouTube频道中提取深层历史数据。我感兴趣的主要是每天每个视频的浏览量。我正在使用谷歌云平台,需要将数据存储在BigQuery中。 https://developers.goog