Офис НП AMWAY в Ярославле
Офис Амвей в Ярославле
На карте Офис AMWAY в ЯрославлеПрием и выдача заказов, презентация продукции Амвей, мастер–классы, вопросы по бизнесу Amway:
Адрес: улица Валентины Терешковой, дом 1 (Вход со двора)
Телефон: +7 (920) 112-00-91
Email: matyxho@mail.ru
Сайт: https://www.amway.ru/user/lebedem
Визитка: http://yar.meweb.ru
Иерархия статей
Статьи » Программирование » PHP: Вывод информации о видео с сервиса YouTube, используя YouTube Data API v3
Сниппет
YouTube прекратило поддержку Data API v2, поэтому множество приложений (в том числе и PHP) просто перестали работать. В статье мы будем использовать YouTube Data API v3 для получения информации о видео
PHP: Вывод информации о видео с сервиса YouTube, используя YouTube Data API v3
Опубликовал  Pisatel Добавлено  25-05-2015 14:24 25 Май 2015 14:24:04 9251  Прочтений 9251 Прочтений  6 Комментариев 6 Комментариев
Обновлено: 24-08-2016 21:58 Обновлено: 24 августа 2016 21:58:51  printer
В одной из статей я уже рассказывал о том, как вывести информацию о видео с YouTube. Однако, в той статье мы использовали YouTube Data API второй версии, а вот на днях я узнал, что YouTube прекратил поддержку Data API v2, полностью перейдя на третью версию. Что ж, раз уж так вышло — переделываем наш скрипт под YouTube Data API v3.



Что мы будем выводить из информации:
  • Заголовок (Title)
  • Описание (Description)
  • Дата добавления
  • Продолжительность
  • Количество просмотров видео
  • Рейтинг (средняя оценка, понравилось/не понравилось, общее количество голосов)
  • Превью видео
Для начала — три небольших функции, которые помогут нам в работе. Первая — собственно, функция, которая создает соединение и парсит файл с информацией. Вторая — функция склонения (минута–минуты–минут, секунда–секунды–секунд, голос–голоса–голосов). Третья — функция преобразования времени ролика (переводит в секунды):



Код: PHP
// соединение и парсинг



function get_ydata($url) {

$ch = curl_init();

$timeout = 5;

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

$data = curl_exec($ch);

curl_close($ch);

return $data;

}

// преобразование окончаний слов



function getWord($number, $suffix) {

$keys = array(2, 0, 1, 1, 1, 2);

$modern = $number % 100;

$suffix_key = ($modern > 7 && $modern < 20) ? 2 : $keys[min($modern % 10, 5)];

return $suffix[$suffix_key];

}



// преобразование продолжительности ролика в секунды



function ctime($ytime) {

$start = new DateTime("@0");

$start->add(new DateInterval($ytime));

$stime = $start->format("H:i:s");

$sc = explode(":", $stime);

return $sc[0]*3600+$sc[1]*60+$sc[2];

}

// Сразу создадим массивы для последующей работы



$arraymin = array("минута", "минуты", "минут");

$arraysec = array"'секунда", "секунды", "секунд");

$arraygolos = array("голос", "голоса", "голосов");






Вот, в общем, подготовительные работы закончились. Далее — парсим файл с информацией о видео с сервиса YouTube, преобразовываем все, что нам нужно в удобочитаемый вид и выводим. По ходу кода буду давать комментарии. Работать будем с объектом, поэтому частично в коде присутствует ООП. Поехали:



Код: PHP
   $yprev = false; // настройка превью: если false (default) - 120px x 90px; если true (medium) - 320px x 180px

$ykey = "Ваш персональный ключ api";

$yurl = "ID видео";

$api = get_ydata("https://www.googleapis.com/youtube/v3/videos?id=".$yurl."&part=snippet%2Cstatistics%2CcontentDetails&key=".$ykey); // спарсили файл с информацией о видео

$youtube = json_decode($api); // преобразовали JSON-строку в объект PHP

