Pull to refresh

Java API для smotri.com

Reading time 4 min
Views 1.1K
Возникло желание в одном из проектов использовать видео, предоставляемое видеохостингами. Выбор пал на youtube и smotri.com. О youtube много писать не буду, о них и так много написано =) К тому же, есть готовые реализации.

В качестве первоисточника выступал сайт с описанием использования API — http://api.smotri.com/. Ссылки на написанные классы (в исходниках и собранные) внизу. А пока небольшое описание процесса и впечатлений.

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

Документация


Документация в целом вроде бы четкая и по сути, но детали говорили о том, что куски копипастились без вычитки. Например метод «smotri.videos.list.converting». Название наводит на мысль о списке роликов пользователя, находящихся в процессе конвертации. Описание с моими мыслями не согласилось и поведало, что «Команда возвращает список всех видео указанного пользователя». Параметры, похоже, имели собственное мнение о личном предназначении, иначе чем объяснить параметр «необходимое количество похожих, от 1 до 100». Зарегистрировался и подписался на Trac, чтобы быть в курсе новых ошибок и их фиксов, заодно написал несколько замечаний по документации. За оставшееся до понедельника время набросал скелет будущей реализации, опираясь на понятные части документации и здравый смысл. Местами в документации встречались громкие фразы о том, что можно сделать с помощью API полностью свой дубликат смотри.ком, хотя предоставляемой информации явно не хватало. Впрочем часть недостающих команд удалось восполнить здравым смыслом, часть так и не хватает, может появится в будущем.

Ура! Ключ!


В понедельник пришло письмо от службы поддержки с просьбой описать, зачем мне нужен ключ и что я собрался разрабатывать. После моего ответа вскоре мне пришел идентификатор и пароль разработчика, с предложением зарегистрироваться в trac-е для получения оперативных ответов от разработчиков. Письма явно шаблонные, но составлены хорошо, читать приятно =) Впечатления от переписки положительные.
Ключ есть, можно начинать первые тесты. Хотелось видеть страничку, куда можно вбить параметры и посмотреть на результат вызова метода, но таковой не нашлось. Потому сделал html файлик на диске, который AJAX-ом посылал запрос и показывал результат. Правда, с учетом того, что между доменами браузеры AJAX запросы должны блокировать, пришлось тестировать в IE6, который не заморачивается по этому поводу. В результате мне эта страничка помогла отловить несколько ошибок. Хорошо бы видеть такую страничку на сайте api.
Дальше писал код, читал документацию, ругал себя за тупые ошибки и сайт за неполную и/или некорректную информацию.

Что получилось


Получился набор классов, позволяющих работать с видео примерно в таком стиле:
// Начинаем работу
SmotriComService service = new SmotriComService(devId, devPassword);
// Получаем сервис авторизации чтобы начать сессию и авторизоваться
// Авторизация понадобиться для комментариев
AuthService auth = service.getAuthService();
auth.startSession();
auth.authUser(userLogin, userPassword);
// Получаем сервис для работы с видео
VideoService video = service.getVideoService();
// Получаем список рубрик
List<Rubric> rubrics = video.getRubricList();
// Получаем топовое видео из первой встречной рубрики
VideoSearchResults res = video.getTopVideoList(rubrics.get(0));
// Выводим название рубрики, чтобы знать где искать
System.out.println("Рубрика: " + rubrics.get(0).getName());
// Выводим название, чтобы знать что мы прокомментили =)
System.out.println("Ролик:"+res.getVideos().get(0).getTitle());
System.out.println("URL:"+res.getVideos().get(0).getUrl());
// Комментим его, для чего нужен сервис комментариев
CommentsService comment = service.getCommentsService();
comment.addComment("Супер!", res.getVideos().get(0).getVideoId());
// далее идем на сайт и смотрим на результаты наших трудов =)

* This source code was highlighted with Source Code Highlighter.

Из недоработок


  • Не реализован метод smotri.videos.list.converting. Не смог разобраться =)
  • Не реализовани метод smotri.broadcast.rubric.list, т.к. без других комманд работы с вещаниями он на мой взгляд смысла не имеет
  • Комментарии в исходниках почти отсутствуют
  • Тесты написаны не на все методы, потому возможны ошибки (если что – пишите, буду исправлять)
  • Получение топового видео может выкидывать исключительную ситуацию, когда попадается ролик с длинным описанием. Тут я бессилен, т.к. проблемы со стороны smotri. В trac-е неделю назад написано, что эта ошибка исправлена, но новая версия не выложена на сервера.
  • Некоторые вещи сделаны не самым удобным образом. Если тема найдет поддержку – буду дорабатывать, писать документацию и реализовывать поддержку новых версий.

Файлики


Исходники (зеркало рапида, зеркало яндекс диск), скомпилированная версия (зеркало рапида, зеркало яндекс диск).
Зависимости: log4j, HttpClient
Демки работы в исходниках. В демки вставить свой идентификатор и пароль.
Tags:
Hubs:
+10
Comments 6
Comments Comments 6

Articles