Автоматичне завантаження нових серій серіалів (фільмів) за допомогою FlexGet (RSS, HTML)

  у розділі Технічні теми 

FlexGet

Що найкраще в комп’ютерах? Можливо те, що вони можуть зробити майже все майже з нічого. :)

Така собі сучасна алхімія. Змусити щось неживе не лише повторювати монотонні, марудні для нас, операції, але і автоматизовувати процеси роблячи наше життя цікавішим. ;)

Є в мене медіацентр з оболонкою XBMC, про що я не ніяк наберуся часу написати.  Він і відео показує, і музику грає і домашню фотоколекцію зберігає. Ну і деякі серіали, звичайно. Але ті серіали треба звідкись брати, їх кудись завантажувати, та й слідкувати коли ж вийшла нова серія.

Але комп’ютер на те і залізний, щоб думати — нехай це буде його проблема. Навчимо наш медіацентр самому завантажувати серіали (фільми), які нам подобаються.

FlexGet

Це система, написана на Python, а отже працює майже на усіх платформах.

FlexGet:

  • запускається вручну чи періодично (cron тощо)

  • читає створений нами конфігураційний файл

  • завантажує інформацію з джерел (RSS, HTML, локальний пошук серед файлів)

  • шукає посилання, перевіряє, пам’ятає що вже було завантажено раніше

  • завантажує, обробляє, дає команди іншим програмам (наприклад торрент-клієнтам)

Незважаючи на свою простоту, вимагає деякого розуміння. Я поділюся [майже] конкретними рецептами з власного досвіду (тестовано на Ubuntu).

Встановлення просте (буде описано в самому кінці статті). Після встановлення потрібно створити конфігураційний файл, типово це ~/.flexget/config.yml . В ньому і описується вся магія.

Конфігураційний файл має формат ****YAML — проста структура де блоки відділяються відступами (переважно 2 пробіли). Кількість відступів є дуже важливими для правильної структури, тому оформляйте їх акуратно.

FlexGet оперує додатками (plugins). Кожен додаток має свої властивості та можливості.

Додатки умовно діляться на додатки Вводу, Обробки, Виводу і т.п.

Додатки можуть задіюватись для конкретних елементів (фільм) або на групу елементів що мають схожі властивості.

Мождна шукати лише певну якість, лише певну глядацьку оцінку, лише свіжі, лише певних акторів — описувати всі можливості не вистачить сили.

Система має режим тестування та відлагоджування, щоб земулювати поведінку, перед "бойовим" запуском.

Інформацію про наявні додатки та їх конфігурацію найкраще читати на офіційному Wiki чи в рецептах від користувачів — Cookbook.

Я відразу перейду до конкретних прикладів, поясненнями, де це потрібно.

Знайти нову серію в RSS-потоці і передати її торрент-клієнту

feeds:
  my_serials:
    rss: http://example.com
    series:
      - Lost
      - Monk
          min_quality: hr
          max_quality: 720p
      - The Big Bang Theory
    set:
      path: /data/video/{{series_name}}/Season {{series_season}}
    transmission: yes

transmission:
  host: localhost
  port: 9091
  username: myusername
  password: mypassword
  • feeds — службове слово. Означає початок блоку з джерелами.

  • my_serials — наша назва блоку з переліком джерел. Їх може бути декілька, з особистими налаштуваннями.

  • rss — задіяти додаток RSS що отримує стрічку і знаходить в ній посилання на .torrent, .avi, .mkv  — на все що можна вважати "даними".

  • series — задіяти додаток Series що шукає серед посилань лише потрібні нам назви (Lost, Monk, TBBT). Назва може братися з опису сторінки, назви посилання, назви файлу. Визначається що за сезон, яка серія (S05E11 ...). Перевіряється чи не було завантажено знайдені серії раніше. Можна вказувати альтернативні назви серій, або регулярний вираз для оброблення неправильних назв (якщо мудрагелики пишуть HIMYM.seria12.sezon3 замість How.I.Met.Your.Mother.S03E12).

  • *_quality —лише певної якості

  • set — задаємо змінні, які можуть бути використані іншими додатками. Наприклад path — шлях для завантаження, який буде передано торрент-клієнту. Шлях для завантаження містить назву серіалу і номер сезону (/data/video/Lost/S12/).

  • transmission — додаток виводу. Демону Transmission передасться адреса торрент-файлу і директорія-призначення для завантаженого файлу. Торрент-файли можна просто складати в окрему директорію, а на неї натравити торрент-клієнт. Як Вам зручніше.

Це простий приклад. Коли є гарне джерело RSS-даних, з правильно офрмленими посиланнями і назвами файлів. Якщо джерело "проблемне", можна робити різні маніпуляції, щоб досягти правильного результату. Про це трохи буде, нижче.

Можна брати за вхідні дані звичані HTML-сторінки, наприклад форум.

Знайти медіафайли на сторінці

Потрібний шматок конфігурації джерела даних:

html: http://example.com/forum?post=777
regexp:
  accept:
    - podcast.*\.mp3

Відвідати example.com/forum?post=777 і витягти з неї усі посилання на медіафайли.

  • regexp — передати для обробки лише посилання на mp3-файли.

Форум вимагає логіну і паролю?

Треба додати модуль:

form:
  url: http://example.com/forum/login.php
  username: <username>
  password: <password>

Прикладів конфігурації FlexGet, в тенетах, є багато. На жаль більшість "вітчизняних" та "історично вітчизняних" ресурсів не мають потрібного функціоналу (того ж RSS, наприклад) і треба заточувати налаштування під конкретне джерело.

