Opera Extension: Рейтинг фильма по версии IMDb и КиноПоиск

18 апреля 2011 г.

Введение

Все мы любим посмотреть вечерком какой-нибудь хороший фильм. На этапе поиска такого фильма на каком-нибудь трекере портале с легальным контентом хочется знать — стоит ли его вообще смотреть и тратить свое драгоценное время. Узнать рейтинг можно на сайтах типа КиноПоиск и IMDb. До недавнего времени приходилось заходить на эти сайты в поисках рейтинга.
С целью облегчить себе жизнь, начал искать какие-нибудь полезные сервисы, которые облегчили бы эту операцию и наткнулся на дополнение от КиноПоиск для FireFox, позволяющее получить рейтинг фильма и сделать прямой переход на его страницу, но в описании к расширению было указано:
PS. Специальные версии для Opera и Internet Explorer в ближайшем будущем не планируются.
Являясь ярым адептом Opera, я захотел незамедлительно исправить это досадное недоразумение. Уже в процессе написания расширения мне подумалось, почему бы не добавить и поддержку IMDb рейтинга, поскольку в ряде случаев он адекватнее КиноПоиска. Поскольку опыта в созданий расширений для Opera у меня не было, пришлось начинать с самых азов, но история в большей части не об этом.

Поиск доступных API

Хотя у КиноПоиск есть полноценный API, они не предоставляют к нему доступа всем желающим. Придется пользоваться тем, что есть. Немного почитав исходники FireFox дополнения, был найден вот такой url для API:
s.kinopoisk.ru/search/chrometoolbar.php?v=1&query=matrix
Подставляя в url название необходимого фильма, получаем json объект с такой структурой

{
	type:film,
	name:Matrix,The,
	rus:\u041c\u0430\u0442\u0440\u0438\u0446\u0430,
	year:1999,
	rating:8,0
}


В ходе тестирования API заметил, что рейтинг хоть и отображается дробно, но всегда округляется до целого – досадно, но от этого никуда не денешься.
В процессе поиска API для IMDb был найден вот такой сервис:
Возможностей у него больше, нежели у КиноПоиска. Для того чтобы получить необходимую информацию, достаточно перейти вот по такой ссылке.
www.imdbapi.com/?t=matrix
В результате получаем JSON объект с множеством полей. Нам достаточно четырех

{
	Title:The Matrix,
	Year:1999,
	Rating:8.7,
	ID:tt0133093
}

Создание расширение

В упомянутом ранее дополнении для FireFox выбор фильма производился простым выделением названия фильма на странице, я решил пойти другим путем по нескольким причинам:

  • Не хочется нагружать браузер лишней работой, когда это не нужно;
  • Особенности Opera API;
  • Я не люблю когда что-то в моем компьютере делается без моего ведома.

Следуя указанным выше ограничениям и почитав документацию к Opera API, пришел к следующей схеме взаимодействия:

  • При нажатии на кнопку popup сообщает background о готовности;
  • Background сообщает injected, что он готов принять выделенный текст;
  • Injected шлет background выделенный текст;
  • Background запрашивает IMDbAPI и КиноПоиск и шлет готовый к выводу текст popup;
  • Popup отображает полученные данные.
Некоторые моменты, доставившие немало для меня хлопот в Opera API
  • Событие onconnect для popup происходило два раза, из-за этого пришлось пересмотреть механизм общения popup с background скриптом;
  • Popup не может общаться с injected напрямую, но подробнее почитав API стало понятно почему: в качестве popup может быть открыт любой link, даже внешний;
  • Popup не может управлять своими параметрами. Опять же по причине, описанной в предыдущем пункте.

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

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

Opera Extension скриншот

Известные минусы и баги
  • Возможны ложные срабатывания: если не найдено точного совпадения, производится неточный поиск, что не всегда приводит к желаемому результату;
  • Выдается только один результат: фильмы c одинаковыми названиями – большая проблема;
  • IMDb не всегда правильно находит по русскому названию (как правило старые фильмы).

Надеюсь, это расширение будет кому-то полезно.
P.S. В данный момент расширение еще не прошло проверку в репозиторий Opera, поэтому даю ссылку на внешнее хранилище.

Теги: рубрика Интернет