Автоматическое скачивание киноновинок

    Какое-то время назад я уже предпринимал попытку автоматизировать скачивание киноновинок — в то время это был сервис, основанный на API kinobaza.tv. Однако, API тогда был не совсем доделан (не всегда в список попадали киноновинки, не всегда скачивались фильмы на русском языке), а сейчас, похоже, и вовсе умирает. Потому пришлось сделать вторую попытку — сайт kino2rss (хотя, premiers2rss было бы правильнее).

    Как это работает?

    Получение списка киноновинок


    Каждый четверг (в день кинопремьер) сервис считывает список фильмов, выходящих на большие экраны, из RSS-ленты сайта Кинопоиск. К сожалению, RSS содержит минимум информации о фильме — название, постер, описание и… всё. О других вариантах получения информации я думал (например, парсинг страницы кинопоиска или получение информации под видом мобильного клиента), но решил, что какие-то это не очень правильные способы. Потому на сайте представлена лишь минимальная информация.
    Кстати, просьбы добавить в RSS чуть больше информации, администрация Кинопоиска просто игнорирует (что, в общем-то, можно понять).

    Подписка


    Для просмотра списка фильмов, необходимо зайти на сайт с вашим Google ID (сайт использует Google App Engine, делался для себя, потому такой способ входа считается приемлимым). Просматривая список фильмов на сайте, для каждого фильма можно ставить отметку — DVD и/или HD. Как только фильм появится на торрент-трекере (см. ниже) в нужном качестве (соответственно, DVDRip или 1080p), он будет автоматически скачан.

    Получение списка торрентов


    Раз в день сервис запрашивает появление новых фильмов соответствующего качества на торрент-трекере NNM-Club. Поиск ведется именно на этом трекере, т.к. у него есть удобный сервис для получения фильмов в виде RSS, а также потому, что на нем есть почти все новинки (без цензуры, в отличии от того же рутрекера).
    При обнаружении нового фильма, скачивается страница с его описанием и в нем ищется id фильма на кинопоиске. Соответственно, если фильм с таким же id существует в нашей базе, — сохраняем ссылку на торрент-файл.

    Скачивание


    Для автоматического скачивания фильмов сервис создает персональную RSS-ленту. Как только был найден торрент-файл для выбранного вами фильма, соответствующая запись добавляется в ленту. И, если RSS-лента добавлена в вашу любимую качалку (например, в µTorrent), фильм будет скачан автоматически. Правда, к URL ленты еще необходимо добавить Персональный ключ (см. детали в описании ленты).

    В общем, пробуйте.

    Upd. Предполагается следующий сценарий использования сервиса: раз в неделю вы заходите на сайт, просматриваете свежедобавленные фильмы (их добавляется штук 6-10 в неделю), помечаете те, что вас заинтересовали. При появлении торрента в нужном качестве (DVD или HD) отмеченный вами фильм скачивается автоматически. Потому на сайте нет поиска фильмов.

    Upd2. Закончились бесплатные квоты GAE. На сайте вываливается ошибка. Попробуйте зайти завтра ;).
    Поделиться публикацией

    Комментарии 67

      +3
      Сделайте вывод списком, и чтобы кнопки вперед, назад были прибиты (скачут вверх вниз в зависимости от текста)
        0
        Список фильмов без описаний? Если так, то зачем?
          +1
          Хотя бы с рейтингом. Ну и вообще, листать, даже не зная, сколько записей в списке — странное занятие. К тому же, если я хочу найти какой-то определенный фильм, мне долго листать надо?
            0
            Список фильмов без описания, список фильмов с описаниями — никто вас не ограничивает. Лишь бы не по одному элементу.
              0
              мало информации, надо список с высокими полями, что б помещался постер, пару кадров, описание качества(+рейтинг imdb) и размер(HD рипы ведь могут быть и 11Гб и 25Гб) и что б можно было за пару секунд проставить галки на 20 фильмах, а не мотать каждую страницу где кроме маленького текстового блока ничего и нет
            +2
            Ну хоть какой-то фильтр всё равно нужен.
            Моя мечта — качать всё, что «комедия» -драма c рейтингом 8+ и год 2012+
              0
              Подобное было сделано как раз в первой версии. В этой, увы, информации о жанре фильма нет.
                0
                Раз вы и так парсите страницу с описанием, можно заодно вынуть оттуда название фильма и находить его жанры на imdb или я не знаю где.
                  0
                  Так я ж не парсю сейчас страницу с описанием, а использую информацию из RSS.
                  Но мне подсказали более хороший вариант, попробую воспользоваться.
              0
              Еще хорошо было бы получать RSS новых фильмов на вашем сервисе.
                0
                И видеть дату добавления фильма
                  0
                  Просто RSS новых фильмов? Зачем? Лента же будет эквивалентна ленте кинопоиска (только ссылки на мой сайт будут вести).
                  Думал, сделать RSS-ленту новых фильмов с возможностью подписки прямо из неё. Но тогда пустое/бессмысленное окно в браузере при подписке будет открываться.
                    +1
                    Вот именно затем. Перейдя на ваш сайт, я смогу подписаться, а на кинопоиске — нет. А у вас сейчас даже по названию фильм не найти.
                      0
                      Добавил RSS — http://kino2rss.appspot.com/rss. Пока в нем мало информации и кое-где отображаются None вместо значений, но как только в базу будут добавлены новые фильмы — для них все исправится. Надо бы, конечно, и старых фильмов данные поправить…
                        0
                        Отлично! Спасибо. Подписался. Теперь точно буду пользоваться :)
                  +1
                  Кстати о kinobaza.tv: развитие проекта забросили в конец? Как оттуда «вытащить» просмотренные мною фильмы и оценки и импортировать куда-то?
                    0
                    Владельцы кинобазы есть на хабре, можно попробовать спросить у них — daeq3.
                    Вытащить просмотренные фильмы можно с помощью их API. Импортировать их куда-то — вопрос более сложный. Как-то я спрашивал у Кинопоиска как это сделать. Мне посоветовали посмотреть как сейчас работает их функционал и отправлять такие же GET-запросы.
                    0
                    Есть же FlexGet…
                      0
                      По теме поста: kino2rss — ни скринов фильма, не ссылок. А на nnm-club можно итак зайти, а искать среди всего «киношлака» по описаниям интересное — не удобно.
                        0
                        Предполагается следующий сценарий использования — раз в неделю заходите на сайт, просматриваете свежедобавленные фильмы (их добавляется штук 6-10 в неделю), помечаете те, что вас заинтересовали. При появлении торрента в нужном качестве фильм скачивается автоматически.
                          +1
                          >> раз в неделю заходите на сайт

                          Вот тут и нужен RSS, в ближайший четверг из 10 потенциальных пользователей про ваш сервис от силы вспомнит один.
                        +1
                        все это хорошо, но все торренты киноновинок — это экранки с плохим качеством звука и смотреть их нет ни какого удовольствия.

                        У меня дети, так сильно балдеющие от серии «Ледникового периода», просмотрев (до премьеры) на качестве DVD «Ледниковый период 4» любительскую озвучку, отказались повторно просматривать и просят скачать хороший вариант.
                          0
                          я упорно жду два-три месяца и качаю с рутрекера фильмы с ужехорошей озвучкой и в приемлемом качестве.
                            +2
                            киноновинки в ужасном качестве = дурной вкус общепита
                            +2
                            Мой сервис — как раз для решения этой задачи, т.к. скачиваются лишь DVD-рипы или даже фильмы в HD-качестве. Т.е. сейчас я узнал о появлении интересного фильма (прочитав его описание), пометил, что хочу его посмотреть — как только фильм появится в хорошем качестве, он будет скачен автоматически (хотя с озвучкой тут всё сложнее, конечно).
                              0
                              тогда это совсем иное дело
                            0
                            Я так и не понял почему вход только через гугл…
                              0
                              Сайт работает на Google App Engine, реализация входа через Google для него — готовое решение, которое и было использовано.
                              0
                              Было бы хорошо иметь больший выбор а не только DVD или HD качество
                                +2
                                Много проделанной работы и толком ни о чем…
                                1. Берите с кинопоиска не новинки, а новинки на DVD
                                2. Спарсить описание с кинопоиска минутная работа!
                                + ко всему этому уже есть готовый апи. Могу поделиться в ЛС если есть желание переделать нормально ваш сервис.
                                  0
                                  Касательно второго — с удовольствием воспользуюсь, поделитесь, пожалуйста.
                                    0
                                    В ЛС опишу все необходимое.
                                  +2
                                  Мне не понравилось.
                                  Я совершенно не понял, как мне это может быть полезно.
                                    0
                                    А в чём разница по сравнению с подпиской на RSS ленту раздела «Экранки»? С полноценным описанием фильма. Тянуть все новинки — зачем? 70% из них невыносимое г…
                                      0
                                      Вот мониторинг за выходом новых серий сериалов или обновляемых раздач, считаю на много более полезным.
                                        0
                                        tvfedor.ru? правда, он для торрентс.ру
                                          +1
                                          Пожалуй будет не совсем правильно пиариться в чужом топике, но blog.korphome.ru/torrentmonitor/
                                          0
                                          Добавил возможность мониторинга выхода новых серий сериалов — kino2rss.appspot.com/serials, тестирую…
                                          0
                                          Тянутся как раз не все новинки, а лишь те, что вы пометили (т.е. прочитали описание, решили, что этот фильм вам может понравится, отметили его).
                                            0
                                            Информации слишком мало — Название, постера в RSS я в упор не вижу, и обрезанное описание в 2 строки и рейтинг (нафига рейтинг у новинки, которую ещё почти никто не видел?). Не вижу здесь автоматизации, процесса или его упрощение. А я люблю автоматизацию :)
                                          0
                                          Проблему с постерами можно решить используя например snoopy class'a, в свое время занимался грабежом кинопоиска для движка torrentpier.
                                            0
                                            Даа, с постерами проблема — вместо них заглушка отображается. snoopy class — это, как я понял, для PHP. У меня — Google App Engine (GAE) + python. В принципе, отправить те же заголовки, что и браузер, я, наверное, смогу. Хотя GAE в заголовки свой идентификатор вставляет, кинопоиск по нему может не отвечать на мои запросы. Но — совсем не хочется скачивать себе постеры.
                                              0
                                              Постеры добавил.
                                              • НЛО прилетело и опубликовало эту надпись здесь
                                              0
                                              Осталось сделать сервис который будет за меня все эти новинки просматривать :)… ну или работать за меня пока я их просматриваю, это можно сделать даже в виде pro версии за деньги :)
                                                0
                                                Эх, упало из-за квот.

                                                Ошибка
                                                Traceback (most recent call last):
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 710, in __call__
                                                    handler.get(*groups)
                                                  File "/base/data/home/apps/s~kino2rss/1.361339873621337288/kino2rss.py", line 117, in get
                                                    movie_id = models.get_latest_movie_id()
                                                  File "/base/data/home/apps/s~kino2rss/1.361339873621337288/models.py", line 94, in get_latest_movie_id
                                                    movie = movies.get(keys_only = True)
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/query.py", line 1150, in get
                                                    return self.get_async(**q_options).get_result()
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 323, in get_result
                                                    self.check_success()
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 362, in _help_tasklet_along
                                                    value = gen.throw(exc.__class__, exc, tb)
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/query.py", line 1163, in _get_async
                                                    res = yield self.fetch_async(1, **q_options)
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 362, in _help_tasklet_along
                                                    value = gen.throw(exc.__class__, exc, tb)
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/query.py", line 921, in _run_to_list
                                                    batch = yield rpc
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 443, in _on_rpc_completion
                                                    result = rpc.get_result()
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 604, in get_result
                                                    return self.__get_result_hook(self)
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_query.py", line 2452, in __query_result_hook
                                                    self._batch_shared.conn.check_rpc_success(rpc)
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 1222, in check_rpc_success
                                                    rpc.check_success()
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 570, in check_success
                                                    self.__rpc.CheckSuccess()
                                                  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 133, in CheckSuccess
                                                    raise self.exception
                                                OverQuotaError: The API call datastore_v3.RunQuery() required more quota than is available.
                                                  0
                                                  Сорри, не вам.
                                                  +1
                                                  Эх, упало из-за квот.

                                                  Ошибка
                                                  Traceback (most recent call last):
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 710, in __call__
                                                      handler.get(*groups)
                                                    File "/base/data/home/apps/s~kino2rss/1.361339873621337288/kino2rss.py", line 117, in get
                                                      movie_id = models.get_latest_movie_id()
                                                    File "/base/data/home/apps/s~kino2rss/1.361339873621337288/models.py", line 94, in get_latest_movie_id
                                                      movie = movies.get(keys_only = True)
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/query.py", line 1150, in get
                                                      return self.get_async(**q_options).get_result()
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 323, in get_result
                                                      self.check_success()
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 362, in _help_tasklet_along
                                                      value = gen.throw(exc.__class__, exc, tb)
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/query.py", line 1163, in _get_async
                                                      res = yield self.fetch_async(1, **q_options)
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 362, in _help_tasklet_along
                                                      value = gen.throw(exc.__class__, exc, tb)
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/query.py", line 921, in _run_to_list
                                                      batch = yield rpc
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/ndb/tasklets.py", line 443, in _on_rpc_completion
                                                      result = rpc.get_result()
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 604, in get_result
                                                      return self.__get_result_hook(self)
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_query.py", line 2452, in __query_result_hook
                                                      self._batch_shared.conn.check_rpc_success(rpc)
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/datastore/datastore_rpc.py", line 1222, in check_rpc_success
                                                      rpc.check_success()
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 570, in check_success
                                                      self.__rpc.CheckSuccess()
                                                    File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 133, in CheckSuccess
                                                      raise self.exception
                                                  OverQuotaError: The API call datastore_v3.RunQuery() required more quota than is available.
                                                    0
                                                    Даа, бесплатные квоты закончились.

                                                    Как бы вывод ошибок отключить?
                                                    +2
                                                    А можно сделать не по одному фильму на странице, а сразу ленту? Так имхо удобнее, по отмечал всё что надо не переходя на другие страницы:
                                                    image
                                                      0
                                                      Я для себя писал парсер кинопоиска несколько для других целей. У меня есть там профиль и в нём заполнены любые актёры/актрисы/режиссёры. Каждую ночь (ну так что бы наверняка) скрипт обходит страницы этих людей, и смотрит — в каких фильмах они снимались/снимаются и загоняет их в базу. Просто любимых актёров/актрис/режиссёров очень много и самому следить кто где снялся или что снял — накладно, в итоге имею вывод в виде таблички, где отмечаю просмотренные в этом году фильмы, или смотрю что есть из старенького, что я ещё не смотрел, или что там в будущем ещё интересного выйдет.
                                                      как то вот так это выглядит hostingkartinok.com/show-image.php?id=ebb68a8893cbb293d725f893f5afa924
                                                        0
                                                        Как у вас красиво отсортированы закладки в Safari )))
                                                        И рабочий стол наверное в порядке?
                                                          0
                                                          И рабочий стол чистый и 16k медиатека рассортирована, подписана и разложена и вообще все 6Тб барахла рассортированы, подписаны и разложены аккуратно по винтам и папочкам… люблю порядок :)
                                                            0
                                                            Я вам завидую белой завистью :)
                                                            мой

                                                              0
                                                              да, мне до вас ой как далеко :)))
                                                              pix.am/uEee/
                                                              ну тут наверное ещё просто сказывается наличие сервака на 8Тб и внешнего винта, а на минике и прошке у меня стоят маленькие ссд, чисто под систему и я на них ничего не храню
                                                                0
                                                                Внешний на 1Тб+Капсула на 2Тб.
                                                                Серваков у меня штук 10 общим объемом более 30Тб.
                                                                Тут проблема в человеке, а не, как и где хранить данные. Я люблю, когда все под рукой. Если все со стола раскидать по папкам, то это потеря времени…
                                                                  0
                                                                  Просто дело в организации, у меня тоже всё под рукой и залезть куда то даже очень далеко — дело 5 секунд
                                                                  pix.am/PDAz/
                                                                    0
                                                                    С фото у меня порядок. Храню на внешней библиотеке iPhoto.

                                                                    Я не спорю, что время на поиски занимают пару секунд, но так же нужно время упорядочивать все это.
                                                                      0
                                                                      Ну я как то привык всё сразу рассортировывать по уже данво определённым местам, по этому это делает уже на автомате :)
                                                        +1
                                                        Спасибо, удобно :)
                                                          0
                                                          простомтру новинок явно необходима обложка и список актеров
                                                            0
                                                            С обложкой сложно — кинопоиск не хочет её отдавать. Актеров добавлю.
                                                              0
                                                              Теперь добавлены и актеры, и обложки.
                                                              0
                                                              круто! а для актеров сделать просмотр фильмов с их участием и «любимые актеры»
                                                                0
                                                                Так это ж все на Кинопоиске есть. У моего сайта назначение совсем другое.
                                                                0
                                                                что-то сломалось, указываю ссылку со своим ключем, а rss все равно пустая
                                                                  0
                                                                  Нет, вроде все работает как надо. Может, просто фильмов в выбранном вами качестве, пока еще нет на nnm-club? Напишите мне все детали (e-mail, выбранные фильмы) в личку — я проверю.

                                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                Самое читаемое