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 комментарий
Вы можете оставить комментарий