YouTube API v3를 사용하여 YouTube를 검색하고 있습니다.
https://developers.google.com/youtube/v3/docs/search
보시다시피 응답 JSON에는 동영상 길이가 포함되어 있지 않습니다. 비디오 길이를 얻는 방법이 있습니까?
결과의 각 요소에 대해 API를 다시 호출하지 않는 것이 좋습니다 (기간을 가져 오는 유일한 방법이 아닌 경우).
YouTube API v3를 사용하여 YouTube를 검색하고 있습니다.
https://developers.google.com/youtube/v3/docs/search
보시다시피 응답 JSON에는 동영상 길이가 포함되어 있지 않습니다. 비디오 길이를 얻는 방법이 있습니까?
결과의 각 요소에 대해 API를 다시 호출하지 않는 것이 좋습니다 (기간을 가져 오는 유일한 방법이 아닌 경우).
답변:
검색 호출을 한 후 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 초를 나타냅니다.
알았어!
$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'목록에 있습니다.
}
않습니까?
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가 필요합니다.
이 코드는 동영상 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 키를 얻고 고유 한 요구 사항에 대한 자격 증명을 생성 할 수 있습니다.
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
Youtube Data 3 API, 기간 문자열에서 Python으로 초 변환
convert_YouTube_duration_to_seconds ( 'P2DT1S')
172801convert_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