YouTube API. Загрузка видео на youtube с сайта
Недавно поступило два заказа на сайты, и получилось что оба сайта должны иметь возможность загрузки и воспроизведения видео. Но у себя на хостинге его хранить был не подходящий вариант. Тогда решили заливать видео на youtube, используя YouTube API, если честно то я не знал сначала что оно есть, думал что то с curl придется делать и эмитировать сайтом работу человека. Узнав что YouTube API позволяет загружать видео, я начал читать руководство разработчика, но там примеров для чистого php или CodeIgniter (фреймворк с которым я работаю) не было, были примеры для Zend, но это не оказалось проблемой...
Т.к. для Zend уже есть готовая библиотека для работы с YouTube я решил не изобретать велосипед а использовать ее, для этого Нужно скачать Zend_Gdata - это набор классов, для работы с YouTube API, и чем-то еще. Теперь нужно прикрутить Zend Gdata к CodeIgniter как это сделать я писал в статье про подключение Zend_Gdata к CodeIgniter но с такой же легкостью ее можно прикрутить и к любому другому фреймворку или CMS или просто PHP скрипту. Далее разговор пойдет именно о работе в CodeIgniter, но суть остается неизменной для всего остального под управлением PHP.
На данный момент поддерживается два способа загрузки видео на YouTube через сайт.
- Добавление через браузер. Позволяет загрузить видео из браузера напрямую на YouTube,
- Прямое добавление. Позволяет добавлять видео которое уже храниться на сервере.
Мы будем рассматривать добавление через браузер.
Загрузка видео на YouTube состоит из трех основных шагов.
- Аутентификация пользователя
- Отправка данных о видео, и получение url на который будем отправлять видео и ключика
- Отправка самого видео
Для работы потребуется:
- Логин и пароль пользователя на youtube
- Ключ разработчика и название приложения которые можно получить тут
Аутентицикация на YouTube
Есть несколько способов аутентификации AuthSub и ClientLogin для нашего случая отлично подходит ClientLogin
И так код:
function index()
{
$this->load->library("zend");
$this->zend->load("Zend/Loader");
Zend_Loader::loadClass('Zend_Gdata_YouTube'); // для работы с YouTube
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); // для аутентификации
$this->config->load('youtube'); // Логин пароль и прочее хранятся в этом конфиге
$authenticationURL = 'https://www.google.com/accounts/ClientLogin';
$httpClient =
Zend_Gdata_ClientLogin::getHttpClient(
$username = $this->config->item('tube_username'), //имя пользователя аккаунта
$password = $this->config->item('tube_password'), //пароль от аккаунта
$service = 'youtube',
$client = null,
$source = $this->config->item('client_id'), // название приложения
$loginToken = null,
$loginCaptcha = null,
$authenticationURL);
$developerKey = $this->config->item('tube_developer_key');
$httpClient->setHeaders('X-GData-Key', "key=$developerKey"); //ключ разработчика
//После установки учетных данных, объект $httpClient можно использовать для аутентификации всех последующих запросов к объекту службы Zend_Gdata_YouTube
}
Тут мы загрузили нашу библиотеку для работы Zend Gdata подключили зендовский загрузчик, и с помощью его подгрузили еще библиотеки. Далее заполняем все необходимые значения. Вместо
$this->config->item('XXXXX'),
Можно писать значения напрямую, мне просто удобнее юзать конфиги, или константы для такого.
На выходе у нас есть $httpClient который будет использоваться далее.
Отправка данных о видео
Сейчас нам нужно отправить данные о видео на youtube, и в ответе получить урл на который будем грузить видео, и token.
Продолжаем тот код что писали:
$yt = new Zend_Gdata_YouTube($httpClient);
$yt->setMajorProtocolVersion(2);//указываем что используем новую версию API
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
$myVideoEntry->setVideoTitle('Заголовок видео'); // Заголовок видео
$myVideoEntry->setVideoDescription('Описание видео'); //Описание видео
// Категория должна соотретствовать разрешенным категориям на youtube!
$myVideoEntry->setVideoCategory('Autos');
$myVideoEntry->SetVideoTags('cars, funny'); //Ключевые слова, через запятую
$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
$tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
$data['tokenValue'] = $tokenArray['token'];//token который нужно будет отправить вместе с видео
$data['postUrl'] = $tokenArray['url']; // урл на который отправим форму с видео
$data['nextUrl'] = 'http://la2ha.ru/youtube/success'; //Урл на который нужно попасть после загрузки видео
$this->load->view('v_add_video', $data); // отправляем данные во въюху
Тут я все вроде неплохо прокомментил и все должно быть понятно, конечно в реальной жизни, эти данные должны заполняться не в коде, а в форме, но чтоб не грузить статью ненужой инфой я заполнил значения в коде.
Замечание: категория видео должна соответствовать категориям которые предусмотрены youtube вот список - смотреть в текстовом редакторе
Отправка видео
Далее создаем въюху с таким кодом:
<?
echo'<form action="' . $postUrl . '?nexturl=' . $nextUrl .
'" method="post" enctype="multipart/form-data" id="fileupload">' .
'<input name="file" type="file"/>' .
'<input name="token" type="hidden" value="' . $tokenValue . '"/>' .
'<input value="Загрузить видео" type="submit" />' .
'</form>';
?>
Тут все проще простого, указали в action урл который нам дал youtube указали урл на который нас потом отправит и в скрытом поле вставили token.
После отправки видео нас переадресуют на $nextUrl в который будут переданы GET параметры status и id
Если status = 200 то все ОК
ID это идентификатор видео который можно встаить в плеер и смотреть видео.
1 комментарий
Вы можете оставить комментарий