Всем привет! Этой мой первый пост на Habr (да и вообще, если не считать GitHub). Хочу поделиться работой, на реализацию который у меня ушло около месяца, но тем не менее сейчас используется ежедневно и планирую развивать в дальнейшем. Задумка была таковой, что бы донести любой (бесплатный????‍☠️) контент до телевизора используя под рукой только телефон, например, если я еду в метро или нет желания (вставать с дивана) и возможности подойти к компьютеру. На самом деле причина реализации чуть глубже и проще, под управление контента на повседневный вечер я делегировал супруге, знатно помучив ее своими «проверь» и «посмотри» на протяжении всего этого бессонного месяца, за что конечно, отдельное спасибо! За источник контента отвечает трекер Кинозал, который, к слову, я использую уже 4 года и меня он устраивает во всем.

Цель проекта:

  1. Генерация постов с отправкой в Telegram канал на основе новых публикаций в трекере Кинозал с фильтрацией по рейтингу и году выхода. Канал Kinozal-News функционирует публично. На это у меня ушел всего день.

  2. Автоматизация процесса доставки контента до телевизора. Выбор (предложенного из поста канала или при ручном поиске в боте) и загрузка подходящего по разрешению, озвучке или размеру торрент-файла (используя предложенные рекомендуемые ссылки к каждой публикации в боте), постановка на загрузку в qBittorrent с возможностью управления, отслеживанием статуса а так же изменением приоритета загрузки файлов, и синхронизации контента с Plex Media Server.

Используемый технологический стек:

  • Кинозал. Используется для чтение RSS-ленты, получение данных из html (сайт достаточно старый, но тем не менее очень удобный, на сколько мне известно, api отсутствует, даже если нет, парсинг с данного сайта не сложнее, чем обращения к объектам json на прямую), поиск и фильтрация контента, и конечно загрузка торрент файлов;

  • Proxy-сервер (опционально, для доступа в Кинозал, можно отключить в конфигурации);

  • Telegram api. Отправка сообщений в канал, а так же чтение (только команд) и отправка ответных (обновление) сообщений в формате меню (keyboard) в боте;

  • qBittorrent api. Торрент клиент, используемый для загрузка данных из торрент-файлов и управление данными (пауза, удаление, изменение приоритета);

  • Plex Media Server api. Синхронизация данных и получение информации о содержимом секций и дочерних файлах.

  • WinAPI. Планирую добавить в последующих версиях. Будет использоваться для отображения текущего места на диске (и в целом состояния системы), интерактивного просмотра содержимого и размера загруженных директорий и файлов с возможностью их удаления а так же удаленного запуска и остановки приложений Plex и qBittorrent через собственную реализацию Windows API на базе PowerShwell и .NET HTTP Listener (серверная часть уже готова).

Один из ключевых моментов, был выбор языка. Изначально я начал писать на PowerShell, т.к. активно практикую его уже полтора года на ежедневной основе и был небольшой опыт написания Telegram-бота, но т.к. пару месяцев назад начал использовать Bash, подумал, почему бы и нет, к тому же его можно запустить и в ОС Windows (нет, не можно, фоновый задания выдают синий экран, проверил на 2-х железках) используя оболочку из пакета Git или Mobaxterm, и в конечном итоге хотелось крутить скрипт на удаленной Linux-машине.

Второй момент, это доступ в Кинозал. Здесь для меня было принципиально важно реализовать бесплатный способ, и т.к. я не знаю варианта бесплатного VPN-сервиса без GUI к тому же необходимо было использовать его в режиме Split Tunneling, выбор пал на систему Windows в связке с Proxy-сервером. Тут я не стал прибегать к привычным мне и популярным решениям (например, squid, 3proxy, tiny) и остановился на очень функциональном и удобном HandyCache (к сожалению, нет обновлений с января 2020 года), к слову, рекомендую к ознакомлению.

Сам же скрипт работает в режиме фоновых процессов (всего таких 2, которые в свою очередь создают дочерние процессы и во главе всего стоит Bash), не требует настройки unit в системе, можно запускать скрипт и выходить из системы, для остановки используется встроенная команда stop. В моей системе на Ubuntu Server 22.04 в Hyper-V при перезагрузке хоста с гипервизором, машина продолжает работать самостоятельно, т.к. выходит из паузы и не успевает терять пакеты до хостовой машины с Proxy (настроен автостарт на пару с VPN). Работоспособность протестирована на нескольких версиях Ubuntu Server и двух гипервизорах (VMWare Workstation и Hyper-V), вторая, в одинаковой конфигурации почему-то работает гораздо быстрее. Из зависимостей только пакет jq, в остальном это стандартный инструментарий интерпретатора Bash.

Сам же бот и все его команды, за исключением ручного поиска (/search) автоматизированы в меню с помощью кнопок. Привожу скриншоты с примерами:

Типовой пример с информацией к каждой публикации через бота.
Типовой пример с информацией к каждой публикации через бота.

