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, и получаем желанный рейтинг:
Известные минусы и баги
- Возможны ложные срабатывания: если не найдено точного совпадения, производится неточный поиск, что не всегда приводит к желаемому результату;
- Выдается только один результат: фильмы c одинаковыми названиями – большая проблема;
- IMDb не всегда правильно находит по русскому названию (как правило старые фильмы).
Надеюсь, это расширение будет кому-то полезно.
P.S. В данный момент расширение еще не прошло проверку в репозиторий Opera, поэтому даю ссылку на внешнее хранилище.