![](https://habrastorage.org/webt/r7/mr/mn/r7mrmnpns2sclvhcpe27pdohz8q.png)
В большинстве случаев качественные нелегальные раздачи какого-то фильма начинают появляться только после цифрового релиза (не путайте цифровые релизы с премьерами в кинотеатрах), т.е. в VOD-сервисах или на Blu-ray. Под качественными подразумеваются BDRip 1080p, BDRemux и UHD BDRemux, самый минимум — это WEB-DL 1080p (чаще всего из iTunes), с русскоязычными звуковыми дорожками от лицензионного издания Blu-ray или из iTunes. А до этого с раздачами фильма творится чехарда с комбинацией мха и опилок, которая может ввести в заблуждение зрителя, желающего смотреть новинки с хорошим качеством.
Кстати, вы знали, что какие-то ребята недавно взломали Apple TV 4K? Теперь все релизы 4K с HDR и дорожками Dolby Atmos из iTunes будут попадать в сеть, как недавно попал релиз Аквамен (WEB-DL 2160p HDR). Битрейт там стыдный, но лучше, чем ничего до выхода (UHD) Blu-ray. Бокс Apple TV был взломан давно, а iTunes служит конвейерным поставщиком качественных дорожек Dolby Digital 5.1 с русским дубляжом.
ВНИМАНИЕ! В заметке идёт речь о нелегальном контенте. Но никаких ссылок на этот нелегальный контент, как и самого нелегального контента, в заметке нет.
ВНИМАНИЕ! Заметка не оправдывает использование нелегального контента. Нелегальный контент — это плохо, без всяких споров.
ВНИМАНИЕ! В заметке содержится информация об использовании двух методов частного API КиноПоиск (/k/v1/films/releases/digital и /ios/5.0.0/getKPFilmDetailView), которые нарушают правила использования сервиса КиноПоиск. Хоть разные методы из API КиноПоиск используются в сотнях программ и на сайтах вне правил, это является формальным основанием, чтобы снять заметку с публикации при запросе.
Программу из заметки я сделал (на Python, гарантирована работа на версии 3.6.x и старше, например, на последней в момент публикации 3.7.2) для себя за пару вечеров. Делюсь ей, потому что она может оказаться кому-то полезной.
Суть в следующем… Программа раз в сутки загружает список всех цифровых релизов за последние 60 дней (из КиноПоиск). Для каждого релиза на rutor ищутся раздачи высокого качества. rutor является открытым торрент-трекером с хорошим тегированием в раздачах. Если качественных раздач пока нет, то релиз исключается. Никаких авторских или кустарных переводов, никаких Line. Только BDRip 1080p (или BDRip-HEVC 1080p), BDRemux и UHD BDRemux с русскими дорожками с лицензионного диска или iTunes, или любой другой официальный дубляж. В случае, когда для релиза нет пока ещё BD, отображается ссылки на WEB-DL 1080p и WEB-DL 2160p (чаще всего из iTunes). Из нескольких раздач одинакового типа выбирается одна с большим количеством сидеров (например, бывает две раздачи одного типа от двух популярных релизных групп сразу). Все релизы отсортированы по среднеарифметическому между рейтингом КиноПоиск и IMDb. Для всех релизов подгружается информация с КиноПоиск. Программа формирует удобный HTML, просто в браузере открываете ссылку и выбираете, что из новинок посмотреть в отличном качестве — нажимаете кнопку и получаете актуальный торрент-файл. Больше не нужно перебирать и искать правильную раздачу, изучать, есть ли уже фильм с отличным качеством видео и дубляжом — открываете страничку и всё у вас перед глазами.
Вот пример результата от 13.03.2019, который вы получите (ссылки на торрент-файлы в примере искажены, чтобы ничего не нарушать).
![](https://habrastorage.org/webt/co/8x/zv/co8xzv_axjr0af6jfl0z2gr3ebo.png)
В идеальном случае WEB-DL 1080p и WEB-DL 2160p (SDR, HDR) нужно исключить. Но суть в том, что некоторые релизы так и не выйдут никогда на Blu-ray, при этом они доступны в iTunes с приемлемым качеством и качественной звуковой дорожкой. Так что отказаться от WEB-DL 1080p и WEB-DL 2160p нельзя. Тем более, фанаты Apple (владельцы Apple TV) потребляют контент такого качества и не жалуются. Например:
![](https://habrastorage.org/webt/xx/js/3q/xxjs3qu937zo48_r8gia7kzzqlm.png)
Программа на Python и может работать где угодно — на компьютере, на выделенном сервере, на маршрутизаторе с поддержкой менеджера пакетов ПО (например, OpenWrt или с поддержкой Entware), на утюге.
В заметке я рассмотрю случай, когда программа будет крутиться на маршрутизаторе с поддержкой Entware. В моём случае Keenetic. Это очень просто, удобно и эффективно.
Установка необходимых пакетов на маршрутизаторе
opkg update
opkg install wget ca-certificates mc python3 python3-pip lighttpd-mod-cgi cron
wget — программа для загрузки файлов. Она понадобится только для первоначальной настройки.
ca-certificates — сертификаты для wget.
mc — файловый менеджер Midnight Commander. Он нужен лишь из-за удобного редактора mcedit. Если вы привыкли пользоваться другим текстовым редактором, то mc можно не устанавливать.
python3 — интерпретатор Python.
python3-pip — менеджер пакетов Python.
lighttpd-mod-cgi — веб-сервер lighttpd.
cron — планировщик заданий.
Загрузка основного файла программы
mkdir -p /opt/etc/movies
wget --no-check-certificate -O /opt/etc/movies/digitalreleases.py https://raw.githubusercontent.com/Kyrie1965/torrentReleases/master/digitalreleases.py
Посмотреть его содержимое можно на GitHub.
Сама программа состоит из 5 функций:
digitalReleases(days) возвращает массив с элементами filmID, цифровые релизы за количество дней days.
filmDetail(filmID) возвращает словарь с информацией по фильму, соответствующему filmID.
rutorLinks(filmID) возвращает словарь с раздачами, соответствующими filmID.
saveHTML(movies, filePath) формирует HTML-файл по пути filePath из массива movies.
main() — соединяет всё вместе.
В самой программе, если вы планируете использовать её по прямому назначению, вам будет интересны только три изменяемых параметра: DAYS, HTML_SAVE_PATH, SOCKS_IP, SOCKS_PORT. DAYS — за сколько последних дней загружать цифровые релизы. По умолчанию 60. О SOCKS_IP, SOCKS_PORT я расскажу позже, когда речь пойдёт об обходе блокировок. Если вы захотите изменить параметры в программе, то откройте файл в редакторе, например, mcedit, измените и сохраните (F2 — сохранить, F10 — выйти).
mcedit /opt/etc/movies/digitalreleases.py
Конфигурация и запуск веб-сервера
Веб-сервер нужен для того, чтобы устройства в локальный сети через браузер могли забирать генерируемый файл releases.html. Откройте файл /opt/etc/lighttpd/lighttpd.conf:
mcedit /opt/etc/lighttpd/lighttpd.conf
Чтобы вставить из буфера, используйте Shift+Insert, сохранить — F2, выйти — F10.
Измените строку #server.port = 80 на:
server.port = 81
Запустите веб-сервер:
/opt/etc/init.d/S80lighttpd start
Добавление задания в cron
Добавим в cron задачу, которая каждый день в 6 утра будет запускать digitalreleases.py и генерировать актуальный файл с релизами.
Откройте в редакторе файл /opt/etc/crontab:
mcedit /opt/etc/crontab
Добавьте в конце (замените root на admin в зависимости от вашего устройства):
00 06 * * * root /opt/bin/python3 /opt/etc/movies/digitalreleases.py > /opt/etc/movies/log.txt 2>&1
При желании вы можете закомментировать все остальные шаблонные задачи. Запустите cron:
/opt/etc/init.d/S10cron start
Финальная настройка
Запустите программу вручную в первый раз, чтобы она сгенерировала файл /opt/share/www/releases.html:
python3 /opt/etc/movies/digitalreleases.py
![](https://habrastorage.org/webt/w5/fh/29/w5fh29-9ghcdnk8ertgmt-1y3uy.png)
В дальнейшем с помощью cron файл releases.html будет обновляться раз в сутки автоматически.
Всё готово! Откройте в браузере на любом устройстве в вашей локальной сети ссылку http://192.168.0.1:81/releases.html (замените 192.168.0.1 на адрес вашего маршрутизатора).
![](https://habrastorage.org/webt/qx/3o/u4/qx3ou4tiup7w-qfwdfuuzcazzpy.png)
Дополнение об обходе блокировок
В заметке подразумевается, что сайт rutor.info доступен у вас с маршрутизатора. Если это не так, например, он заблокирован, то при выполнении digitalreleases.py вы получите соответствующее сообщение.
Решить это очень просто. Если у вас на маршрутизаторе ещё не установлен сервис Tor, то установите его:
opkg update
opkg install tor tor-geoip
Если Tor уже был установлен, то в файле конфигурации (/opt/etc/tor/torrc) просто добавьте строчку:
SOCKSPort 127.0.0.1:9050
Если Tor не был установлен до этого, то удалите содержимое конфигурационного файла Tor:
cat /dev/null > /opt/etc/tor/torrc
Откройте файл конфигурации Tor в редакторе:
mcedit /opt/etc/tor/torrc
Вставьте (Shift+Insert) содержимое:
User root
PidFile /opt/var/run/tor.pid
ExcludeExitNodes {RU},{UA},{AM},{KG},{BY}
StrictNodes 1
SOCKSPort 127.0.0.1:9050
ExitRelay 0
ExitPolicy reject *:*
ExitPolicy reject6 *:*
GeoIPFile /opt/share/tor/geoip
GeoIPv6File /opt/share/tor/geoip6
DataDirectory /opt/var/lib/tor
Замените root на admin в зависимости от вашего устройства.
Краткое описание конфигурации:
- Исключить выходные узлы: Россия, Украина, Армения Киргизия, Беларусь.
- Повесить SOCKS прокси на адрес 127.0.0.1, порт 9050.
- Запретить быть точкой выхода.
Запустите/перезапустите Tor:
/opt/etc/init.d/S35tor restart
Теперь нужно сделать так, чтобы в функции rutorLinks реквесты шли через запущенный прокси-сервер. Для этого установите библиотеку pysocks:
pip3 install --upgrade pip setuptools
pip3 install pysocks
Откройте digitalreleases.py и измените:
SOCKS_IP = "127.0.0.1"
SOCKS_PORT = 9050
Готово, теперь никаких проблем с блокировками rutor для программы.
UPD.
18.03.2019:
- Исправлен баг с неверным формирование ссылки на торрент-файл, когда rutor отдаёт относительные ссылки на торрент-файлы, а не абсолютные.
- Исправлен баг с неверным учётом сидеров, когда раздач одного типа больше двух.
- Добавлена ссылка на страницу фильма в КиноПоиск (нажмите на рейтинг КиноПоиск).
- Добавлен параметр USE_MAGNET. Использование Magnet-ссылок вместо ссылок на торрент-файлы — True, False. По умолчанию False.
- Добавлен параметр SORT_TYPE. Тип финальной сортировки. rating — сортировка по рейтингу, releaseDate — сортировка по дате цифрового релиза релиза. По умолчанию rating.
19.03.2019:
- Исправлен баг при парсинге страницы с торрентами.
- Добавлена возможность выбора сортировки по дате появления торрентов — torrentsDate.
- Добавлена загрузка цифровых релизов за дополнительные 7 дней после текущей даты, т.к. иногда цифровой релиз появляется немного раньше официальной даты.
21.03.2019:
- Исправлен учёт и отображение рейтинга, когда рейтинг КиноПоиск отсутствует.
22.03.2019:
- Добавлена возможность сортировки в браузере (с помощью JS): по рейтингу, по дате цифрового релиза, по дате торрент-релиза.
22.03.2019:
- Добавлена сортировка по комбинированной дате.
26.03.2019:
- Новая версия программы. Пока в виде файла с индексом «2» digitalreleases2.py. Ещё кое-что пробую, но в целом всё работает очень хорошо.
Предыдущая версия программы оказалась малопригодной для других проектов. Вся проблема в выдаче цифровых релизов от КиноПоиск. Многих новых фильмов просто нет в этом списке. Из-за этого поставленная задача не реализуется программой.
В новой версии большая часть переписана завново, лишь взяты некоторые наработки из предыдущей версии. Доработан принцип отбора качественных раздач. Исправлены ошибки (в старой версии они уже не будете исправлены). Уже сейчас результат её работы полностью соответствет поставленной задаче.
Раньше список фильмов строился по схеме: Цифровые релизы с КиноПоиск > Поиск соответствий на Rutor для каждого фильма > Формирования списка фильмов, используя данные КиноПоиск. В новой версии: Поиск предварительно подходящих релизов на Rutor и их обработка > Формирование списка фильмов и дополнительная обработка подходящих фильмов, используя данные КиноПоиск.
Новая версия работает медленнее, но результат того стоит.
Для новой версии требуется дополнительная библиотеки Beautiful Soup 4 (в остальном никаких отличий по установке и запуску):
pip3 install beautifulsoup4
Вот пример результата от 26.03.2019 (ссылки на торрент-файлы в примере искажены, чтобы ничего не нарушать).
28.03.2019 (digitalreleases2.py):
- Добавлен дополнительный поиск качественных раздач на kinozal.tv.
Если в найденых элементах отсутствует BDRip 1080p (но есть BDRemux) или отсутствует BDRemux (но есть BDRip 1080p), то будет произведён дополнительный поиск нужной качественной раздачи на kinozal.tv. Поиск будет производиться только при ключе USE_MAGNET = True, т.е. результат такого поиска — magnet-ссылки. Чтобы задействовать дополнительней поиск по kinozal.tv, вам нужно указать параметры KINOZAL_USERNAME и KINOZAL_PASSWORD. Не волнуйтесь, в финальном файле будут magnet-ссылки, не связанные с вашей учётной записью. Учётная запись нужно только для того, чтобы получить доступ к magnet-ссылке на самом сайте kinozal.tv.
29.03.2019 (digitalreleases2.py):
- Добавлен учёт рейтинга MPAA для возраста (если отсутствует ratingAgeLimits).
- Добавлен учёт АРК-ТВ Studio и Кириллица (они в фильмах очень редко, но встречаются) для релизов с Netflix.
- Небольшие правки.
01.04.2019 (digitalreleases2.py):
- Множество исправлений.
Вот, как обычно, пример результата от 01.04.2019 (ссылки в примере искажены, чтобы ничего не нарушать).