В большинстве случаев качественные нелегальные раздачи какого-то фильма начинают появляться только после цифрового релиза (не путайте цифровые релизы с премьерами в кинотеатрах), т.е. в 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, который вы получите (ссылки на торрент-файлы в примере искажены, чтобы ничего не нарушать).



В идеальном случае WEB-DL 1080p и WEB-DL 2160p (SDR, HDR) нужно исключить. Но суть в том, что некоторые релизы так и не выйдут никогда на Blu-ray, при этом они доступны в iTunes с приемлемым качеством и качественной звуковой дорожкой. Так что отказаться от WEB-DL 1080p и WEB-DL 2160p нельзя. Тем более, фанаты Apple (владельцы Apple TV) потребляют контент такого качества и не жалуются. Например:



Программа на 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

Добавьте в конце:

00 06 * * * root /opt/bin/python3 /opt/etc/movies/digitalreleases.py

При желании вы можете закомментировать все остальные шаблонные задачи. Запустите cron:

/opt/etc/init.d/S10cron start

Финальная настройка


Запустите программу вручную в первый раз, чтобы она сгенерировала файл /opt/share/www/releases.html:

python3 /opt/etc/movies/digitalreleases.py



В дальнейшем с помощью cron файл releases.html будет обновляться раз в сутки автоматически.

Всё готово! Откройте в браузере на любом устройстве в вашей локальной сети ссылку http://192.168.0.1:81/releases.html (замените 192.168.0.1 на адрес вашего маршрутизатора).



Дополнение об обходе блокировок


В заметке подразумевается, что сайт 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

Краткое описание конфигурации:

  • Исключить выходные узлы: Россия, Украина, Армения Киргизия, Беларусь.
  • Повесить 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 для программы.

P.S.


Если вы захотите изменить статическую сортировку выводимых релизов, например, сделать сортировку по дате релиза, а не по рейтингу, то в функции main() программы digitalreleases.py замените:

movies.sort(key = operator.itemgetter("ratingFloat"), reverse = True)

на:

movies.sort(key = operator.itemgetter("releaseDate"), reverse = True)

Предварительно загрузите последнюю версию digitalreleases.py (там добавлено поле releaseDate).

