python

Парсим Lostfilm.tv RSS или Очередной велосипед

  • пятница, 13 февраля 2015 г. в 02:13:51
http://habrahabr.ru/post/250429/

Не так давно «Лостфильм» переехал на https. В связи с этим flexget стал выдавать чудесную ошибку при попытке скачать торрент-файл:

RequestException hostname 'www.lostfilm.tv' doesn't match either of 'ssl2000.cloudflare.com', 'cloudflare.com', '*.cloudflare.com'

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

Собственно, все исходники здесь.

Делалось все для ubuntu, но в процессе разработки прекрасно работало и на macos

Необходимые пакеты:
  • feedparser
  • transmissionrpc
  • pyyaml


Настройки вынесены в отдельный конфиг:

send_email: False #включить отправку email при удачно скачанном торрент-файле
use_transmission: False #передать торрент-файл в transmission для закачки 
store_torrent_files: False #сохранить торрент-файл в указанную папку для дальнейшей обработки

transmission: #настройки transmission
  address: localhost
  port: 9091
  user: admin
  password: admin

email: #настройки отправки email, я использовал google
  from: *****
  to: *****
  subject: New torrents from Lostfilm
  smtp_host: smtp.gmail.com
  smtp_port: 587
  smtp_username: ****
  smtp_password: ****
  smtp_tls: yes

lostfilm:
  feed: http://www.lostfilm.tv/rssdd.xml
  cookie: " uid=****; pass=****; usess=****" #куки лостфильма, думаю все уже в курсе, где их брать

user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:34.0) Gecko/20100101 Firefox/34.0 #можно поменять на свой из браузера

downloads-path: /path/to/downloads/dir/  #папка с сериалами, настройка use_transmission
torrents-path: /path/to/torrents/dir/ #папка для торрент-файлов, настройка store_torrent_files

series: #настройка сериалов
  720p:
    - Bitten:
       path: Serials
  1080p:
    - Cougar Town:
        alternate_name: 'Город хищниц'
  MP4:
    - Grimm
    - Stargate Atlantis

О настройке сериалов поподробнее.

Да, некоторые части копировал из flexget, не вижу смысла придумывать формат заново.

Как видно из примера конфига — первым уровнем идет качество, а вторым — оригинальное название сериала ().

Это может быть просто список без дополнительнызх параметров, как в MP4 — в этом случае оба сериала будут искаться по оригинальным названиям и скачиваться с помощью transmisiion в папки с таким же названием.

Также это может быть список с параметрами. Дополнительных параметров пока два:
  • название (alternate_name) или часть названия, по которому можно онозначно выделить сериал из пачки других, бцдет использоваться вместо оригинального названия при поиске;
  • папка для скачивания (path), если не указана — будет использование оригинальное название.


Это позволяет создать, например, такой конфиг (все три сериала скачаются в одну папку Outer space serials):

series:
  720p:
    - Stargate 1:
       path: Outer space serials
       alternate_name: 'Stargate Atlantis' 
    - Stargate 2:
       path: Outer space serials
       alternate_name: 'Stargate Universe'
    - Startrek 1:
       path: Outer space serials
       alternate_name: 'Startrek: Deep Space Nine'


Поиск сериала сделать очень просто — в строке с названием сериала ищутся вхождения по названию и качеству. Никто не запрещает сделать, например, качество avi и тогда парсер найдет все файлы, заканчивающиеся на avi.

Если серия скачалась либо в папку для торрентов, либо успешно передана в transmission — она помечается как скачанная (файл download.log) и в следующий раз парсер ее пропустит.

Мануал по запуску — в readme.

Ошибки падают в error.log, общий прогресс — в process.log

Скрипт успешно работает третий день.

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

Критика и пожелания приветствуются.