if ($youtube && $youtube != NULL && $youtube->items) { // проверяем ответ, если ключ верен, видео существует и массив с информацией не пуст

foreach ($youtube->items as $item) { // проходимся по массиву, задавая переменные

$published = $item->snippet->publishedAt; // дата публикации

$title = $item->snippet->title; // заголовок

$description = $item->snippet->description; // описание

$thumb = $item->snippet->thumbnails; // превью

$author = $item->snippet->channelTitle; // автор видео

$duration = ctime($item->contentDetails->duration); // продолжительность (переводим в секунды)

$viewCount = $item->statistics->viewCount; // количество просмотров

$likes = $item->statistics->likeCount; // понравилось

$dislikes = $item->statistics->dislikeCount; // не понравилось

}

$thumb = $yprev ? $thumb->medium->url : $thumb->default->url; // задали урл для превью видео согласно настройкам выше

$length_min = floor($duration / 60); // сколько целых минут

$length_sec = $duration % 60; // сколько секунд

$min = getWord($length_min, $arraymin); // удобочитаемые минуты

$sec = getWord($length_sec, $arraysec); // удобочитаемые секунды

if ($likes == 0 && $dislikes > 0) { // делаем рейтинг. Если лайков 0, а дислаков больше 0, то

$rating = 0; // средний рейтинг 0

$numRaters = $dislikes; // всего голосов

} elseif ($likes > 0 && $dislikes == 0) { // если лайки есть, а дислайков нет

$rating = 5; // средний рейтинг равен 5 (высший)

$numRaters = $likes; // всего голосов

} elseif ($likes > 0 && $dislikes > 0) { // если есть и лайки, и дислайки

$numRaters = $likes + $dislikes; // всего голосов

$rating = $likes * 5 / $numRaters; // вычисляем средний рейтинг

} else { // если нет ни лайков, ни дислайков

$rating = 0;

$numRaters = 0; // все по нолям

}

$golos = getWord($numRaters, $arraygolos); // удобочитаемое общее количество голосов

$title = htmlspecialchars(trim((string)$title)); // подготовили заголовок

$description = !empty($description) ? htmlspecialchars(trim((string)$description)) : "Нет описания видео"; // подготовили описание, проверив на пустоту

$author = htmlspecialchars(trim((string)$author)); // автор видео

$published = date("d M Y H:i:s", strtotime($published)); // дата и время добавления

// далее подготовка к выводу информации



$yinfo = "<strong>Заголовок: </strong>".$title."<br />";

$yinfo .= "<strong>Описание: </strong>".$description."<br />";

$yinfo .= "<strong>Автор: </strong>".$author." &mdash; ".$published."<br />";

$yinfo .= "<strong>Просмотров: </strong>".number_format($viewCount, 0, ".", " ")."<br />";

$yinfo .= "<strong>Продолжительность: </strong>".$length_min.$min.$length_sec.$sec."<br />";

$yinfo .= "<strong>Рейтинг: </strong>".($rating == 0 ? "0" : number_format($rating, 2, ",", " "))." (".$numRaters.$golos.") <span style='color:green'>".$likes."</span> | <span style='color:red'>".$dislikes."</span>";

$yimg = "<a href='http://www.youtube.com/embed/".$yurl."?rel=0&amp;wmode=transparent' title='".$title."'><img src='".$thumb."' alt='".$title."' title='".$title."' /></a>";

} else { // иначе, если произошла ошибка при парсинге

$yinfo = "<strong>Нет данных для отображения</strong>";

$yimg = "<img src='https://www.youtube.com/yt/brand/media/image/yt-brand-strike-3.png' alt='Нет превью' style='border:0' />";

}






Собственно, практически все мы уже сделали. Осталось только вывести информацию в браузер, чем мы сейчас и займемся:



Код: PHP
    $window = "<div style='margin:3px; display:table'>".$yimg."<div style='display:table-cell; padding-left:20px; vertical-align:top'>".$yinfo."</div></div>";

echo $window;




Вот и все на этом. Вывод информации о видео с сервиса YouTube при помощи YouTube Data API v3 готов. Последний штрих (но не в последнюю очередь) — это генерация персонального ключа где–то здесь: https://console.developers.google.com/.