Вот пример результата от 14.03.2019 с сортировкой по дате цифрового релиза (ссылки на торрент-файлы в примере искажены, чтобы ничего не нарушать).

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


  1. Anton23
    13.03.2019 18:47
    +1

    Круто. Давно о таком задумывался. Действительно очень круто. Еще бы в README все из хабра прописали.


    1. Kyrie1965 Автор
      13.03.2019 19:32

      Оформлю README там чуть позже.


  1. braid666
    13.03.2019 19:28

    Завел это дело на малинке, правда пришлось дефолтный конфиг на тор оставить, с Вашим конфигом не заработало почему-то. А Вы не думали сделать ссылки на страницы фильмов на кинопоиске, что-бы сразу отметить там фильм как просмотренный? Можно еще сразу торрент-файлы скачивать на устройство, чтобы не включать прокси или впн в браузере для загрузки фильма.


    1. Kyrie1965 Автор
      13.03.2019 19:31

      Если это вам нужно, то в функции saveHTML буквально две строчки добавляете и делаете заголовок кликабельным со ссылкой на сайт kinopoisk.ru. Там не сложно.


    1. Kyrie1965 Автор
      13.03.2019 19:50
      +1

      В реальности это будет полноценная программа для Android TV (как руки дойдут), чтобы удобно выбирать фильмы и смотреть их напрямую без загрузки (через Elementum или TorrServe). Веб-версия на Python просто для быстрой пробы, что всё действительно работает так, как нужно.


      1. iDm1
        14.03.2019 14:52

        Не рассматривали вариант аддона для Kodi? Где его уже только нет, как разумеется и на Android TV.


        1. Kyrie1965 Автор
          14.03.2019 15:20

          Рассматриваю.


  1. fxpelive
    13.03.2019 20:03

    Классная штука! Уже настроил на своём домашнем сервере. Теперь всегда буду в курсе новинок кино :)

    P.S. Через tor заработало только после небольшой правки кода.

    def rutorLinks(filmID):
    	print("Загрузка торрент-ссылок для filmID " + filmID + ".")
    	
    	if SOCKS_IP:
    		default_socket = socket.socket
    		socks.set_default_proxy(socks.SOCKS5, SOCKS_IP, SOCKS_PORT)
    		socket.socket = socks.socksocket
    
    		from sockshandler import SocksiPyHandler  # from pysocks
    		opener = urllib.request.build_opener(
                            SocksiPyHandler(socks.PROXY_TYPE_SOCKS5, SOCKS_IP, SOCKS_PORT)
                            )
    		urllib.request.install_opener(opener) #NOTE: global for the process
    


  1. qw1
    13.03.2019 21:19

    Зачем так сложно, если любой большой трекер (RuTracker, NoNaMe) предоставляют гибкие RSS-ленты. Например, можно отслеживать только игровые новинки, или видео только HD/BD (можно точно указать, какие разделы включить в ленту).

    Пример линка: http://nnm-club.me/forum/rss2.php?t&f=270,218,954&h=160

    Добавил в любой RSS-ридер и быстро пролистал вечером за 3 минуты.


    1. Kyrie1965 Автор
      13.03.2019 21:20
      +1

      Объяснения в первом абзаце.


    1. ED-209
      14.03.2019 07:59

      Такое же мнение. Аналогично, прилетает на мобильник RSS лента с определенных разделов в трекере. Очень удобно.


    1. Real3L0
      15.03.2019 10:23

      Пытался, но так и не смог сделать отсев по качеству. Например: nnm-club.me/forum/rss.php?f=661&q=-BDRip.
      Ошибка здесь: «q=-BDRip».


      1. qw1
        15.03.2019 11:32

        А почему «минус» BDRip? Нужно качество выше, например, BDRemux? Так работает
        http://nnm-club.me/forum/rss.php?f=661&q=BDRemux

        Как вариант, можно фильтровать по размеру,
        http://nnm-club.me/forum/rss2.php?t&f=661&h=160&z=20g


        1. Real3L0
          15.03.2019 11:58

          Да, нужно качество выше.
          1. При этом я знаю только названия не устраивающего меня качества. Всё, что выше качеством — норм.
          2. При этом в выборке также остаются те форматы, про которые я не знаю. Узнав про новый формат — решу, стоит ли добавлять в отсев.
          3. При этом в выборке остаются «опечатки» с нормальным качеством: например, я получу какой-нибудь BDRemix. В противном случае, я бы его не получил. Т.е. либо получаю все «опечатки» (и нужные, и не нужные), либо не получаю никаких.
          4. По размеру, боюсь, не подходит: размер бывает меньше заданного, потому что фильм короткий. Или WEBRip (и их аналоги): могут попасть в заданный размер, а в процессе просмотра попасть на артефакты.
          4.1. Куплю телек 4К — стану смотреть только 4К — вот может тогда размер и пригодится. :)


  1. alexyr
    13.03.2019 21:21
    +2

    kinotice.ru
    Если что, мопед не мой…


    1. savostin
      13.03.2019 23:21
      +1

      Туда же: cinemate и torba


      1. inoyakaigor
        14.03.2019 15:14
        +1

        Туда же nichosee.com


    1. nickneo
      16.03.2019 15:24

      kinotice.ru Хрень какая-то. Выдает следующее:
      Мы не можем узнать, какие фильмы вы ждете.
      Сделайте на Кинопоиске хотя бы одну папку для фильмов публичной. После того, как вы это сделаете, вызовите принудительное обновление.

      хотя публичные папки в профиле есть.


      1. alexyr
        16.03.2019 19:16

        Они там сейчас что-то активно пилят, вроде новую версию должны выкатить.


  1. Alexsey
    13.03.2019 21:48
    +2

    Ну… то есть вы изобрели аналог Sonarr/Radarr/CouchPotato только гвоздями прибитый к rutor и кинопоиску.

    Нет, ничего плохого в этом нет, просто не совсем понятно что не устраивало в уже готовых решениях.


    1. Kyrie1965 Автор
      13.03.2019 21:56

      Не изобретал — запрос на такую простую и неуникальную функциональность есть, а инструментов нет. Аналогов тоже нет.


      1. phatro
        14.03.2019 12:47

        Возможно Вы пропустили несколько аналогов, например Monitorrent, litr.cc + супермега flexget


        1. Kyrie1965 Автор
          14.03.2019 12:47

          Нет, ничего не пропустил.


        1. artemerschow
          14.03.2019 13:04

          Так у них же совершенно другое назначение О_о


          1. phatro
            14.03.2019 13:13

            У меня настроен flexget на выкачивание фильмов из тех на которые я подписался в trakt.tv и imdb в определенном качестве (по сути после цифрового релиза или dvd).

            Т.е. отличие в том что автор отбирает фильмы непосредственно перед просмотром, а я отмечаю в trakt.tv то что хотел бы посмотреть и flexget присылает мне сообщение что один из этих фильмов он уже скачал и он ждет меня в plex =)


            1. artemerschow
              14.03.2019 13:19

              Именно что. Вы следите за тем, что заранее отметили. Для этого нужно знать за чем следить.


              1. phatro
                14.03.2019 13:36

                Use case получается тот же — открываете и imdb — New and Recent DVD/Blu-ray Releases и отмечаете…

                + благодаря flexget есть возможность искать на разных трекерах


  1. yarkovoy
    14.03.2019 03:48

    До недавнего времени, пользовался довольно известным сайтом epidemz. С него было удобно отслеживать новинки по RSS ленте. Сейчас он пропал. Может кто в курсе, что случилось (неужто закрыли?)


  1. Timon_Timonich
    14.03.2019 07:57

    Спасибо. Кстати не думали добавить параметр по чему сортировать? По рейтингу хорошо только в первый раз, дальше мне бы хотелось видеть наверху либо новое, либо обновленное. Иначе придется бегать по списку и проверять не обновилось ли чего.


    1. Kyrie1965 Автор
      14.03.2019 07:59

      Не за что. В этой реализации уже ничего добавлять не буду, она лишь пробная.


    1. Kyrie1965 Автор
      14.03.2019 09:12

      Не знаю, поможет это вам или нет, я в обновлённую версию digitalreleases.py добавил вывод поля «цифровой релиз» с датой релиза (там нужно будет добавить кнопку в HTML и привязать сортировку на JS). Сам словарь информации по фильму теперь содержит поле «releaseDate» с датой релиза. Если вы хотите изменить тип сортировки в текущей реализации, то в функции main выберите ключ, по которому будет идти сортировка. Например, вам нужна сортировка по дате релиза:
      movies.sort(key = operator.itemgetter(«releaseDate»), reverse = True)

      Сейчас там стоит:
      movies.sort(key = operator.itemgetter(«ratingFloat»), reverse = True)


  1. Ghool
    14.03.2019 08:38

    Когда-то был плагин к Chrome/Mozilla, который добавлял кнопку «скачать с Piratebay» прямо на сайт IMDB

    Если вы пилите такую штуку — может стоит сделать плагин к браузеру, который добавляет подобную кнопку на Kinopoisk?


    1. Kyrie1965 Автор
      14.03.2019 08:41

      Можете сделать, там ничего сложного. Всё необходимое, функция rutorLinks(filmID), у вас есть.


    1. FTOH
      14.03.2019 09:06

      Я как раз себе такое сделал)

      // ==UserScript==
      // @name         Kinopoisk Adv Links
      // @version      0.1
      // @author       FTOH
      // @match        https://www.kinopoisk.ru/film/*
      // @grant        GM_addStyle
      // ==/UserScript==
      
      (function() {
          'use strict';
      
          GM_addStyle (`#headerFilm { float: left; } #advLinks { display: inline-grid; margin: 22px; margin-left: 45px; } ` );
      
          unsafeWindow.rutor = () => unsafeWindow.open('http://rutor.info/search/0/0/000/8/' + encodeURIComponent(unsafeWindow.headerFilm.innerText.replace(/\n|'/g, ' ').trim()), '_blank');
      
          unsafeWindow.load = function(event) {
              if(typeof unsafeWindow.headerFilm === 'undefined') return;
              document.removeEventListener("DOMNodeInserted", unsafeWindow.load);
              unsafeWindow.headerFilm.insertAdjacentHTML('afterend', '<div id="advLinks"><a href="javascript:rutor();">Rutor.info</a></div>');
          };
      
          document.addEventListener("DOMNodeInserted", unsafeWindow.load, false);
      })()
      


      1. Kyrie1965 Автор
        14.03.2019 09:24
        +1

        Ссылку на поиск лучше делать такого вида:
        «rutor.info/search/0/0/010/0/film ID_ФИЛЬМА_КИНОПОИСК»

        Например, Богемская рапсодия:
        «rutor.info/search/0/0/010/0/film 568289»
        Или лучше:
        «rutor.info/search/0/0/010/0/film%20568289»

        Т.к. у многих фильмов на rutor в описании стоит рейтинг КиноПоиск, то вы будете искать конкретный фильм не по названию (которое может дать лишние результаты), а по ID.


        1. FTOH
          14.03.2019 10:04

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

          Новый код
          // ==UserScript==
          // @name         Kinopoisk Adv Links
          // @version      0.2
          // @author       FTOH
          // @match        https://www.kinopoisk.ru/film/*
          // @grant        GM_addStyle
          // ==/UserScript==
          
          (function() {
              'use strict';
          
              GM_addStyle `#headerFilm { float: left; } #advLinks { display: inline-grid; margin: 22px; margin-left: 45px; }`;
          
              unsafeWindow.rutor = () => unsafeWindow.open('http://rutor.info/search/0/0/010/8/' + encodeURIComponent(location.pathname.replace(/\//g, ' ')), '_blank');
          
              unsafeWindow.load = function(event) {
                  if(typeof unsafeWindow.headerFilm === 'undefined') return;
                  document.removeEventListener("DOMNodeInserted", unsafeWindow.load);
                  unsafeWindow.headerFilm.insertAdjacentHTML('afterend', '<div id="advLinks"><a href="javascript:rutor();">Rutor.info</a></div>');
              };
          
              document.addEventListener("DOMNodeInserted", unsafeWindow.load, false);
          })()


          1. zamboga
            14.03.2019 21:07

            А rutracker.org можете добавить в ваш скрипт?
            Например, рок-опера «Иисус Христос Суперзвезда» — на рутрекере сидеров на порядок больше.


            1. FTOH
              16.03.2019 18:22

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

              Код
              // ==UserScript==
              // @name         Kinopoisk Adv Links
              // @version      0.3
              // @author       FTOH
              // @match        https://www.kinopoisk.ru/film/*
              // @grant        GM_addStyle
              // ==/UserScript==
              
              (function() {
                  'use strict';
              
                  GM_addStyle `#headerFilm { float: left; } #advLinks { display: block; } #advLinks>button { margin: 2px auto; width: 100px; }`;
              
              
                  unsafeWindow.rutor = () => unsafeWindow.open('http://rutor.info/search/0/0/010/8/' + encodeURIComponent(location.pathname.replace(/\//g, ' ')), '_blank');
                  unsafeWindow.rutracker = () => unsafeWindow.open('https://rutracker.org/forum/tracker.php?nm=' + encodeURIComponent(unsafeWindow.headerFilm.innerText.replace(/\n|\(сериал.*?\)/g, ' ')), '_blank');
              
                  unsafeWindow.load = function(event) {
                      if(typeof unsafeWindow.headerFilm === 'undefined') return;
                      document.removeEventListener("DOMNodeInserted", unsafeWindow.load);
              
                      unsafeWindow.headerFilm.insertAdjacentHTML('afterend', '<div id="advLinks"><button class="movie-online-button" onclick="rutor();">Rutor</button>' +
                                                                 '<button class="movie-online-button" onclick="rutracker();">Rutracker</button></div>');
                  };
              
                  document.addEventListener("DOMNodeInserted", unsafeWindow.load, false);
              })()
              



  1. overdigital
    14.03.2019 09:45

    Здорово, есть похожая задумка, только для музыки(поиск по VK и по торрентам)


  1. peterthepig
    14.03.2019 09:56
    -1

    А может лучше платить за контент, чем воровать его? Да не, бред какой-то…


    1. Kyrie1965 Автор
      14.03.2019 09:57

      Конечно лучше. Никто об этом не спорит (кроме вас), и об этом написано в самом начале заметки.


    1. pawellrus
      14.03.2019 10:03

      Может быть и лучше, если потребление платного контента будет так же удобно, как и пиратского.
      В настоящее время нужно иметь несколько платных подписок (каждая до тысячи в месяц), чтобы получить весь нужный контент, а также установить то же количество приложений на TV.
      И работать это будет только при стабильном соединении с интернетом, разумеется.


      1. LevOrdabesov
        14.03.2019 12:29

        Да и не каждый ПК тянет эти сервисы. Одно время пользовался А-текой, невозможно было использовать на как минимум двух ноутах с Core i, – тормозило.


    1. Dioxin
      14.03.2019 11:42

      Конечно лучше.
      После того как работодатели перестанут обворовывать работников, платя им гроши.


  1. abar
    14.03.2019 10:26

    Есть же PopcornTime который позвоялет легко и удобно смотреть свежие торренты популярных фильмов. Не совсем улавливаю, в чем разница.


    1. Kyrie1965 Автор
      14.03.2019 10:31

      Есть HD VideoBox с разделом новинок и поиском по торрентам. Есть Elementum с новинками и фильмами в тренде и поиском по торрентом. И другая кучка вариантов. Но логика представления информации там иная. Она предназначена для всех и не отделяет «хорошо» и «плохо» по качеству, а сами новинки считаются не от даты цифрового релиза (а от премьеры). «Хорошо» вам всё равно нужно следить, искать и выбирать руками. В заметке речь идёт о «хорошо» сразу, когда хочется посмотреть какие-то новинки.


  1. theWaR_13
    14.03.2019 10:28

    Извиняюсь перед автором, но не могу не упомянуть свое произведение :)
    Я сделал похожего телеграм бота, который уведомляет о новых вышедших фильмах. Можно отслеживать фильмы как на русском, так и на английском языке. Уведомления приходят когда фильм выпущен в хорошем качестве.


    Бота можно добавить через @evemovies_bot Там же внутри указана ссылка на GitHub. Ещё раз извиняюсь перед автором за рекламу потенциального конкурента… :)


    1. Kyrie1965 Автор
      14.03.2019 10:34

      Ничего страшного, пусть это будет пост рекламы проектов :). Я ни на что не претендую со своей программой (она написана за пару вечеров с определенной целью — тест работоспособности для другого проекта). Никакой лицензии на код нет — любой может присвоить код полностью себе. С вами не конкурирую :).

      Если кому-то окажется полезным (для этого и поделился), я буду только рад.


  1. Arlidor
    14.03.2019 10:38

    Я в ИТ не совсем, но как я понимаю это все можно запустить только под линукс?


    1. Kyrie1965 Автор
      14.03.2019 10:40

      В статье описывается конкретный вариант запуска (со всей обвязкой) на маршрутизаторе с Entware. Но основная программа, которая выполняет основное действие — создаёт HTML-файл, написана на Python и может работать даже на утюге. Конечно, без технических навыков вам будет сложно самостоятельно всё настроить на других устройствах.


  1. zBear
    14.03.2019 11:42

    есть ещё вариант, уведомления о сегодняшних релизах через телеграм :-)

    t.me/kinoreliz — канал для слежения за цифровыми релизами

    ссылок на торренты нет, т.к. каждый решает для себя сам, покупать или искать на торрентах


    1. gavrilka
      14.03.2019 13:31

      22 members, вы только сегодня стартовали?


      1. zBear
        14.03.2019 18:27

        судя по первой записи, канал заработал 6-го марта
        и, судя по предыдущим постам, формат сообщений ещё допиливается
        даже сегодня, сначала в сообщениях была только ссылка на IMDB, а потом ещё добавился рейтинг


  1. Oblomingo
    14.03.2019 12:12

    А можно для людей не особо знакомых с Линуксом объяснить как запустить это все на Windows 10 компьютере? Компьютер запущен круглосуточно и имеет доступ в интернет.
    Какие компоненты надо установить? Что использовать вместо cron'a?


    1. Kyrie1965 Автор
      14.03.2019 12:20

      Могу лишь кратко расписать:
      1). Установить Python 3.
      2). Загрузить программу digitalreleases.py в любое удобное место. Заменить HTML_SAVE_PATH на путь, где следует сохранять файл releases.html. Например HTML_SAVE_PATH = r«C:\Users\Yuri\releases.html».
      3). Запустить её один раз с помощью Командной строки «python C:\ПУТЬ\digitalreleases.py».
      3). С помощью планировщика заданий в ОС Windows (детальных статей о нём много) настроить ежедневный (в определённое время) запуск «python C:\ПУТЬ\digitalreleases.py»
      4). Сделать закладку в браузере «file:///C:/ПУТЬ/releases.html». Например, «file:///C:/Users/Yuri/releases.html».


      1. acidtmn
        14.03.2019 13:31

        Подскажите пожалуйста, сделал все как описано, Win10. Выдает в cmd:
        Текущая дата: 14.03.2019
        Целевая дата: 13.01.2019
        Количество месяцев для загрузки: 3
        Загрузка релизов за 03.2019.
        Traceback (most recent call last):
        File «D:\Python30\digitalreleases.py», line 745, in main()
        File «D:\Python30\digitalreleases.py», line 727, in main
        releases = digitalReleases(DAYS)
        File «D:\Python30\digitalreleases.py», line 61, in digitalReleases
        requestMethod = KINOPOISK_API_RELEAESES.format(downloadDate.strftime("%m.%Y"), KINOPOISK_UUID)
        ValueError: zero length field name in format


        1. Kyrie1965 Автор
          14.03.2019 13:32

          У вас КиноПоиск не заблокирован (например, в Украине)?

          Возможно, именно в вашей ОС не работает функция os.urandom(). Но в Windows 10 должно работать без проблем. Попробуйте в main() удалить две первые строчки:

          KINOPOISK_UUID = binascii.b2a_hex(os.urandom(16))
          KINOPOISK_CLIENTID = binascii.b2a_hex(os.urandom(12))

          Будут использоваться статические значения KINOPOISK_UUID и KINOPOISK_CLIENTID, заданные в самом начале файла.


          1. acidtmn
            14.03.2019 13:35

            Нет, КиноПоиск работает, я из России.

            Закомментировал эти 2 строки, результат остался прежним.


            1. Kyrie1965 Автор
              14.03.2019 13:43

              Версия Python у вас какая (python -V)?

              Попробуйте установить самую свежую версию 3.7.2. В подверсиях 3.x были какие-то особенности с format.


              1. acidtmn
                14.03.2019 13:46

                Python 3.0 (r30:67507, Dec 3 2008, 19:44:23) [MSC v.1500 64 bit (AMD64)] on win32


              1. acidtmn
                14.03.2019 13:57

                Обновил. Спасибо! Теперь другое выдает:

                Текущая дата: 14.03.2019
                Целевая дата: 13.01.2019
                Количество месяцев для загрузки: 3
                Загрузка релизов за 03.2019.
                Загрузка релизов за 02.2019.
                Загрузка релизов за 01.2019.
                Загружены ID от 74 релизов.
                Загрузка торрент-ссылок для filmID 1011685.
                Traceback (most recent call last):
                File «D:\Python30\digitalreleases.py», line 745, in main()
                File «D:\Python30\digitalreleases.py», line 731, in main
                torrents = rutorLinks(release[«filmID»])
                File «D:\Python30\digitalreleases.py», line 311, in rutorLinks
                raise IndexError(«Ошибка загрузки торрент-ссылок для filmID » + filmID + ". Не найден блок с торрентами.")
                IndexError: Ошибка загрузки торрент-ссылок для filmID 1011685. Не найден блок с торрентами.


                1. acidtmn
                  14.03.2019 13:59

                  Если прописать SOCKS proxy то ругается вот так:

                  Traceback (most recent call last):
                  File «D:\Python30\digitalreleases.py», line 38, in import socks
                  ModuleNotFoundError: No module named 'socks'


                  1. Kyrie1965 Автор
                    14.03.2019 14:03

                    У вас заблокирован rutor.info и не настроен глобальный обход блокировок. Вы указали адрес SOCKS-прокси, но сам модуль pysocks не установили (вы не можете какие пункты делать, а какие-то не делать из инструкции, и ожидать работосопособности):

                    pip install --upgrade pip setuptools
                    pip install pysocks

                    или

                    pip install --upgrade --user pip setuptools
                    pip install pysocks

                    Перед тем, как использовать SOCKS-прокси, вы должны его иметь (например, через Tor). Если у вас нет SOCKS-прокси, вам нужно найти инструкцию, как поднять Tor с SOCKS-прокси в Windows.


                    1. acidtmn
                      14.03.2019 14:05

                      Извиняюсь за глупый вопрос, а эти команды через CMD заводить или через само приложение python.exe?
                      Так как выдает ошибку:

                      Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
                      Type "help", "copyright", "credits" or "license" for more information.
                      >>> pip install --upgrade pip setuptools
                        File "<stdin>", line 1
                          pip install --upgrade pip setuptools
                                    ^
                      SyntaxError: invalid syntax
                      


                      1. Kyrie1965 Автор
                        14.03.2019 14:08

                        Это команды для Командной строки.


                        1. acidtmn
                          14.03.2019 14:21

                          Разобрался, pip находится в папке «Scripts», все сработало, спасибо!


                          1. Kyrie1965 Автор
                            14.03.2019 14:22

                            Не за что.


                    1. gavrilka
                      14.03.2019 14:09

                      line 286
                      socks.set_default_proxy(socks.pip install --upgrade --user pip setuptools5, SOCKS_IP, SOCKS_PORT)
                      ^
                      SyntaxError: invalid syntax


                      1. Kyrie1965 Автор
                        14.03.2019 14:15

                        Я не знаю, откуда вы это взяли. В коде нет строки:
                        socks.set_default_proxy(socks.pip install --upgrade --user pip setuptools5, SOCKS_IP, SOCKS_PORT)


      1. Meklon
        14.03.2019 15:33

        Ты бы его в setup.py завернул что-ли? Тогда можно было бы просто pip install сделать.


        1. Kyrie1965 Автор
          14.03.2019 15:40
          +1

          Заверните, сделайте, поделитесь здесь в комментариях с инструкцией. В чём сложность?


          1. Meklon
            14.03.2019 16:42

            Прошу прощения) Как-то с наездом прозвучало. Я попробую вечером, как до компьютера доберусь) Специфические требования по библиотекам есть в плане версий?


            1. Kyrie1965 Автор
              14.03.2019 16:46

              Используется лишь одна сторонняя библиотека — pysocks, и только в том случае, когда нужен обход блокировок для rutor.info. Версия последняя, доступная через pip. Версия Python для программы от 3.6.x, более ранние не проверял.


              1. Meklon
                14.03.2019 16:58

                Спасибо)


  1. brestows
    14.03.2019 12:52

    У меня есть подобный костылек, суть его работы очень похож на авторский:
    Есть файл текстовый, в котором я пишу фильмы которые хочу посмотреть. Скрипт смотрит дату релиза на кинопоиске. Если релизу уже вышел, смотрит его на популярных торрентах и найдя нужного качества добавляет в загрузку и отправляет в телеграмм уведомление о том что фильм добавлен в загрузку.
    Получается что все что мне надо это просто добавить фильм в файл и ждать когда его зарелизят на торрент трекерах )

    А так автор молодец )


  1. User2Qwer
    14.03.2019 18:13
    +1

    спасибо. хорошая наработка. плюс куча полезного в комментах в одном месте.


  1. TRoII
    14.03.2019 22:13

    Kyrie1965 помогите пожалуйста разобраться с данной ошибкой:

    admin@RT-N66U-AA40:/tmp/home/root# python3 /opt/etc/movies/digitalreleases.py
    Текущая дата: 14.03.2019
    Целевая дата: 13.01.2019
    Количество месяцев для загрузки: 3
    Загрузка релизов за 03.2019.
    Traceback (most recent call last):
      File "/opt/etc/movies/digitalreleases.py", line 745, in <module>
        main()
      File "/opt/etc/movies/digitalreleases.py", line 727, in main
        releases = digitalReleases(DAYS)
      File "/opt/etc/movies/digitalreleases.py", line 116, in digitalReleases
        releaseDate = datetime.datetime.strptime(releaseDateStr, "%Y-%m-%d").date()
      File "/_strptime.py", line 280, in <module>
      File "/_strptime.py", line 194, in __init__
      File "/_strptime.py", line 77, in __init__
      File "/_strptime.py", line 129, in __calc_date_time
    ValueError: character U+2aec0028 is not in range [U+0000; U+10ffff]


    admin@RT-N66U-AA40:/tmp/home/root# python3 -V
    Python 3.6.2



    1. Kyrie1965 Автор
      14.03.2019 22:31

      Не может почему-то создать объект datetime из строки с датой releaseDateStr. Тут три варианта. Либо от ответе от КиноПоиск взялся какой-то левый символ в дате (маловероятно). Либо неправильно отрабатываются json.loads или datetime.strptime на конкретной прошивке. Добавьте в функции digitalReleases два вызова print после конвертации JSON:

      		if content:
      			tmpDict = json.loads(content)
      			print(content)
      			print(tmpDict)

      Станет понятнее, что происходит до ошибки.


      1. TRoII
        14.03.2019 23:48

        Сделал, вот выхлоп:

        Много текста
        admin@RT-N66U-AA40:/tmp/mnt/SDCARD/entware/etc/movies# python3 /opt/etc/movies/digitalreleases.py
        Текущая дата: 14.03.2019
        Целевая дата: 14.12.2018
        Количество месяцев для загрузки: 4
        Загрузка релизов за 03.2019.
        {"success":true,"data":{"items":[{"id":1011685,"slug":"natsiya-ubiyts-2018","title":"Нация убийц","originalTitle":"Assassination Nation","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1011685.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1011685.jpg?width=360"},"genres":[{"id":3,"name":"боевик"},{"id":4,"name":"триллер"},{"id":8,"name":"драма"},{"id":6,"name":"комедия"},{"id":16,"name":"криминал"}],"countries":[{"id":1,"name":"США"}],"rating":{"value":5.521,"count":3686,"ready":true},"expectations":{"value":95.96,"count":750,"ready":true},"currentRating":"RATING","serial":false,"duration":110,"trailerId":152311,"contextData":{"isDigital":true,"releaseDate":"2019-03-01"}},{"id":1171910,"slug":"krymskiy-most-sdelano-s-lyubovyu-2018","title":"Крымский мост. Сделано с любовью!","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1171910.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1171910.jpg?width=360"},"genres":[{"id":6,"name":"комедия"},{"id":7,"name":"мелодрама"}],"countries":[{"id":2,"name":"Россия"}],"rating":{"value":2.34,"count":15359,"ready":true},"expectations":{"value":10.56,"count":4015,"ready":true},"currentRating":"RATING","serial":false,"duration":102,"trailerId":151701,"contextData":{"isDigital":true,"releaseDate":"2019-03-04"}},{"id":1065878,"slug":"kholodnaya-voyna-2018","title":"Холодная война","originalTitle":"Zimna wojna","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1065878.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1065878.jpg?width=360"},"genres":[{"id":8,"name":"драма"},{"id":7,"name":"мелодрама"},{"id":21,"name":"музыка"}],"countries":[{"id":32,"name":"Польша"},{"id":11,"name":"Великобритания"},{"id":8,"name":"Франция"}],"rating":{"value":7.41,"count":6144,"ready":true},"expectations":{"value":98.81,"count":562,"ready":true},"currentRating":"RATING","serial":false,"duration":89,"trailerId":153206,"contextData":{"isDigital":true,"releaseDate":"2019-03-05"}},{"id":470178,"slug":"akvamen-2018","title":"Аквамен","originalTitle":"Aquaman","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_470178.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_470178.jpg?width=360"},"genres":[{"id":2,"name":"фантастика"},{"id":5,"name":"фэнтези"},{"id":3,"name":"боевик"},{"id":10,"name":"приключения"}],"countries":[{"id":25,"name":"Австралия"},{"id":1,"name":"США"}],"rating":{"value":6.964,"count":63804,"ready":true},"expectations":{"value":88.22,"count":44419,"ready":true},"currentRating":"RATING","serial":false,"duration":143,"trailerId":151077,"contextData":{"isDigital":true,"releaseDate":"2019-03-06"}},{"id":978961,"slug":"lyubov-i-prochiy-zoopark-2017","title":"Любовь и прочий зоопарк","originalTitle":"Gaspard va au mariage","year":2017,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_978961.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_978961.jpg?width=360"},"genres":[{"id":7,"name":"мелодрама"},{"id":6,"name":"комедия"}],"countries":[{"id":8,"name":"Франция"},{"id":41,"name":"Бельгия"}],"rating":{"value":6.2,"count":343,"ready":true},"expectations":{"count":11,"ready":false},"currentRating":"RATING","serial":false,"duration":103,"trailerId":155972,"contextData":{"isDigital":true,"releaseDate":"2019-03-06"}},{"id":938644,"slug":"favoritka-2018","title":"Фаворитка","originalTitle":"Favourite, The","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_938644.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_938644.jpg?width=360"},"genres":[{"id":8,"name":"драма"},{"id":6,"name":"комедия"},{"id":22,"name":"биография"},{"id":23,"name":"история"}],"countries":[{"id":38,"name":"Ирландия"},{"id":11,"name":"Великобритания"},{"id":1,"name":"США"}],"rating":{"value":7.421,"count":27392,"ready":true},"expectations":{"value":94.39,"count":8168,"ready":true},"currentRating":"RATING","serial":false,"duration":119,"trailerId":152592,"contextData":{"isDigital":true,"releaseDate":"2019-03-07"}},{"id":1111720,"slug":"kak-ya-stal-russkim-2018","title":"Как я стал русским","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1111720.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1111720.jpg?width=360"},"genres":[{"id":6,"name":"комедия"}],"countries":[{"id":2,"name":"Россия"},{"id":31,"name":"Китай"}],"rating":{"value":5.781,"count":2017,"ready":true},"expectations":{"value":74.56,"count":1199,"ready":true},"currentRating":"RATING","serial":false,"duration":100,"trailerId":155904,"contextData":{"isDigital":true,"releaseDate":"2019-03-07"}},{"id":1111934,"slug":"stazhyor-2018","title":"Стажёр","originalTitle":"Il tuttofare","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1111934.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1111934.jpg?width=360"},"genres":[{"id":6,"name":"комедия"}],"countries":[{"id":14,"name":"Италия"}],"rating":{"value":5.688,"count":302,"ready":true},"expectations":{"count":3,"ready":false},"currentRating":"RATING","serial":false,"duration":96,"trailerId":156230,"contextData":{"isDigital":true,"releaseDate":"2019-03-07"}},{"id":920265,"slug":"chelovek-pauk-cherez-vselennye-2018","title":"Человек-паук: Через вселенные","originalTitle":"Spider-Man: Into the Spider-Verse","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_920265.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_920265.jpg?width=360"},"genres":[{"id":14,"name":"мультфильм"},{"id":2,"name":"фантастика"},{"id":3,"name":"боевик"},{"id":10,"name":"приключения"},{"id":11,"name":"семейный"}],"countries":[{"id":1,"name":"США"}],"rating":{"value":8.09,"count":40471,"ready":true},"expectations":{"value":96.75,"count":10006,"ready":true},"currentRating":"RATING","serial":false,"duration":117,"trailerId":153637,"contextData":{"isDigital":true,"releaseDate":"2019-03-11"}},{"id":1142555,"slug":"zvyozdy-2018","title":"Звёзды","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1142555.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1142555.jpg?width=360"},"genres":[{"id":8,"name":"драма"},{"id":6,"name":"комедия"}],"countries":[{"id":2,"name":"Россия"}],"rating":{"value":6.654,"count":172,"ready":true},"expectations":{"count":16,"ready":false},"currentRating":"RATING","serial":false,"duration":97,"trailerId":149659,"contextData":{"isDigital":true,"releaseDate":"2019-03-11"}},{"id":596484,"slug":"1-plus-1-gollivudskaya-istoriya-2019","title":"1+1: Голливудская история","originalTitle":"Upside, The","year":2019,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_596484.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_596484.jpg?width=360"},"genres":[{"id":8,"name":"драма"},{"id":6,"name":"комедия"}],"countries":[{"id":1,"name":"США"}],"rating":{"value":5.201,"count":2185,"ready":true},"expectations":{"value":72.04,"count":4490,"ready":true},"currentRating":"RATING","serial":false,"duration":126,"trailerId":154872,"contextData":{"isDigital":true,"releaseDate":"2019-03-11"}},{"id":665107,"slug":"ayka-2018","title":"Айка","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_665107.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_665107.jpg?width=360"},"genres":[{"id":8,"name":"драма"}],"countries":[{"id":2,"name":"Россия"},{"id":3,"name":"Германия"},{"id":32,"name":"Польша"},{"id":31,"name":"Китай"},{"id":122,"name":"Казахстан"}],"rating":{"value":7.235,"count":943,"ready":true},"expectations":{"value":97.82,"count":672,"ready":true},"currentRating":"RATING","serial":false,"duration":100,"trailerId":156506,"contextData":{"isDigital":true,"releaseDate":"2019-03-12"}},{"id":696247,"slug":"dve-korolevy-2018","title":"Две королевы","originalTitle":"Mary Queen of Scots","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_696247.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_696247.jpg?width=360"},"genres":[{"id":8,"name":"драма"},{"id":22,"name":"биография"},{"id":23,"name":"история"}],"countries":[{"id":11,"name":"Великобритания"},{"id":1,"name":"США"}],"rating":{"value":6.211,"count":5240,"ready":true},"expectations":{"value":93.1,"count":8040,"ready":true},"currentRating":"RATING","serial":false,"duration":124,"trailerId":154711,"contextData":{"isDigital":true,"releaseDate":"2019-03-14"}},{"id":974902,"slug":"tochka-vozvrata-2018","title":"Точка возврата","originalTitle":"Backtrace","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_974902.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_974902.jpg?width=360"},"genres":[{"id":8,"name":"драма"},{"id":16,"name":"криминал"}],"countries":[{"id":6,"name":"Канада"},{"id":1,"name":"США"}],"rating":{"value":4.164,"count":370,"ready":true},"expectations":{"value":88.01,"count":272,"ready":true},"currentRating":"RATING","serial":false,"duration":92,"trailerId":157148,"contextData":{"isDigital":true,"releaseDate":"2019-03-14"}},{"id":1162387,"slug":"madonna-rozhdenie-legendy-2018","title":"Мадонна: Рождение легенды","originalTitle":"Madonna and the Breakfast Club","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1162387.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1162387.jpg?width=360"},"genres":[{"id":12,"name":"документальный"},{"id":22,"name":"биография"}],"countries":[{"id":1,"name":"США"}],"rating":{"count":99,"ready":false},"expectations":{"value":87.57,"count":941,"ready":true},"currentRating":"RATING","serial":false,"duration":105,"trailerId":154973,"contextData":{"isDigital":true,"releaseDate":"2019-03-15"}},{"id":1064391,"slug":"angel-2018","title":"Ангел","originalTitle":"El Angel","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1064391.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1064391.jpg?width=360"},"genres":[{"id":8,"name":"драма"},{"id":16,"name":"криминал"},{"id":22,"name":"биография"}],"countries":[{"id":24,"name":"Аргентина"},{"id":15,"name":"Испания"}],"rating":{"value":7.057,"count":1305,"ready":true},"expectations":{"count":65,"ready":false},"currentRating":"RATING","serial":false,"duration":118,"trailerId":156856,"contextData":{"isDigital":true,"releaseDate":"2019-03-18"}},{"id":738499,"slug":"grinch-2018","title":"Гринч","originalTitle":"Grinch, The","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_738499.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_738499.jpg?width=360"},"genres":[{"id":14,"name":"мультфильм"},{"id":5,"name":"фэнтези"},{"id":6,"name":"комедия"},{"id":11,"name":"семейный"}],"countries":[{"id":8,"name":"Франция"},{"id":31,"name":"Китай"},{"id":9,"name":"Япония"},{"id":1,"name":"США"}],"rating":{"value":6.803,"count":13162,"ready":true},"expectations":{"value":96.5,"count":5711,"ready":true},"currentRating":"RATING","serial":false,"duration":86,"trailerId":155925,"contextData":{"isDigital":true,"releaseDate":"2019-03-21"}},{"id":1115628,"slug":"devochka-2018","title":"Девочка","originalTitle":"Girl","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1115628.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1115628.jpg?width=360"},"genres":[{"id":8,"name":"драма"}],"countries":[{"id":41,"name":"Бельгия"},{"id":12,"name":"Нидерланды"}],"rating":{"value":6.668,"count":1291,"ready":true},"expectations":{"value":96.88,"count":320,"ready":true},"currentRating":"RATING","serial":false,"duration":109,"trailerId":157340,"contextData":{"isDigital":true,"releaseDate":"2019-03-21"}},{"id":1041862,"slug":"troynaya-ugroza-2019","title":"Тройная угроза","originalTitle":"Triple Threat","year":2019,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1041862.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1041862.jpg?width=360"},"genres":[{"id":3,"name":"боевик"},{"id":4,"name":"триллер"},{"id":16,"name":"криминал"}],"countries":[{"id":44,"name":"Таиланд"},{"id":31,"name":"Китай"},{"id":1,"name":"США"}],"rating":{"count":0,"ready":false},"expectations":{"value":98.88,"count":1117,"ready":true},"currentRating":"EXPECTATIONS","serial":false,"duration":96,"trailerId":157741,"contextData":{"isDigital":true,"releaseDate":"2019-03-22"}},{"id":462654,"slug":"krasivyy-malchik-2018","title":"Красивый мальчик","originalTitle":"Beautiful Boy","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_462654.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_462654.jpg?width=360"},"genres":[{"id":8,"name":"драма"},{"id":22,"name":"биография"}],"countries":[{"id":1,"name":"США"}],"rating":{"value":7.277,"count":4578,"ready":true},"expectations":{"value":99.44,"count":3014,"ready":true},"currentRating":"RATING","serial":false,"duration":120,"trailerId":156945,"contextData":{"isDigital":true,"releaseDate":"2019-03-25"}},{"id":1009357,"slug":"nashe-vremya-2018","title":"Наше время","originalTitle":"Nuestro tiempo","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1009357.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1009357.jpg?width=360"},"genres":[{"id":8,"name":"драма"}],"countries":[{"id":17,"name":"Мексика"},{"id":8,"name":"Франция"},{"id":3,"name":"Германия"},{"id":4,"name":"Дания"},{"id":5,"name":"Швеция"}],"rating":{"value":7.272,"count":478,"ready":true},"expectations":{"value":99.25,"count":252,"ready":true},"currentRating":"RATING","serial":false,"duration":173,"trailerId":158021,"contextData":{"isDigital":true,"releaseDate":"2019-03-28"}},{"id":1054990,"slug":"van-gog-na-poroge-vechnosti-2018","title":"Ван Гог. На пороге вечности","originalTitle":"At Eternity's Gate","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_1054990.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_1054990.jpg?width=360"},"genres":[{"id":8,"name":"драма"},{"id":22,"name":"биография"}],"countries":[{"id":21,"name":"Швейцария"},{"id":38,"name":"Ирландия"},{"id":11,"name":"Великобритания"},{"id":8,"name":"Франция"},{"id":1,"name":"США"}],"rating":{"value":7.118,"count":5682,"ready":true},"expectations":{"value":99.36,"count":1735,"ready":true},"currentRating":"RATING","serial":false,"duration":111,"trailerId":154730,"contextData":{"isDigital":true,"releaseDate":"2019-03-28"}},{"id":952241,"slug":"bamblbi-2018","title":"Бамблби","originalTitle":"Bumblebee","year":2018,"poster":{"baseUrl":"//st.kp.yandex.net/images/film_iphone/iphone360_952241.jpg","url":"//st.kp.yandex.net/images/film_iphone/iphone360_952241.jpg?width=360"},"genres":[{"id":2,"name":"фантастика"},{"id":3,"name":"боевик"},{"id":10,"name":"приключения"}],"countries":[{"id":1,"name":"США"}],"rating":{"value":6.677,"count":16809,"ready":true},"expectations":{"value":85.43,"count":13051,"ready":true},"currentRating":"RATING","serial":false,"duration":114,"trailerId":153055,"contextData":{"isDigital":true,"releaseDate":"2019-03-28"}}],"stats":{"total":23,"limit":1000,"offset":0}}}
        {'success': True, 'data': {'items': [{'id': 1011685, 'slug': 'natsiya-ubiyts-2018', 'title': 'Нация убийц', 'originalTitle': 'Assassination Nation', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1011685.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1011685.jpg?width=360'}, 'genres': [{'id': 3, 'name': 'боевик'}, {'id': 4, 'name': 'триллер'}, {'id': 8, 'name': 'драма'}, {'id': 6, 'name': 'комедия'}, {'id': 16, 'name': 'криминал'}], 'countries': [{'id': 1, 'name': 'США'}], 'rating': {'value': 5.521, 'count': 3686, 'ready': True}, 'expectations': {'value': 95.959999999999988, 'count': 750, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 110, 'trailerId': 152311, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-01'}}, {'id': 1171910, 'slug': 'krymskiy-most-sdelano-s-lyubovyu-2018', 'title': 'Крымский мост. Сделано с любовью!', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1171910.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1171910.jpg?width=360'}, 'genres': [{'id': 6, 'name': 'комедия'}, {'id': 7, 'name': 'мелодрама'}], 'countries': [{'id': 2, 'name': 'Россия'}], 'rating': {'value': 2.34, 'count': 15359, 'ready': True}, 'expectations': {'value': 10.56, 'count': 4015, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 102, 'trailerId': 151701, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-04'}}, {'id': 1065878, 'slug': 'kholodnaya-voyna-2018', 'title': 'Холодная война', 'originalTitle': 'Zimna wojna', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1065878.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1065878.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}, {'id': 7, 'name': 'мелодрама'}, {'id': 21, 'name': 'музыка'}], 'countries': [{'id': 32, 'name': 'Польша'}, {'id': 11, 'name': 'Великобритания'}, {'id': 8, 'name': 'Франция'}], 'rating': {'value': 7.41, 'count': 6144, 'ready': True}, 'expectations': {'value': 98.81, 'count': 562, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 89, 'trailerId': 153206, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-05'}}, {'id': 470178, 'slug': 'akvamen-2018', 'title': 'Аквамен', 'originalTitle': 'Aquaman', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_470178.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_470178.jpg?width=360'}, 'genres': [{'id': 2, 'name': 'фантастика'}, {'id': 5, 'name': 'фэнтези'}, {'id': 3, 'name': 'боевик'}, {'id': 10, 'name': 'приключения'}], 'countries': [{'id': 25, 'name': 'Австралия'}, {'id': 1, 'name': 'США'}], 'rating': {'value': 6.964, 'count': 63804, 'ready': True}, 'expectations': {'value': 88.22, 'count': 44419, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 143, 'trailerId': 151077, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-06'}}, {'id': 978961, 'slug': 'lyubov-i-prochiy-zoopark-2017', 'title': 'Любовь и прочий зоопарк', 'originalTitle': 'Gaspard va au mariage', 'year': 2017, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_978961.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_978961.jpg?width=360'}, 'genres': [{'id': 7, 'name': 'мелодрама'}, {'id': 6, 'name': 'комедия'}], 'countries': [{'id': 8, 'name': 'Франция'}, {'id': 41, 'name': 'Бельгия'}], 'rating': {'value': 6.2, 'count': 343, 'ready': True}, 'expectations': {'count': 11, 'ready': False}, 'currentRating': 'RATING', 'serial': False, 'duration': 103, 'trailerId': 155972, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-06'}}, {'id': 938644, 'slug': 'favoritka-2018', 'title': 'Фаворитка', 'originalTitle': 'Favourite, The', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_938644.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_938644.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}, {'id': 6, 'name': 'комедия'}, {'id': 22, 'name': 'биография'}, {'id': 23, 'name': 'история'}], 'countries': [{'id': 38, 'name': 'Ирландия'}, {'id': 11, 'name': 'Великобритания'}, {'id': 1, 'name': 'США'}], 'rating': {'value': 7.421, 'count': 27392, 'ready': True}, 'expectations': {'value': 94.39, 'count': 8168, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 119, 'trailerId': 152592, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-07'}}, {'id': 1111720, 'slug': 'kak-ya-stal-russkim-2018', 'title': 'Как я стал русским', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1111720.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1111720.jpg?width=360'}, 'genres': [{'id': 6, 'name': 'комедия'}], 'countries': [{'id': 2, 'name': 'Россия'}, {'id': 31, 'name': 'Китай'}], 'rating': {'value': 5.781, 'count': 2017, 'ready': True}, 'expectations': {'value': 74.56, 'count': 1199, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 100, 'trailerId': 155904, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-07'}}, {'id': 1111934, 'slug': 'stazhyor-2018', 'title': 'Стажёр', 'originalTitle': 'Il tuttofare', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1111934.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1111934.jpg?width=360'}, 'genres': [{'id': 6, 'name': 'комедия'}], 'countries': [{'id': 14, 'name': 'Италия'}], 'rating': {'value': 5.688, 'count': 302, 'ready': True}, 'expectations': {'count': 3, 'ready': False}, 'currentRating': 'RATING', 'serial': False, 'duration': 96, 'trailerId': 156230, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-07'}}, {'id': 920265, 'slug': 'chelovek-pauk-cherez-vselennye-2018', 'title': 'Человек-паук: Через вселенные', 'originalTitle': 'Spider-Man: Into the Spider-Verse', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_920265.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_920265.jpg?width=360'}, 'genres': [{'id': 14, 'name': 'мультфильм'}, {'id': 2, 'name': 'фантастика'}, {'id': 3, 'name': 'боевик'}, {'id': 10, 'name': 'приключения'}, {'id': 11, 'name': 'семейный'}], 'countries': [{'id': 1, 'name': 'США'}], 'rating': {'value': 8.09, 'count': 40471, 'ready': True}, 'expectations': {'value': 96.75, 'count': 10006, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 117, 'trailerId': 153637, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-11'}}, {'id': 1142555, 'slug': 'zvyozdy-2018', 'title': 'Звёзды', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1142555.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1142555.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}, {'id': 6, 'name': 'комедия'}], 'countries': [{'id': 2, 'name': 'Россия'}], 'rating': {'value': 6.654, 'count': 172, 'ready': True}, 'expectations': {'count': 16, 'ready': False}, 'currentRating': 'RATING', 'serial': False, 'duration': 97, 'trailerId': 149659, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-11'}}, {'id': 596484, 'slug': '1-plus-1-gollivudskaya-istoriya-2019', 'title': '1+1: Голливудская история', 'originalTitle': 'Upside, The', 'year': 2019, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_596484.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_596484.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}, {'id': 6, 'name': 'комедия'}], 'countries': [{'id': 1, 'name': 'США'}], 'rating': {'value': 5.2010000000000006, 'count': 2185, 'ready': True}, 'expectations': {'value': 72.040000000000012, 'count': 4490, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 126, 'trailerId': 154872, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-11'}}, {'id': 665107, 'slug': 'ayka-2018', 'title': 'Айка', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_665107.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_665107.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}], 'countries': [{'id': 2, 'name': 'Россия'}, {'id': 3, 'name': 'Германия'}, {'id': 32, 'name': 'Польша'}, {'id': 31, 'name': 'Китай'}, {'id': 122, 'name': 'Казахстан'}], 'rating': {'value': 7.235, 'count': 943, 'ready': True}, 'expectations': {'value': 97.819999999999988, 'count': 672, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 100, 'trailerId': 156506, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-12'}}, {'id': 696247, 'slug': 'dve-korolevy-2018', 'title': 'Две королевы', 'originalTitle': 'Mary Queen of Scots', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_696247.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_696247.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}, {'id': 22, 'name': 'биография'}, {'id': 23, 'name': 'история'}], 'countries': [{'id': 11, 'name': 'Великобритания'}, {'id': 1, 'name': 'США'}], 'rating': {'value': 6.211, 'count': 5240, 'ready': True}, 'expectations': {'value': 93.1, 'count': 8040, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 124, 'trailerId': 154711, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-14'}}, {'id': 974902, 'slug': 'tochka-vozvrata-2018', 'title': 'Точка возврата', 'originalTitle': 'Backtrace', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_974902.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_974902.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}, {'id': 16, 'name': 'криминал'}], 'countries': [{'id': 6, 'name': 'Канада'}, {'id': 1, 'name': 'США'}], 'rating': {'value': 4.1639999999999994, 'count': 370, 'ready': True}, 'expectations': {'value': 88.01, 'count': 272, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 92, 'trailerId': 157148, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-14'}}, {'id': 1162387, 'slug': 'madonna-rozhdenie-legendy-2018', 'title': 'Мадонна: Рождение легенды', 'originalTitle': 'Madonna and the Breakfast Club', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1162387.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1162387.jpg?width=360'}, 'genres': [{'id': 12, 'name': 'документальный'}, {'id': 22, 'name': 'биография'}], 'countries': [{'id': 1, 'name': 'США'}], 'rating': {'count': 99, 'ready': False}, 'expectations': {'value': 87.569999999999988, 'count': 941, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 105, 'trailerId': 154973, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-15'}}, {'id': 1064391, 'slug': 'angel-2018', 'title': 'Ангел', 'originalTitle': 'El Angel', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1064391.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1064391.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}, {'id': 16, 'name': 'криминал'}, {'id': 22, 'name': 'биография'}], 'countries': [{'id': 24, 'name': 'Аргентина'}, {'id': 15, 'name': 'Испания'}], 'rating': {'value': 7.057, 'count': 1305, 'ready': True}, 'expectations': {'count': 65, 'ready': False}, 'currentRating': 'RATING', 'serial': False, 'duration': 118, 'trailerId': 156856, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-18'}}, {'id': 738499, 'slug': 'grinch-2018', 'title': 'Гринч', 'originalTitle': 'Grinch, The', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_738499.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_738499.jpg?width=360'}, 'genres': [{'id': 14, 'name': 'мультфильм'}, {'id': 5, 'name': 'фэнтези'}, {'id': 6, 'name': 'комедия'}, {'id': 11, 'name': 'семейный'}], 'countries': [{'id': 8, 'name': 'Франция'}, {'id': 31, 'name': 'Китай'}, {'id': 9, 'name': 'Япония'}, {'id': 1, 'name': 'США'}], 'rating': {'value': 6.803, 'count': 13162, 'ready': True}, 'expectations': {'value': 96.5, 'count': 5711, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 86, 'trailerId': 155925, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-21'}}, {'id': 1115628, 'slug': 'devochka-2018', 'title': 'Девочка', 'originalTitle': 'Girl', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1115628.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1115628.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}], 'countries': [{'id': 41, 'name': 'Бельгия'}, {'id': 12, 'name': 'Нидерланды'}], 'rating': {'value': 6.6679999999999988, 'count': 1291, 'ready': True}, 'expectations': {'value': 96.88, 'count': 320, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 109, 'trailerId': 157340, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-21'}}, {'id': 1041862, 'slug': 'troynaya-ugroza-2019', 'title': 'Тройная угроза', 'originalTitle': 'Triple Threat', 'year': 2019, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1041862.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1041862.jpg?width=360'}, 'genres': [{'id': 3, 'name': 'боевик'}, {'id': 4, 'name': 'триллер'}, {'id': 16, 'name': 'криминал'}], 'countries': [{'id': 44, 'name': 'Таиланд'}, {'id': 31, 'name': 'Китай'}, {'id': 1, 'name': 'США'}], 'rating': {'count': 0, 'ready': False}, 'expectations': {'value': 98.88, 'count': 1117, 'ready': True}, 'currentRating': 'EXPECTATIONS', 'serial': False, 'duration': 96, 'trailerId': 157741, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-22'}}, {'id': 462654, 'slug': 'krasivyy-malchik-2018', 'title': 'Красивый мальчик', 'originalTitle': 'Beautiful Boy', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_462654.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_462654.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}, {'id': 22, 'name': 'биография'}], 'countries': [{'id': 1, 'name': 'США'}], 'rating': {'value': 7.277, 'count': 4578, 'ready': True}, 'expectations': {'value': 99.44, 'count': 3014, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 120, 'trailerId': 156945, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-25'}}, {'id': 1009357, 'slug': 'nashe-vremya-2018', 'title': 'Наше время', 'originalTitle': 'Nuestro tiempo', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1009357.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1009357.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}], 'countries': [{'id': 17, 'name': 'Мексика'}, {'id': 8, 'name': 'Франция'}, {'id': 3, 'name': 'Германия'}, {'id': 4, 'name': 'Дания'}, {'id': 5, 'name': 'Швеция'}], 'rating': {'value': 7.272, 'count': 478, 'ready': True}, 'expectations': {'value': 99.25, 'count': 252, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 173, 'trailerId': 158021, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-28'}}, {'id': 1054990, 'slug': 'van-gog-na-poroge-vechnosti-2018', 'title': 'Ван Гог. На пороге вечности', 'originalTitle': "At Eternity's Gate", 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_1054990.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_1054990.jpg?width=360'}, 'genres': [{'id': 8, 'name': 'драма'}, {'id': 22, 'name': 'биография'}], 'countries': [{'id': 21, 'name': 'Швейцария'}, {'id': 38, 'name': 'Ирландия'}, {'id': 11, 'name': 'Великобритания'}, {'id': 8, 'name': 'Франция'}, {'id': 1, 'name': 'США'}], 'rating': {'value': 7.118, 'count': 5682, 'ready': True}, 'expectations': {'value': 99.36, 'count': 1735, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 111, 'trailerId': 154730, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-28'}}, {'id': 952241, 'slug': 'bamblbi-2018', 'title': 'Бамблби', 'originalTitle': 'Bumblebee', 'year': 2018, 'poster': {'baseUrl': '//st.kp.yandex.net/images/film_iphone/iphone360_952241.jpg', 'url': '//st.kp.yandex.net/images/film_iphone/iphone360_952241.jpg?width=360'}, 'genres': [{'id': 2, 'name': 'фантастика'}, {'id': 3, 'name': 'боевик'}, {'id': 10, 'name': 'приключения'}], 'countries': [{'id': 1, 'name': 'США'}], 'rating': {'value': 6.677, 'count': 16809, 'ready': True}, 'expectations': {'value': 85.430000000000012, 'count': 13051, 'ready': True}, 'currentRating': 'RATING', 'serial': False, 'duration': 114, 'trailerId': 153055, 'contextData': {'isDigital': True, 'releaseDate': '2019-03-28'}}], 'stats': {'total': 23, 'limit': 1000, 'offset': 0}}}
        Traceback (most recent call last):
          File "/opt/etc/movies/digitalreleases.py", line 747, in <module>
            main()
          File "/opt/etc/movies/digitalreleases.py", line 729, in main
            releases = digitalReleases(DAYS)
          File "/opt/etc/movies/digitalreleases.py", line 118, in digitalReleases
            releaseDate = datetime.datetime.strptime(releaseDateStr, "%Y-%m-%d").date()
          File "/_strptime.py", line 280, in <module>
          File "/_strptime.py", line 194, in __init__
          File "/_strptime.py", line 77, in __init__
          File "/_strptime.py", line 129, in __calc_date_time
        ValueError: character U+2aec0028 is not in range [U+0000; U+10ffff]


        1. Kyrie1965 Автор
          15.03.2019 00:06

          С данными всё хорошо. И исходный JSON, полученный от КиноПоиск, и сконвертированный словарь содержат верные данные. Вывод — проблема в работе функции strptime на вашей прошивке. В первую очередь стоит собрать и поставить самую последнюю версию прошивки.


    1. Meklon
      14.03.2019 22:35
      -1

      Вот здесь какой-то мусор прилетел вместо даты:
      releaseDateStr = contextData.get(«releaseDate»)

      А дальше автор не провел обработку ошибок с try, except. Программа попыталась сравнить текущую дату с каким-то текстом и упала.


      1. Kyrie1965 Автор
        14.03.2019 22:49

        Все нужные проверки есть. Не вижу практической пользы в вашем ответе человеку. Программа у человека упала в момент releaseDate = datetime.datetime.strptime(releaseDateStr, "%Y-%m-%d").date(), т.к. произошла внутренняя ошибка в strptime (1) или releaseDateStr содержит неподдерживаемый символ (ошибка произошла в json.loads (2) или символ появился уже в ответе от КиноПоиск(3)).


        1. alexyr
          15.03.2019 13:09

          releaseDate = datetime.datetime.strptime(releaseDateStr, "%Y-%m-%d").date()

          можно разбить эту цепочку вызовов на отдельные строки внутри «try/except» и тогда при выводе ошибки будет понятно в чём именно проблема


  1. xPomaHx
    15.03.2019 19:36

    Прикольно, но не уверен что полезно, из реально годных фильмов будет штук 10 в год тока, можно и в ручную по старинке.


    1. qw1
      16.03.2019 09:51

      Как узнать, какие годные? Мне, например, очень понравилась «Аннигиляция». А отзывы и рейтинги на него плохие. Если каждую неделю просматривать список из десятка новых фильмов, есть время подумать (посмотреть скрины/описание), стоит ли смотреть (не обязательно всё смотреть — может, в какую-то неделю и ничего не заинтересует).

      Или каким способом можно отобрать 10 в год? Сортировкой по рейтингу?


      1. xPomaHx
        16.03.2019 10:05

        7,2 это средняя оценка всех фильмов кинопоиска, если считать что фильм может только или понравится или нет, то 7,2 это 50% что понравится, дальше до 9,2 практически линейно растет до 100% условно*.
        Для меня ниже 7,2 смотреть фильмы слишком рисково придется перебрать много говна чтобы найти тот что именно мне по вкусу подойдет, с другой стороны точно зная например что мне нравятся фильмы про петли времени и вообще путешествия во времени я посмотрел их все и мне 95% понравилось несмотря на оценки.
        По поводу аннигиляции, вы уверены что фильм понравился? для меня например есть критерий ресмотрибельность, если её нет я ставлю фильму максимум 7, и фильм не считается крутым хотя и не жалею что посмотрел, скорее категория «на 1 раз можно».
        Задайте себе вопрос будете ли через 5 лет его пересматривать если нет, то фильм не считается что понравился.

        * Имеется ввиду 100% не экстаза, а 100% от удовольствия от самого лучшего фильма снятого на текущий момент, какой именно не называется.


        1. ED-209
          16.03.2019 10:50

          Почему-то вспомнилось давняя история, как программист искал себе жену. Распарсил сайт знакомств и по ключевым своим каким-то критериям и хештегам четко определил нужную себе вторую половину. Целенаправленно познакомился. Целенаправленно женился. Дальше история умалчивает.
          Имею ввиду, рейтинги ниже 7.2 не смотрю :)

          Лично у меня отбор фильмов идет таким образом:
          а) Прилетает RSS в мобильник со свежим релизом и описанием фильма — заинтересовало, погуглил/почитал мнение.
          б) Форум, специализированная обсуждаемая «народная» ветка по рекомендации фильмов: «Внезапно, %random_film_name% неожиданно хорош! Советую.» 80% просмотренных отличных фильмов были выдернуты именно оттуда, в другом случае я про них даже и не узнал бы.

          Кинопоиск парсить по рейтингам в качестве исходника напоминает «100 книг которые обязательно надо прочитать».

          P.S.

          qw1
          Мне, например, очень понравилась «Аннигиляция».

          xPomaHx
          По поводу аннигиляции, вы уверены что фильм понравился?

          Вот это шикарно )))))))))))) Теперь qw1 начнет сомневаться, действительно понравился ему фильм или все же нет.


          1. xPomaHx
            16.03.2019 12:25

            Скорее сомнения в определениях слов. Прежде чем что либо обсуждать нужно убедится что мы об одном и том же говорим.
            Ну у нас отличия только в том что моя выборка более репрезентативная и объективна, сколько вы так отзывов прочитаете с форума и сколько оценок на кинопоиске.
            По поводу 100 книг, если взять радномного человека, и о нем вообще нечего не известно о его вкусах то лучше ему посоветовать 250 топ фильмов, шансов что там фильмы оттуда понравятся больше.


        1. qw1
          16.03.2019 13:20

          вы уверены что фильм понравился?
          У меня очень простой критерий: если во время просмотра в голове что-то «щелкнуло», т.е. испытаны сильные эмоции, то понравился. Будь то необычный визуал, или сюжетный твист, или какая-то мысль пришла, или просто получил удовольствие от какой-то отсылки.
          7,2 это 50% что понравится, дальше до 9,2 практически линейно растет до 100% условно
          По рейтингу 2018 вверх выбиваются всякие «Остров собак», «Война бесконечности», «Богемская рапсодия». Первые два смотрел — жвачка-жвачкой, всё настолько стандартно и вообще не удивило. Последнее даже смотреть не хочу — фильмы-биографии, исторические — вообще не моё.
          для меня например есть критерий ресмотрибельность
          У меня мало времени смотреть, а уж пересматривать точно не буду. Лучше дать шанс новому многообещающему фильму/сериалу. Или достать из беклога какой-нибудь очередной марвел — вряд ли он мне понравится, но хотя бы буду в курсе мемов поп-культуры.


  1. AndreyYu
    16.03.2019 14:11

    Сделал по инструкции — работает!
    Правда, сначала пришлось немного почитать, т.к. не пользовался opkg — изучить как это включить, что такое entware, почему-то с ext4-флешки устанавливаться не хотел, зато с usb-hdd без проблем установилось, затем mc для удобства… 30 минут были потрачены не зря, благодарю.