суббота, января 29, 2011

Отмечание просмотренных серий на MyShows.ru

Оригинал с дополнениями, обсуждением и прочим здесь

Постановка задачи

Задача: автоматизировать рутинные действия по отмечанию просмотренных эпизодов на сайте myshows.ru. Поясню, после просмотра очередной серии Теории Большого Взрыва я открываю свой профиль, нахожу сериал, нахожу просмотренный эпизод и отмечаю его как «просмотренный».

После обнаружения api.myshows.ru сразу зародилась идея серьезно упростить этот процесс. Хотелось бы, чтобы это выглядело так: вызываем контекстное меню файла с только что просмотренной серией и выбираем «Отметить на myshows.ru».

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

API

Сначала было решено сделать обертку поверх их API на Ruby. Получилась ничем не примечательная библиотека myshows, использующая httparty для общения с сайтом. В силу общей занятости меня, в библиотеке реализован не весь функционал сайта, а только поиск сериалов/эпизодов и их отмечание, так как именно это необходимо для решения поставленной задачи. Вот пример использования:


Стоит заметить, что метод Profile#show, который ищет сериал по имени среди ваших сериалов, оптимизирован для поиска именно имен сериалов. Он может находить сериалы по аббревиатуре названия, по части названия, по названию без пробелов и так далее. Это сделано в связи с тем, что названия сериалов в имени файлов зачастую сильно коверкаются: lietome.s03e01.webdl.rus.novafilm.tv.avi вместо lie.to.me.s03e01.webdl.rus.novafilm.tv.avi, House.M.D.s07e01.rus.LostFilm.TV.avi вместо House.s07e01.rus.LostFilm.TV.avi и так далее.

Парсинг имени файла

Скрипт должен уметь, получив имя файла с серией, распознать в нем имя сериала, номер сезона и эпизода. Everybody stand back. I know regular expressions. Поискав по локальной сети форматы записи этой информации в имени файла, выделил два основных и написал соответствующие регулярные выражения:
  • title.s01e01.blah.blah.avi;
  • Title - 1x01 - Episode Title.avi.
Существуют так же вариации с другими разделителями или без них, это не сильно усложняет регулярные выражения. Они получается совсем нехитрые, Вы можете найти их в конечном коде скрипта в функции parse_filename.

Скрипт

Объединив парсинг имени файла и использование библиотеки myshows получается простой скрипт, который получив в качестве аргументов имена файлов, пытается отметить их в Вашем профиле и сообщает в stdout об успехе этого действия:


Имя пользователя и md5 пароля скрипт пытается вытащить из файла ~/.myshows, лучшего способа я не придумал.

Интеграция в файловый менеджер

Конечно этот скрипт можно использовать из других скриптов и из командной строки, но я все-таки смотрю сериалы открывая их двойным кликом в файловом менеджере.

Тут необходимо сказать, что я являюсь пользователем Mac OS X, и поэтому дальнейшие слова будут именно об интеграции ранее написанного скрипта с этой ОС. Если Вам это не интересно, можете перейти сразу к заключению.

Будем использовать Automator. Необходимо создать новую Службу, которая будет получать «выбранные файлы фильмов» в «любой программе».

Добавляем действие «Запустить shell-скрипт», выбираем в качестве языка «/usr/bin/ruby» с передачей ввода «как аргументов». Затем вставляем ранее написанный скрипт в поле для ввода скрипта, заменив то, что там было (для красоты можно удалить первую строку "#!/...").

Добавляем действие «Запустить AppleScript». Необходимо в каком-либо виде вывести информационные сообщения, которые печатал скрипт. Было решено воспользоваться функцией display dialog, получается примерно такой AppleScript:


Должно было получиться что-то похожее на это:


Служба готова к использованию, остается только сохранить и придумать имя. Теперь в Finder можно ее вызвать:


Заключение

Оно работает, это радует.

Измерения показали что среднее время работы скрипта 2-5 секунд на отмечание серий одного сериала, то есть отметить один эпизод сериала и десять займет примерно одинаковое время, а вот отметить пилотные серии десяти разных сериалов займет 20-50 секунд, что, в принципе, никому не нужно. Самое узкое место всей системы — это запросы к сайту и выкачивание больших списков эпизодов. Служба созданная Automator'ом работает по-дольше, есть постоянная добавка.

А теперь у меня есть обращение к тем, кого заинтересовала эта идея. Наверняка есть люди, которые отмечают сериалы на myshows.ru и пользуются Windows, KDE, Gnome, …. Сам Ruby-скрипт является кросс-платформенным, но вот интеграция с конкретным файловым менеджером — нет. В связи с этим ищутся люди, которые смогли бы рассказать, как интегрировать подобный Ruby-скрипт в их любимый файловый менеджер.

1 комментарий:

  1. CASINO.COM | Gaming, Dining, Events & More - JTM Hub
    JTM is a world leader in 고양 출장샵 gaming and entertainment, and 성남 출장안마 the largest 상주 출장샵 Casino 안동 출장안마 Rewards Center in 진주 출장안마 Las Vegas, Nevada! Enjoy our Live Casino Tables, Poker Room,

    ОтветитьУдалить