Ну и пример того, что мы сделали (только здесь это встроенный мод, поэтому есть некоторые отличия. Всем всех благ и удачи в сайтостроении! Видео YouTube:
Видео YouTube: Лидеры Amway: Евро-Клуб 6-7 августа 2016
Заголовок:
Лидеры Amway: Евро-Клуб 6-7 августа 2016
Amway Ярославль: Евро-клуб 2016

Добавил(а): Светлана Викторовна - 11 августа 2016 11:36:24
Просмотров: 212
Продолжительность: 7 минут 45 секунд
Рейтинг: 5 (2 голоса)20




З.Ы. Ну а если вам нужно больше информации, больше возможностей при использовании YouTube Data API v3, и вы при этом для веб–разработки своего проекта (проектов) используете язык программирования PHP, то вам вот сюда, правда перед этим рекомендую вспомнить основы буржуинского языка.
Понравилась статья?
Метки для данной статьи
Похожие статьи
Поделиться:   
Комментарии
#1 | Александр 23 августа 2016 11:20:37
No Avatar
Гость
Спасибо! Только вы и помогли! Отличная уникальная статья с отличными комvентариями в коде!Выпьем!
#2 | Pisatel 25 августа 2016 18:21:26
Avatar
Отсутствует
Супер Администратор
Активный
С 03. февраля 2013
Александр, всегда пожалуйста Загорает на пляже
Я не европеец. И не азиат. Я русский. Я россиянин. Я за истинные семейные христианские ценности. И это - моя национальная идея.
#3 | Анна 06 февраля 2017 09:40:57
No Avatar
Гость
Добрый день, подскажите
- как получить информацию о категории видео? У меня пока что категория выводится числовым знаечением....
#4 | Pisatel 06 февраля 2017 15:12:14
Avatar
Отсутствует
Супер Администратор
Активный
С 03. февраля 2013
Добрый день. У меня тоже числовым. Изучать надо здесь
Я не европеец. И не азиат. Я русский. Я россиянин. Я за истинные семейные христианские ценности. И это - моя национальная идея.
#5 | Алексей 18 февраля 2017 10:12:22
No Avatar
Гость
Спасибо. Хороший материал. Хотелось бы увидеть статью с примером вывода коментариев к видео. В сети найти не могу.
#6 | Pisatel 18 февраля 2017 16:41:16
Avatar
Отсутствует
Супер Администратор
Активный
С 03. февраля 2013
Алексей, чуть разгребу с делами - поищу
Я не европеец. И не азиат. Я русский. Я россиянин. Я за истинные семейные христианские ценности. И это - моя национальная идея.
Добавить комментарий
Имя:

Проверочный код:
Последние активные темы форума
  Темы Просмотров Ответов Последние сообщения
folder Вопрос по переделке bb-кода
PHP, MySQL
1563 5 Pisatel
26. мая 2017
folder Вопросы по Ajax форме обратной связи
CMS PHP Fusion
7454 48 Ditrin
19. февраля 2017
folder BBCode YouTube Video Colorbox mod
CMS PHP Fusion
6466 2 Pisatel
10. декабря 2016
folder Как лучше создать собственную страницу?
CMS PHP Fusion
4584 17 Pisatel
11. мая 2016
folder Небольшие вопросы по скриптам магазина и катало...
PHP, MySQL
41715 80 Pisatel
11. января 2016
folder BBCode Code mod
CMS PHP Fusion
3072 0 Pisatel
31. августа 2015
folder Ajax Like Dislike Article Panel
CMS PHP Fusion
5883 16 Pisatel
07. июля 2015
folder Хлебные крошки / BreadCrumbs SEO Panel
CMS PHP Fusion
6493 17 Pisatel
04. июля 2015
folder Abbr Description BBCode
CMS PHP Fusion
2290 0 Pisatel
15. июня 2015
folder Плагин Email рассылки Mail To All by Pisatel
CMS PHP Fusion
9151 32 Pisatel
26. апреля 2015
folder Подозрительный трафик и прочие страшилки
Всякая хрень
3942 2 Ditrin
23. апреля 2015
folder Мод Newsletter - рассылка писем пользователям с...
CMS PHP Fusion
5626 13 Pisatel
10. апреля 2015
folder Мод отправки писем PHPMailer для PHP-Fusion
CMS PHP Fusion
28353 113 Ditrin
06. апреля 2015
folder Появление неизвестного файла subscriptions.php
CMS PHP Fusion
2784 2 Pisatel
06. апреля 2015
folder Autoban on IP
CMS PHP Fusion
11398 13 Pisatel
03. апреля 2015