Например, скопировав команду из канала выбранной публикации, или выбрав фильм/сериал, используя меню и команду /search с искомым текстом (можно получить до 50 ссылок в формате кнопок), мы получим описание, аналогичное каждой публикации в канале, только с кнопками. Отсюда уже есть возможность выбрать другую (рекомендуемую по названию) ссылку, где будет отличное разрешение, возможно озвучка, размер и т.д. Используя кнопку скачать торрент файл, мы загружаем сам .torrent файл в директорию, которая указана в конфигурации (на машине со скриптом), в дальнейшем при добавлении на загрузку этот торрент файл будет передать торрент клиенту. Из этого же пункта меню можно удалить сам торрент файл из системы (если ранее он уже был скачен), а так же можно отобразить список всех загруженных торрент файлов, используя кнопку "Torrent files".

Так выглядит меню загружаемых торрент-файлов в торрент клиенте а так же результат поиск командой /search .
Так выглядит меню загружаемых торрент-файлов в торрент клиенте а так же результат поиск командой /search .

Все торрент файлы, который добавлены в торрент клиент, отображаются в меню qBittorrent с их текущим статусом. При выборе, можно получить всю подробную информацию о загрузке с возможностью управления. Например, можно увеличить приоритет на 1-й серии и отслеживать только ее статус загрузки, или пропустить загрузку конкретной серии.

Информация о загрузке в торрент клиенте qBittorrent.
Информация о загрузке в торрент клиенте qBittorrent.

Итак, мы определились с сериалом или фильмом, загрузили его на удаленный компьютер, нам осталось синхронизировать его в Plex Media Server, что бы он сразу отобразилось в приложении на вашем телевизоре (или Web-клиенте, неважно). Для этого используется меню Plex. Тут необходимо выбрать нужную секцию (куда вы загружаете торрент клиентом и заранее эту директорию уже добавили на медиа сервер) и нажать кнопку "Синхронизировать данные". Далее вы можете отобразить содержимое директории, что бы проверить результат:

Простым способом (без использования кнопок, иначе это было бы не столь интерактивно при большом количестве контента) реализована возможность получения подробной информации о всех дочерних файлах в каждой директории через api Plex.

Инструкция по настройки как и сам бот опубликованы на GitHub. Есть много других идей, например добавить описание или другую полезную информацию из TMDb или kinopoisk, подключить другой торрент клиент, возможно трекер или добавить синхронизацию с Kodi. Лично для моих целей не хватает пока что функционала WinAPI. Принимаю идеи для развития и улучшения данного проекта, если возникнут вопросы или проблемы при настройке или работе, контакты для связи в профиле.

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

Комментарии (6)


  1. MountainGoat
    20.12.2023 17:34

    А я скажу, как это сделать проще. На домашнем сервере поднимаете Radarr, и одним из тысячи способов обеспечиваете доступ к его веб-моське с мобильника. Работает великолепно. Днём захотелось контента - зашёл, нашёл, выбра - к вечеру скачалось.


    1. Dolios
      20.12.2023 17:34

      Давно уже использую телевизор в качестве монитора, который подключен к мини-пк. Также к этому мини-пк подключен пульт, который работает как мышь и настроена экранная клавиатура. У меня сделаны отдельные ярлыки на рабочем столе, которые открывают браузер с ютубом, поставщиком IPTV, у которого контент прямо в браузере смотреть можно и VLC. Но если кто-то считает это колхозом, можно Kodi поставить, мне не зашло как раз из-за их реализации ютубовского плагина. В сеть вывешен веб-интерфейс Transmission-а.

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

      А еще телевизор никакую телеметрию никуда не шлет, т.к. доступ в интернет у него отключен.


    1. Lifailon Автор
      20.12.2023 17:34

      Вероятно, название статьи неверно передает суть названия самой работы (мое упущение). Риддер немного не то. Цель другая, во первых удобство в интерфейсе (хотя тут на любителя, но для меня это было важно) и нет необходимости пробрасывать порты, не всех есть такая возможность и желание. Во вторых, что более ключевое, вся суть в Кинозале, я привык нему и хотелось оптимизировать доступ непосредственно к данному трекеру. Просматривать и искать контент с сайта, особенно через телефон мне стало крайне неудобно, т.к. делаю это регулярно, не говоря про необходимость использования vpn и желание делегировать этот процесс.


  1. stas_grishaev
    20.12.2023 17:34

    Использую для телевизора LG со SmartTV связку приложения Lampa (установлен через Media Station X) и TorrServe - это позволяет, после небольшой настройки смотреть медиа с торрентов онлайн без необходимости дожидаться загрузки и смотреть фильмы/сериалы в редких озвучках или в оригинале с субтитрами. Сервер TorrServe можно найти как бесплатный публичный (невысокая скорость), так и арендовать (сам арендую у tsarea.us за вполне адекватную цену)


    1. schebotar
      20.12.2023 17:34

      У меня TorrServe прекрасно работает локально на том же SmartTV рядом с лампой. Точнее не на TV, а на медиа-стике Realme.

      Для поиска торрентов поднял свой Jackett.


  1. reyist
    20.12.2023 17:34

    Я сделал что-то похожее, но через Emby (можно через бесплатный Jellyfin). Radarr + Sonarr для доставки контента, качает qbit, индексаторы Jackett и Prowlarr (один ищет по русским названиям, другой по английским), Jellyseerr как сервис заказов для друзей, а для себя Searcharr - как раз заказывать контент через телеграмм. Плюс плагинами в эмби обвесился красивостями и так же можно найти решение, чтобы дергать оформление с кинопоиска через бесплатный апи (с ограничением по запросам, но мне хватает).