Найти тему

Как встроить видео с YouTube канала на сайт

Для вывода списка видеозаписей из канала или плейлиста YouTube на сайте можно воспользоваться этим полностью рабочим решением на PHP. С помощью этой функции можно получить все необходимые данные видеозаписей: название, изображение и идентификатор видео.

Вам понадобится идентификатор канала или плейлиста. Найти их можно в адресной строке:

-2

-3

ID канала будем указывать при вызове функции

getYoutubePlaylistDataXml('Ваш_ID_канала');

И Google API key. Получаем следующим образом:

  • Для доступа к консоли API Google нужен аккаунт Google . Создаем или переходим к следующему пункту.
  • Заходим в консоль для разработчиков.
  • Нажимаем «Create Project» и указываем имя. Соглашаемся с правилами и нажимаем кнопку «Create».
  • В разделе «Boost your app with a Google API» активируем кнопку «Enable an API».
  • И выбираем «YouTube Data API» для работы с API YouTube.
  • Нажимаем на кнопку «Enable API».
  • В меню слева выбираем API & auth → Credentials. И нажимаем кнопку «Create new Key».
  • При необходимости указываем домен на котором будет использоваться ключ и нажимаем «Create».

Полученный ключ указываем в скрипте в переменной $api_key

Index.php

<?php
/**
* Получить список последних видео заданного плейлиста
*
* @param string $ytlist идентификатор канала или плейлиста
* @param int $cnt по сколько позиций обрабатывать (не всегда нужно содержимое всего плейлиста)
* @param int $cache_life время жизни кеша в секундах (чтобы не получить бан IP за рилтайм запросы)
* @return array список найденных видео, не более $cnt штук
*/
function getYoutubePlaylistDataXml($ytlist, $cnt = 5, $cache_life = 3600) {
# файл, содержащий копию ленты
$cache_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . $ytlist . '.json';
# Ключ для запросов
$api_key = 'ВАШ-API-KEY';
# специальный адрес, отвечающий за выдачу фида
$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);
}
# если фид получить не удалось...
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;
}

Если все верно, то при вызове функции getYoutubePlaylistDataXml('Ваш_ID_канала'); получаем массив с данными нужного канала или плейлиста.