YouTube API, продолжение: редактирование, удаление, получение мета-данных

    Несколько дней назад я опубликовал пост про загрузку видео на YouTube посредством API системы. Сегодня хочу представить продолжение, в котором будет рассказано про редактирование уже загруженных роликов, получение их статуса и удаление.

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

    Первым пунктом я отмечу факт, о котором в комментариях говорил iexx. А именно, был, упомянут класс Zend_Gdata. Класс действительно решает все описываемые задачи, своими же постами я просто показываю, на что способен YouTube API и демонстрирую примеры рабочего кода.

    Почти все запросы отправляются на обработчик gdata.youtube.com, в документации в зависимости от необходимого действия меняются методы отправки данных — это может быть PUT, POST, DELETE или GET – рекомендую на это обращать особое внимание.

    Как все знают, да я об этом упоминал в прошлом посте, каждое видео, размещенное на YouTube, получает свой уникальный 11-значный код, например eTpTy2Kvj4o, сразу после загрузки видео. Знание этого кода позволяет получать необходимую информацию о видео от сервера. Любое загруженное видео, проходит процедуру кодирования на серверах видеохостинга, и время, которое понадобится для выполнения этой операции, зависит от загруженности серверов хостинга, и собственно размера видео.

    До тех пор, пока видео не будет кодировано и не получит соответствующий статус, мы не сможем по понятным причинами ни редактировать его, ни получать мета-данные о размещенном видео.
    Для получения мета-данных, и значения статуса видео необходимо обратиться GET`ом к странице gdata.youtube.com/feeds/api/videos/КОД_ВИДЕО, например http://gdata.youtube.com/feeds/api/videos/eTpTy2Kvj4o (посмотрите в браузере). Если сервер возвращает 404-ошибку, это может означать, что видео не существует, или оно еще не прошло кодирование. Иногда, в своем аккаунте YouTube вы можете видеть видео, но через GData интерфейс оно еще не будет доступно – так бывает. Минут через 15-20 все встанет на свои места.

    Ответ сервера представлен в виде куска XML в формате Atom (смотрите приведенную выше ссылку), из него мы можем вытащить мета-данные, например, название, имя автора, размер видео, теги, категорию, получить массив тумбнейлов и так далее. То есть, получение данных о видео сводится к тривиальной задаче парсинга XML.

    Процедура редактирования видео очень похожа на процедуру сохранения мета-данных о видео, перед загрузкой. Сначала формируем XML, в котором перечислены название, описание, категория и теги:

    $data = "<?xml version='1.0'?>
    <entry xmlns='http://www.w3.org/2005/Atom'
    xmlns:media='http://search.yahoo.com/mrss/'
    xmlns:yt='http://gdata.youtube.com/schemas/2007'>
    <media:group>
    <media:title type='plain'>$name</media:title>
    <media:description type='plain'>".$descr."</media:description>
    <media:category scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>".$category."</media:category>
    <media:keywords>".$tags."</media:keywords>
    </media:group>
    ";


    После этого методом PUT отправляем этот кусок на gdata.youtube.com /feeds/api/users/YOUTUBE_USERNAME/uploads/КОД_ВИДЕО, например таким образом:

    if ($fp = fsockopen ("gdata.youtube.com", 80, $errno, $errstr, 20))
    {
    $request ="PUT /feeds/api/users/YOUTUBE_USERNAME/uploads/КОД_ВИДЕО" 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));
    }


    Все, данные отправлены! Я опять же умышленно обхожу стороной вопрос обработки ошибок, оставляя это на совести программиста. Значение API_NAME, API_KEY и других – смотрите в прошлом посте.

    И, наконец, удаление видео. Здесь опять же все очень просто, меняется только метод «доставки данных», на этот раз – это DELETE. Код в этом случае будет примерно такой:

    if ($fp = fsockopen ("gdata.youtube.com", 80, $errno, $errstr, 20))
    {
    $request ="DELETE /feeds/api/users/YOUTUBE_USERNAME/uploads/КОД_ВИДЕО" HTTP/1.1\r\n";
    $request.="Host: gdata.youtube.com\r\n";
    $request.="Content-Type: application/atom+xml; charset=UTF-8\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";
    socket_set_timeout($fp, 10);

    fputs($fp,$request,strlen($request));
    fclose($fp);
    }


    Ну, вот собственно и все, о чем я хотел рассказать сегодня в частности, и о YouTube API в целом. Остальные задачи вполне решаемы и покажутся простыми при чтении документации.
    • +19
    • 12,1k
    • 8
    Поделиться публикацией
    Похожие публикации
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 8
      0
      Полезный пост :-)
      Особенно для начинающих :-)
        0
        Спасибо. Надо будет потыкаться…
          0
          А есть ли возможность, если уже получен список видео в плейлисте пользователя, проиграть этот плейлист на своей странице, чтобы также как и на ютуб, один ролик закончился, начался следующий?
            0
            Думаю, что возможность есть. Но я не пробовал делать такое.
            0
            Большое спасибо! Вот уж не думал что получение данных о видео может быть таким простым :)
              0
              www.vchechne.ru/video.php реализован скрипт, который добавляет не только видео с ютуби, но и др. видео-сервисов.
                –2
                Автор, пост следовало назвать «Основы REST для чайников».
                  0
                  Спасибо за статью, поиграюсь на выходных =)

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое