Intereting Posts
Полоса пользовательского заказа с динамическим количеством Корзина Magento без очистки после оформления заказа Symfony 2 – как передать данные formBuilder? У PHP проблемы с сохранением больших файлов Как консолидировать различные условия IF в конечный результат как обновить раскрывающееся меню Select2 после загрузки ajax другого контента? Получить дату следующего понедельника, вторник и т. Д. Как подавить ошибку «Деление на ноль» и установить для результата значение null для всего приложения? Как реализовать функцию laravel Crypt :: encrypt () в Objective C? Как использовать React Router с Laravel? Отправка HTTP-запроса POST из Python (попытка конвертировать из PHP) Точка в многоугольнике с использованием geoPHP Как preg_replace \ "с \" "при хранении в csv-файле с использованием fputcsv 5.4 разыменование на действительный вызов массива 5.3 вытягивание XML-файла и обнаружение изменений / удаления php

Youtube API v3, как получить длительность видео?

Я использую Youtube API v3 для поиска youtube.

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

Как вы можете видеть ответ JSON не содержит продолжительности видео. Есть ли способ получить длительность видео? предпочтительно не вызывать API для каждого элемента в результате снова (если это единственный способ получить длительность).

    После того, как вы сделаете поисковый вызов, вам нужно будет позвонить на видеоресурс API данных Youtube Data. Вы можете разместить до 50 идентификаторов видео в поиске, поэтому вам не придется вызывать его для каждого элемента.

    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 V3. [ключ составлен путем;] Я использовал $vId что я получил от возвращенного списка видео с канала, на котором показываю видео с …

    Он работает .. 🙂 Google REALLY нужно включить продолжительность в фрагмент, чтобы вы могли получить все с помощью одного вызова вместо двух … sigh ……. он находится в списке «wontfix».

    Я написал следующий класс, чтобы увеличить продолжительность видео YouTube, используя YouTube API v3. (Он также возвращает эскизы)

     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 YouTube вам понадобится API_KEY:

    1. Создайте новый проект здесь: https://console.developers.google.com/project
    2. Включить «API данных YouTube» в API «APIs & auth» -> API
    3. Создать новый ключ сервера в разделе «APIs & auth» -> Учетные данные

    Получение продолжительности в часах, минутах и ​​секундах с использованием регулярного выражения (проверено на Python 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 ... 

    Этот код извлекает длительность видео Youtube с использованием Youtube API v3, передавая Video ID, и это сработало для меня.

     <?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 (ie) HH:MM:SS } echo getDuration("zyeubYQxHyY"); // Video ID ?> 

    Вы можете получить свой собственный API API вашего домена на https://console.developers.google.com и создать учетные данные для своих собственных требований.

    Продолжительность в секундах с использованием Python 2.7 и API YouTube 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