2013-03-24 5 views
56

YouTube를 검색하는 데 YouTube API v3를 사용하고 있습니다.Youtube API v3, 동영상 재생 시간은 어떻게 받습니까?

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

당신이 JSON 비디오 기간을 포함하지 않는 응답을 볼 수 있듯이. 동영상 재생 시간을 확보 할 수있는 방법이 있습니까? 결과의 각 요소에 대해 API를 다시 호출하지 않는 것이 좋습니다 (기간을 확보하는 유일한 방법이 아니면).

+10

일반 Google은 정상적으로 작동하고 손상된 것을 사용합니다. – Synetech

답변

75

검색 통화 후에 Youtube Data API의 Video 리소스를 호출해야합니다. 검색시 최대 50 개의 비디오 ID를 넣을 수 있으므로 각 요소에 대해 호출하지 않아도됩니다.

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

당신은 시간이 있기 때문에, 일부 = contentDetails입니다을 설정할 수 있습니다. 예를 들어

다음 호출 :

{ 
"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 문자열로 포맷 :

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

는이 결과를 제공합니다. PT는 Time Duration, 4M은 4 분, 13S는 13 초입니다.

+0

위대한! 고맙습니다! – sleepwalkerfx

+1

이 시간 형식은 무엇입니까? Objective C가 지원하는 표준입니까? – sleepwalkerfx

+3

늦게 댓글을 달았 으면 좋겠지 만 검색 응답에 기간이 포함되도록이 티켓을 보면서 계속 주목하고 싶을 수도 있습니다. https://code.google.com/p/gdata-issues/issues/detail?id= 4294 –

10

알 수 있습니다.

$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 V3의 시간을 반환합니다. [열쇠는 도중에 만들어졌습니다] $vId 나는 채널에서 동영상을 반환하는 목록에서 벗어났습니다. 동영상을 보여주고 있습니다 ...

Google이 작동합니다. :) Google 스 니펫에 기간을 포함 시켜서 두 가지 대신 하나의 호출로 모두 가져올 수 있도록해야합니다. 한숨을 쉬십시오 ........ 'wontfix'목록에 있습니다.

+0

예, 지속 시간을 사람이 읽을 수있는 형식 (예 : 초)으로 포함합니다. – andreszs

+0

당신은 무엇을 기대합니까? Google입니다. 그들은 올바른 방법으로 아무것도하지 않습니다. – Synetech

+0

길이를 초 단위로 얻는 방법을 찾았습니까? PT **** 형식에서 초 단위로 변환하는 것이 좋습니다. – Loenix

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

당신이 유튜브 API를 사용하는 API_KEY이 필요합니다 있습니다 (그것은뿐만 아니라 썸네일을 반환) :

  1. 여기에 새 프로젝트 만들기 : https://console.developers.google.com/project
  2. 는 "유튜브 데이터 API를"사용 "인증 & API를"에서 -> API를하는
  3. "API를 & 인증"에서 새 서버 키를 생성 -> 자격 증명
파이썬 2.7과 유튜브 API v3을 사용하여 초
0

시간 : 시간, 분, 정규식을 사용하여 초

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 
2

얻기 기간 (파이썬 3에서 테스트)

import re 
def parse_ISO8601(dur): 
    test1 = rex("PT(.+?)H", dur) 
    if test1: 
     return int(test1.group(1))*3600 
    test2 = rex("PT(.+?)H(.+?)M",dur) 
    if test2: 
     h,m = [int(x) for x in test2.groups()] 
     return 3600*h+60*m 
    test3 = rex("PT(.+?)H(.+?)S",dur) 
    if test3: 
     h,s = [int(x) for x in test3.groups()] 
     return 3600*h+s 
    test4 = rex("PT(.+?)H(.+?)M(.+?)S",dur) 
    if test4: 
     h,m,s = [int(x) for x in test4.groups()] 
     return 3600*h+60*h+s 
    test5 = rex("PT(.+?)M", dur) 
    if test5: 
     return int(test5.group(1))*60 
    test6 = rex("PT(.+?)M(.+?)S",dur) 
    if test6: 
     m,s = [int(x) for x in test6.groups()] 
     return 60*m+s 
    test7 = rex("PT(.+?)S",dur) 
    if test7: 
     return int(test7.group(1)) 
    print("CAN'T PARSE FUCKING GOOGLE FORMATTING:",dur) 
    return False #I'm out ... 
+0

당신은 rex를하기 위해 어떤 라이브러리를 사용하고 있습니까? 그것은 re 또는 rex입니다. 내가 파이썬 - 렉스 라이브러리 (그 하나라고 가정)와 코드를 시도하고 그것은 당신이 정규식 오류가 있다고 말했다. – Spartacus

+0

@Spartacus 나는 rex()에서 람다 (re.search or sth)를하고 있다고 생각한다. 'rex = lambda x, y : re.search (x, y) .groups()' – mikroskeem

+0

Gotcha. 감사! – Spartacus

2

이 코드는 유튜브 추출 동영상 ID를 전달하여 YouTube API v3를 사용하여 동영상 재생 시간을 얻었습니다.

<?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에 도메인 자신의 유튜브 API 키를 얻을 자신의 요구 사항에 대한 자격 증명을 생성 할 수 있습니다.