День добрый! Подгружаю видео с канала через код ниже. После подключения таким образом время загрузки сайта возросло в двое. Помогите оптимизировать (если возможно) этот код или возможно у кого то есть иной пример вывода видео. Док-ю youtube читал, в php не силен. Заранее благодарен!
/**
* Получить список последних видео заданного плейлиста
*
* @param string $ytlist идентификатор плейлиста
* @param int $cnt по сколько позиций обрабатывать (не всегда нужно содержимое всего плейлиста)
* @param int $cache_life время жизни кеша в секундах (чтобы не получить бан IP за рилтайм запросы)
* @return array список найденных видео, не более $cnt штук
*/
function getYoutubePlaylistDataXml($ytlist, $cnt = 6, $cache_life = 3600) {
# файл, содержащий копию ленты
$cache_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . $ytlist . '.json';
# Ключ для запросов
$api_key = 'AIzaSyD-RDSytuYVlUvkmK5JDDlSA2xxxxxxx';
# специальный адрес, отвечающий за выдачу фида
$url = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet'
. '&playlistId=' . $ytlist
. '&maxResults=' . $cnt
. '&key=' . $api_key;
# если кеш устарел...
/*if (time() - @filemtime($cache_file) >= $cache_life) {
# ...пытаемся обновить его
$buf = file_get_contents($url);
# в случае успеха запишем в файл обновлённые данные
# проверка на пустоту нужна для того, чтобы не запороть кеш при ошибке
if ($buf) file_put_contents($cache_file, $buf);
}*/
$buf = file_get_contents($url);
# если фид получить не удалось...
if (empty($buf)) {
# ...просто берём содержимое из кеша
$buf = file_get_contents($cache_file);
}
# декодируем JSON данные
$json = json_decode($buf, 1);
$arr = array();
# если данных нет — на выход
if (empty($json['items'])) return $arr;
# перебор доступных значений
foreach ($json['items'] as $v) {
$t = array(
'title' => $v['snippet']['title'], # название
'desc' => $v['snippet']['description'], # описание
'url' => $v['snippet']['resourceId']['videoId'], # адрес
);
# изображения
if (isset($v['snippet']['thumbnails'])) {
$t['imgs']['all'] = array();
foreach ($v['snippet']['thumbnails'] as $name => $item) {
$t['imgs']['all'][] = $item['url'];
$wh = $item['width'] . 'x' . $item['height'];
$t['imgs'][$wh][0] = $item['url'];
}
}
$arr[] = $t;
}
return $arr;
}
$playlist_id = 'PLW-upYqPhHU4jTovc0YXwKVnxxxxxxxx';
$arr = getYoutubePlaylistDataXml($playlist_id);
# если что-то получено...
if ($arr) {
# ...построить табличку с изображением, названием и ссылкой на ролик
foreach ($arr as $v) { # цикл по массиву
$LINK = $v['url'];
$IMAGE = $v['imgs']['120x90'][0];
$TITLE = $v['title'];
$TIME = '';
$output .= '<div class="item">';
$output .= '<div class="item-header">';
$output .= '<a href="http://www.youtube.com/watch?v='.$LINK.'" rel="nofollow" target="_blank" class="hover-image"><img src="assets/templates/trk/images/video-icon.png" alt="" class="news-video-icon" />';
$output .= '<img src="'.$IMAGE.'" alt="" /></a>';
$output .= '</div>';
$output .= '<div class="item-content"><h3><a href="'.$LINK.'" target="_blank">'.$TITLE.'</a></h3></div></div>';
}
return $output;
} else {
# ...иначе, если массив данных пуст, вывести соответствующее сообщение
echo 'Не удалось получить данные';
}