Если вы хотите следить за Олимпиадой, но не желаете связываться с телевидением, то один из источников — это любимый трекер. И вроде бы всё хорошо, но правообладатели закрывают раздачи в течение пары часов после их появления. Печаль.

Что же делать? Проще всего вернуться к TV или смотреть в онлайн с сайтов типа е-икс юа. Меня это не устраивает, хочется хорошего качества и оперативности. Поэтому нужно отлавливать новые раздачи в нужном качестве сразу же после их появления и списывать, пока копирасты не закрыли.

Вручную? Можно, но для меня неудобно. Значит автоматизировать.

Первым делом нашёл решение на базе Automatic, оно описано в статье “How to autodownload RSS feeds in OS X Transmission”. Интересно то, что второй найденной статьёй была “Автоматизация загрузки торрентов в Mac OS X” Павла Вязового. Мир тесен.

Решение хорошее, но Automatic не смог обратотать линки в RSS-фиде вида ‘link href=”viewtopic.php?t=4667069”’ в фиде трекера, содержащем раздачи, да и списать torrent-файлы без авторизации нельзя.

В статье Павла увидел упоминание “популярного, но сложного flexget”. И понял, что это именно то, что нужно. Очень мощная система, с ней можно сделать практически всё. Ценой непростого изучения. В процессе изучения мне попалась заметка “Flexget-конфиги”, благодаря ей я смог быстро решить вопрос с авторизацией.

Я активно использую virtualenvwrapper, ставлю flexget в виртуальном окружении

$ mkvirtualenv flexget
$ easy_install flexget
$ easy_install transmissionrpc
$ easy_install mechanize
$ rehash

Конфигурационный файл c1.yaml. Меня интересуют пять разделов Олимпиады, в них — видео качества 1080i и 720p.

templates:
  global:
    regexp:
      accept:
        - '1080i'
        - '720p'
      from: title
      rest: reject
    set:
      dl_link: "{{url|replace('http://rutracker.org/forum/viewtopic.php?t=','http://dl.rutracker.org/forum/dl.php?t=')}}"
      dl_id: "{{url|replace('http://rutracker.org/forum/viewtopic.php?t=','')}}"
    exec: curl -e "{{url}}" -b "bb_data=INSERT_YOURS_BB_DATA;bb_t=INSERT_YOURS_BB_T_DATA;bb_dl={{dl_id}}" "{{dl_link}}" > /Volumes/Data/Downloads/{{dl_id}}.torrent

tasks:
  task Санный спорт:
    rss: http://feed.rutracker.org/atom/f/2425.atom
  task Фигурное катание:
     rss: http://feed.rutracker.org/atom/f/2416.atom
  task Обзорные и тематические передачи:
     rss: http://feed.rutracker.org/atom/f/1637.atom
  task Лыжный спорт:
     rss: http://feed.rutracker.org/atom/f/2317.atom
  task Биатлон:
     rss: http://feed.rutracker.org/atom/f/2213.atom

schedules:
  - tasks: '*'
    interval:
      minutes: 5

Обратите внимание, что нужно вставить ваши значения cookie в команду curl и указать ваш каталог для торрентов. Cookies берутся отсюда:

Внимание! Если Transmission начал ругаться на то, что torrent в неправильном формате, то скорее всего cookie или неправильные, или устарели. Нужно перелогинится в браузере и снова вписать в конфиг-файл изменённые значения. По идее в flexget есть механизмы работы с формами и можно сделать полноценное залогиниванье, желающие могут попробовать это реализовать. Кроме этого придётся удалить файл db-c1.sqlite, где помечаются уже “обработанные” раздачи (это не совсем правильно, но если у вас в flexget обрабатываются только эти конфиги, то пройдёт), уже скачанные файлы подхватятся после переписывания torrent-файла.

Фиды генерируются в нужном разделе:

Запуск программы для проверки:

$ workon flexget
$ flexget -L info -c c1.yaml execute

Если нужно более детальная отладочная информация, то замените “-L info” на “-L debug” или даже “-L trace”.

Когда всё заработает, то можно запустить программу в режиме демона:

$ flexget -L verbose -c c1.yaml daemon start

Если нужно заставить программу проверить rss’ы прямо сейчас, то вариант с “execute” передаст команду демону.

Transmission нужно сказать следить за каталогом, куда записываются файлы torrent. Раз в 5 минут flexget проверяет фиды, для новых записей, удовлетворяющим фильтру, списываются торренты, их подхватывает Transmission, и они автоматически списываются.

Вот что получилось (все файлы добавились автоматически без моего вмешательства):

Дальше в моей схеме происходила автоматическая перекодировка в формат AppleTV и запись результата в каталог синхронизации BTSync для передачи на ноутбук, однако оказалось, что iFlicks2 для видео в формате .ts (1080i) записывает только звуковую дорожку и не кодирует видео. Так что отработанная схема нарушилась. После чего я в сердцах плюнул на “невыносимую лёгкость просмотра видео в мире Apple” и заказал медиаплеер iNext HD1 W (спасибо всем откликнувшимся на ту статью).