Звичайно ми не дивимося піратських копій, але якби хотілося, то знайти можна все.

Наприклад є український сайт з прямими посиланнями на відеофайли — FS.UA.

Живий приклад — завантаження нових серій з FS.UA (лише для прикладу)

presets:
  xx_ua:

    series:
      - The Big Bang Theory
      - The Walking Dead
      - How I Met Your Mother:
          # На FS.ua файли ост. сезону містять скорочену назву серіалу (HIMYM)
          name_regexp:
            - HIMYM

    html:
      # Назву серіалу вгадувати з адреси (назви) файлу
      title_from: url

    exec:
      fail_entries: yes
      on_output:
        for_accepted: wget -c -P /d/temp/{{series_name|replace(' ','.')}}/S{{series_season|pad(2)}} {{url}}

feeds:

  TBBT:
    html:
      url: 'http://xx.ua/video/serials/i97505?ajax&folder=48862'
    preset: xx_ua

  TWD:
    html:
      url: 'http://xx.ua/video/serials/i97892?ajax&folder=53933'
    preset: xx_ua

  HIMYM:
    html:
      url: 'http://xx.ua/video/serials/i98318?ajax&folder=49023'
    preset: xx_ua
  • presets — набір правил, щоб не повторювати їх для кожного серіалу.

  • name_regexp  — альтернативні імена для серіалів (регулярний вираз). Наприклад, якщо назва файлу містить HIMYM то це теж вважається серіалом "How I Met Your Mother".

  • title_from — назву серіалу брати не з опису, не з мета-даних, а з самої назви файлу-посилання.

  • exec — додаток виводу. Отримані адреси передавати сторонній команді (wget, в цьому випадку).

  • fail_entries — перевіряти чи завершилася команда упішним кодом (не 0). Інакше — вважати файл необробленим (спробувати наст. разу).

  • {{series_name|replace(' ','.')}} — використати назву серіалу для формування шляху завантаження.

  • {{series_name|replace(' ','.')}} — замінити у назві серіалу усі пробіли на крапки (для уникнення проблем з пробілами і шляхах).

  • {{series_season|pad(2)}} — використати номер сезону для формування шляху завантаження.

  • {{series_season|pad(2)}} — номер сезону складатиметься з двох цифр (S5 перетвориться на S05)

  • {{url}} — змінна, що міститиме адресу файлу для завантаження, що була відібрана додатком вводу.

  • preset: xx_ua — для жданого елементу використати налаштування, що прописані в блоці налаштувань xx_ua.

Встановлення FlexGet

Розказувати, дуже, нема про що. Детальніше тут.

sudo apt-get install python
sudo apt-get install python-setuptools
sudo easy_install flexget

Тестування

Щоб перевірити чи є помилки в конфігураційному файлі:

flexget --check

$:~/.flexget$ flexget --check
2012-01-21 13:32 INFO     feed          TBBT            Feed 'TBBT' passed
2012-01-21 13:32 INFO     feed          HIMYM           Feed 'HIMYM' passed
2012-01-21 13:32 INFO     feed          TWD             Feed 'TWD' passed

Емуляція роботи:

flexget --test

$:~/.flexget$ flexget --test
2012-01-21 11:30 INFO     manager                       Test mode, creating a copy from database ...
2012-01-21 11:30 INFO     manager                       Test database created
2012-01-21 11:30 VERBOSE  details       TBBT            Produced 24 entries.
2012-01-21 11:30 VERBOSE  feed          TBBT            ACCEPTED: `The.Big.Bang.Theory.S05E01.720p.WEB-DL.eng.rus.[Kuraj-Bambey].mkv` by series plugin because only matching choice
2012-01-21 11:30 VERBOSE  feed          TBBT            ACCEPTED: `The.Big.Bang.Theory.S05E02.720p.WEB-DL.eng.rus.[Kuraj-Bambey].mkv` by series plugin because only matching choice
2012-01-21 11:30 VERBOSE  feed          TBBT            ACCEPTED: `The.Big.Bang.Theory.S05E03.720p.WEB-DL.eng.rus.[Kuraj-Bambey].mkv` by series plugin because only matching choice
2012-01-21 11:30 VERBOSE  details       TBBT            Summary - Accepted: 3 (Rejected: 0 Undecided: 3 Failed: 0)
2012-01-21 11:30 INFO     exec          TBBT            Would execute: wget -c -P /d/temp/The.Big.Bang.Theory/S05 http://xx.ua/get/dl/986967aqistd41jolfm2qv59l/The.Big.Bang.Theory.S05E01.720p.WEB-DL.eng.rus.[Kuraj-Bambey].mkv
2012-01-21 11:30 INFO     exec          TBBT            Would execute: wget -c -P /d/temp/The.Big.Bang.Theory/S05 http://xx.ua/get/dl/986967aqiwkpgy9w6xocztk6h/The.Big.Bang.Theory.S05E02.720p.WEB-DL.eng.rus.[Kuraj-Bambey].mkv
2012-01-21 11:30 INFO     exec          TBBT            Would execute: wget -c -P /d/temp/The.Big.Bang.Theory/S05 http://xx.ua/get/dl/986967aqistd6ynpxyxky6h61/The.Big.Bang.Theory.S05E03.720p.WEB-DL.eng.rus.[Kuraj-Bambey].mkv
2012-01-21 11:30 INFO     manager                       Removed test database

Отаке. Пробуйте.

Для себе, я ще не експериментував з торрентами, що додають серії оновленням торрент-файлу. Теоретично це вже справа торрент-клієнта як він з ними розбереться.


Коментарі