Używam YouTube API v3 do wyszukiwania w YouTube.
https://developers.google.com/youtube/v3/docs/search
Jak widać, odpowiedź JSON nie zawiera czasu trwania wideo. Czy jest sposób, aby uzyskać czas trwania wideo?
Najlepiej nie wywoływać ponownie interfejsu API dla każdego elementu w wyniku (chyba że jest to jedyny sposób na uzyskanie czasów trwania).
php
objective-c
rest
youtube-api
youtube-data-api
Rukshan Marapana
źródło
źródło
Odpowiedzi:
Po wywołaniu wyszukiwania konieczne będzie wywołanie zasobu wideo interfejsu API danych YouTube. W wyszukiwaniu możesz umieścić do 50 identyfikatorów wideo, więc nie będziesz musiał ich wywoływać dla każdego elementu.
https://developers.google.com/youtube/v3/docs/videos/list
Będziesz chciał ustawić
part=contentDetails
, ponieważ czas trwania jest tam.Na przykład następujące wezwanie:
https://www.googleapis.com/youtube/v3/videos?id=9bZkp7q19f0&part=contentDetails&key={YOUR_API_KEY}
Daje ten wynik:
{ "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" ] } } } ] }
Czas jest sformatowany jako ciąg ISO 8601. PT oznacza czas trwania, 4M to 4 minuty, a 13S to 13 sekund.
źródło
datetime.timedelta
, który można sformatować w zasadzie do wszystkiego.Mam to!
$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']; }
Tam zwraca czas dla YouTube API w wersji 3 (przy okazji klucz jest wymyślony;). Skorzystałem z
$vId
tego, że wypadłem z listy zwróconych filmów wideo z kanału, z którego wyświetlam filmy z ...To działa. Google NAPRAWDĘ musi uwzględnić czas trwania we fragmencie, abyś mógł uzyskać to wszystko za pomocą jednego połączenia zamiast dwóch ... jest na ich liście „wontfix”.
źródło
}
?Napisałem następującą klasę, aby uzyskać czas trwania wideo YouTube za pomocą interfejsu API YouTube v3 (zwraca również miniatury):
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; } }
Pamiętaj, że do korzystania z interfejsu API YouTube potrzebujesz API_KEY:
źródło
Ten kod wyodrębnia czas trwania wideo YouTube za pomocą interfejsu API YouTube v3, przekazując identyfikator wideo. U mnie to zadziałało.
<?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 ?>
Możesz uzyskać własny klucz YouTube API swojej domeny na https://console.developers.google.com i wygenerować dane logowania na własne potrzeby.
źródło
Czas trwania można pobrać z pola „contentDetails” w odpowiedzi json.
źródło
Czas trwania w sekundach w Pythonie 2.7 i 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
źródło
Youtube data 3 API, konwersja ciągu czasu trwania na sekundy w Pythonie
Przykład:
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
źródło