Как создать файл xml для youtube

Обновлено: 06.07.2024

Некоторое время назад по работе пришлось изучить и настроить работу сайта заказчика с YouTube, после этого для своего, как это теперь принято говорить, стартапа, я применил практически те же знания и умения. В этом небольшом посте я расскажу, как используя youtube api загружать видео файлы.

Оговорюсь сразу, что не стоит уделять большое внимание приведенному в посте коду – он написан специально для этого поста и несет скорее смысловую нагрузку для лучшего понимания. Весь код на этаком диалекте PHP :)

Шаг первый заключается в регистрации вас как обычного пользователя на сервисе youtube. Конечно, вы можете использовать существующую пару логин-пароль, но как мне кажется для удобства лучше зарегистрировать нового пользователя, в канале которого будет транслироваться загружаемое видео.

Стоит отметить, что при отправке данных YouTube мы будем передавать в том числе два основных параметра X-GData-Client: <client_id>, где <client_id> — это собственно указанное название приложения, и X-GData-Key: key=<developer_key>, где как нетрудно догадаться <developer_key> — сгенерированный ключ. На этом этапе мы закончили подготовку и начинаем построение приложения.

  • API_KEY – девелоперский ключ
  • API_NAME – название приложения
  • YOUTUBE_EMAIL – регистрационный е-майл на YouTube
  • YOUTUBE_PASS – пароль для входа в ваш аккаунт на YouTube
  • YOUTUBE_USERNAME – имя пользователя на YouTube

Для начала корректной работы нам требуется получить значение еще одной константы – маркер аутентификации. Google предоставляет два типа аутентификации: Auth Sub и ClientLogin. Последний способ будет рассмотрен в рамках данной заметки – это позволит определять аккаунт пользователя, связанный с последующими запросами, именно поэтому нам нужно будет передать в последующих запросах логин и пароль.

$eq = 'accountType=HOSTED_OR_GOOGLE&Email=YOUTUBE_EMAIL&Passwd=YOUTUBE_PASS&service=youtube&source=API_NAME;
if ($fp = fsockopen ("ssl://www.google.com", 443, $errno, $errstr, 20))
$request ="POST /youtube/accounts/ClientLogin HTTP/1.0\r\n";
$request.="Host: www.google.com\r\n";
$request.="Content-Type:application/x-www-form-urlencoded\r\n";
$request.="Content-Length: ".strlen($eq)."\r\n";
$request.="\r\n\r\n";
$request.=$eq;
fwrite($fp,$request,strlen($request));
while (!feof($fp))
$response.=fread($fp,8192);
fclose($fp);
>
preg_match("!(.*?)Auth=(.*?)\n!si",$response,$ok);
AUTH_TOKEN = $ok[2];

Итак, как мы теперь видим, мы получили положительный ответ от Google, где среди прочего был приведен маркер аутентификации, который сохранен в константе AUTH_TOKEN. Этот маркер нужно время от времени обновлять – я, к сожалению не нашел как долго маркер считается действительным, поэтому кроном раз в час получаю новый, который позже используется в работе.

Вот теперь мы полностью готовы к работе с YouTube.


И после этого отправляем этот запрос:

if ($fp = fsockopen ("gdata.youtube.com", 80, $errno, $errstr, 20))
$request ="POST /action/GetUploadToken HTTP/1.1\r\n";
$request.="Host: gdata.youtube.com\r\n";
$request.="Content-Type: application/atom+xml; charset=UTF-8\r\n";
$request.="Content-Length: ".strlen($data)."\r\n";
$request .="Authorization: GoogleLogin auth=AUTH_TOKEN\r\n";
$request.="X-GData-Client: API_NAME \r\n";
$request.="X-GData-Key: key=API_KEY \r\n";

$request.="\r\n";
$request.=$data."\r\n";
socket_set_timeout($fp, 10);

fputs($fp,$request,strlen($request));
$response = fread($fp,3280);
fclose($fp);

Полученные от сервера данные сохранились в переменной $response. Ответ будет представлен в виде atom/xml, где нас больше всего интересуют два тега: — содержащий URL загрузки и , содержащий токен загрузки. Получить нужные данные мы можем, например так:

preg_match("!(.*?)!si",$response, $url);
preg_match("!(.*?)!si",$response, $token);

После этого, мы вполне можем сформировать форму для загрузки видео. Она будет выглядеть например так:
<form action="$url[1]?nexturl=URL_нашего_сайта_куда_передать_данные_после_загрузки" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="hidden" name="token" value="$token[1] " />

<input type="submit" value="go" />

</form>

После загрузки, если она прошла успешно сервер YouTube переправит браузер пользователя на URL_нашего сайта_куда_передать_данные_после_загрузки с уникальным кодом YouTube видео в адресной строке.

Ну, собственно и все, на этот раз. В этой своей заметке я намерено не затрагивал тему обработки ошибок, все это описано в документации, или познается эмпирическим путем. В следующий раз расскажу о проверке загруженного видео, редактировании и удалении.

Читайте также: