@Rango_31

Как оптимизировать php для подгрузки видео через youtube api?

День добрый! Подгружаю видео с канала через код ниже. После подключения таким образом время загрузки сайта возросло в двое. Помогите оптимизировать (если возможно) этот код или возможно у кого то есть иной пример вывода видео. Док-ю 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 'Не удалось получить данные';
}
  • Вопрос задан
  • 379 просмотров
Пригласить эксперта
Ответы на вопрос 1
@shagguboy
подгружай аяксом. по крайне мере страница будет быстро отдаваться
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы