D
D
Denis2015-09-21 12:01:37
YouTube
Denis, 2015-09-21 12:01:37

How to optimize php for uploading videos via youtube api?

Good afternoon! I upload video from the channel using the code below. After connecting in this way, the loading time of the site has doubled. Help optimize (if possible) this code or maybe someone has a different example of video output. I've read the youtube doc, I'm not strong in php. Thanks in advance!

/**
* Получить список последних видео заданного плейлиста
*
* @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 'Не удалось получить данные';
}

Answer the question

In order to leave comments, you need to log in

2 answer(s)
I
Igor Tkachenko, 2015-09-21
@foozzi

it is obvious that, when downloading, there is a request to receive these videos, and, accordingly, the download time will drop significantly, you need to use a database, for example mysql and crontab, and every hour, for example, check new videos via cron and write them to the database, and output them from the database to site, because of this, there will be no delays.

S
shagguboy, 2015-09-21
@shagguboy

load with ajax. at least the page will render quickly

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question