Saya menggunakan YouTube API v3 untuk menelusuri YouTube.
https://developers.google.com/youtube/v3/docs/search
Seperti yang Anda lihat, respons JSON tidak berisi durasi video. Adakah cara untuk mendapatkan durasi video?
Lebih disukai tidak memanggil API untuk setiap elemen dalam hasil lagi (kecuali itu satu-satunya cara untuk mendapatkan durasi).
php
objective-c
rest
youtube-api
youtube-data-api
Rukshan Marapana
sumber
sumber
Jawaban:
Anda harus melakukan panggilan ke sumber daya video API data YouTube setelah melakukan panggilan penelusuran. Anda dapat memasukkan hingga 50 ID video dalam satu penelusuran, jadi Anda tidak perlu memanggilnya untuk setiap elemen.
https://developers.google.com/youtube/v3/docs/videos/list
Anda ingin mengatur
part=contentDetails
, karena durasinya ada.Misalnya, panggilan berikut:
https://www.googleapis.com/youtube/v3/videos?id=9bZkp7q19f0&part=contentDetails&key={YOUR_API_KEY}
Memberikan hasil ini:
{ "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" ] } } } ] }
Waktu diformat sebagai string ISO 8601. PT adalah singkatan dari Time Duration, 4M adalah 4 menit, dan 13S adalah 13 detik.
sumber
datetime.timedelta
, yang pada dasarnya dapat diformat menjadi apa saja.Saya mendapatkannya!
$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']; }
Di sana ia mengembalikan waktu untuk API YouTube versi 3 (kuncinya dibuat dengan cara;). Saya menggunakan
$vId
bahwa saya telah keluar dari daftar video yang dikembalikan dari saluran tempat saya menunjukkan video dari ...Berhasil. Google BENAR-BENAR perlu memasukkan durasi dalam potongan sehingga Anda bisa mendapatkan semuanya dengan satu panggilan, bukan dua ... itu ada di daftar 'wontfix' mereka.
sumber
}
?Saya menulis kelas berikut untuk mendapatkan durasi video YouTube menggunakan YouTube API v3 (ia juga mengembalikan thumbnail):
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; } }
Harap perhatikan bahwa Anda memerlukan API_KEY untuk menggunakan API YouTube:
sumber
Kode ini mengekstrak durasi video YouTube menggunakan YouTube API v3 dengan meneruskan ID video. Itu berhasil untuk saya.
<?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 ?>
Anda bisa mendapatkan kunci API YouTube domain Anda sendiri di https://console.developers.google.com dan membuat kredensial untuk kebutuhan Anda sendiri.
sumber
Anda bisa mendapatkan durasi dari kolom 'contentDetails' di respons json.
sumber
Durasi dalam hitungan detik menggunakan Python 2.7 dan 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
sumber
Data Youtube 3 API, konversi string durasi ke detik dengan Python
Contoh:
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
sumber