YouTube API 버전 3으로 동영상 길이를 얻으려면 어떻게하나요?


92

YouTube API v3를 사용하여 YouTube를 검색하고 있습니다.

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

보시다시피 응답 JSON에는 동영상 길이가 포함되어 있지 않습니다. 비디오 길이를 얻는 방법이 있습니까?

결과의 각 요소에 대해 API를 다시 호출하지 않는 것이 좋습니다 (기간을 가져 오는 유일한 방법이 아닌 경우).


24
일반적인 Google은 잘 작동하는 것을 취하고 그것을 망칩니다.
Synetech

1
이 질문에 PHP와 Objective-C가 모두 태그 된 이유는 무엇입니까? 일부 답변은 Python도 사용합니다.
Peter Mortensen

답변:


127

검색 호출을 한 후 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는 Time Duration, 4M은 4 분, 13S는 13 초를 나타냅니다.


4
이 시간 형식은 무엇입니까? Objective C가 지원하는 표준입니까?
Rukshan Marapana 2013 년

3
늦게 댓글을 달았지만 검색 응답에 포함되는 기간을 요청하는이 티켓에 별표를 표시하고 주시하고 싶을 수 있습니다. code.google.com/p/gdata-issues/issues/detail?id=4294
Andrew Nguyen

3
@Andrew-ISO 8601 형식입니다. 꽤 끔찍해 보이지만 적어도 어떤 언어로든 쉽게 변환 할 수 있다는 데 동의합니다. ISO 8601 변환기를 찾아보세요.
Matt Koskela

2
Python의 경우 기간을 변환하는 훌륭한 라이브러리는 aniso8601 입니다. datetime.timedelta기본적으로 모든 형식으로 지정할 수있는를 반환합니다 .
arnaudoff

4
YouTube에서 몇 주 길이의 동영상이 있나요?!?
Matt Koskela 2015 년

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은 스 니펫에 기간을 포함해야 두 번이 아닌 한 번의 호출로 모든 것을 얻을 수 있습니다. 'wontfix'목록에 있습니다.


예, 초와 같이 사람이 읽을 수있는 형식으로 기간을 포함합니다.
andreszs 2015 년

2
당신은 무엇을 기대합니까? Google이기 때문에 올바른 방식으로 아무것도하지 않습니다.
Synetech 2015 년

초 단위로 기간을 얻는 방법을 찾았습니까? PT **** 형식에서 초로 변환하는 것은 시간이 걸리는 것 같습니다.
Loenix

결산을 놓치고 있지 }않습니까?
Peter Mortensen

7

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;
    }
}

YouTube API를 사용하려면 API_KEY가 필요합니다.

  1. 여기에서 새 프로젝트를 만듭니다. https://console.developers.google.com/project
  2. 'API 및 인증'-> API에서 'YouTube 데이터 API'를 사용 설정합니다.
  3. "API 및 인증"-> 자격 증명에서 새 서버 키를 만듭니다.

2

이 코드는 동영상 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 키를 얻고 고유 한 요구 사항에 대한 자격 증명을 생성 할 수 있습니다.



1

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

0

Youtube Data 3 API, 기간 문자열에서 Python으로 초 변환

예:

convert_YouTube_duration_to_seconds ( 'P2DT1S')
172801

convert_YouTube_duration_to_seconds ( 'PT2H12M51S')
7971

def convert_YouTube_duration_to_seconds(duration):
   day_time = duration.split('T')
   day_duration = day_time[0].replace('P', '')
   day_list = day_duration.split('D')
   if len(day_list) == 2:
      day = int(day_list[0]) * 60 * 60 * 24
      day_list = day_list[1]
   else:
      day = 0
      day_list = day_list[0]
   hour_list = day_time[1].split('H')
   if len(hour_list) == 2:
      hour = int(hour_list[0]) * 60 * 60
      hour_list = hour_list[1]
   else:
      hour = 0
      hour_list = hour_list[0]
   minute_list = hour_list.split('M')
   if len(minute_list) == 2:
      minute = int(minute_list[0]) * 60
      minute_list = minute_list[1]
   else:
      minute = 0
      minute_list = minute_list[0]
   second_list = minute_list.split('S')
   if len(second_list) == 2:
      second = int(second_list[0])
   else:
      second = 0
   return day + hour + minute + second
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.