Как стать автором
Обновить

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

Введение


Все мы любим посмотреть вечерком какой-нибудь хороший фильм. На этапе поиска такого фильма на каком-нибудь трекере портале с легальным контентом хочется знать — стоит ли его вообще смотреть и тратить свое драгоценное время. Узнать рейтинг можно на сайтах типа КиноПоиск и 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, и получаем желанный рейтинг:
Movie Rating

Известные минусы и баги

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

Надеюсь, это расширение будет кому-то полезно.
P.S. В данный момент расширение еще не прошло проверку в репозиторий Opera, поэтому даю ссылку на внешнее хранилище.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.