Що найкраще в комп’ютерах? Можливо те, що вони можуть зробити майже все майже з нічого. :)
Така собі сучасна алхімія. Змусити щось неживе не лише повторювати монотонні, марудні для нас, операції, але і автоматизовувати процеси роблячи наше життя цікавішим. ;)
Є в мене медіацентр з оболонкою XBMC, про що я не ніяк наберуся часу написати. Він і відео показує, і музику грає і домашню фотоколекцію зберігає. Ну і деякі серіали, звичайно. Але ті серіали треба звідкись брати, їх кудись завантажувати, та й слідкувати коли ж вийшла нова серія.
Але комп’ютер на те і залізний, щоб думати — нехай це буде його проблема. Навчимо наш медіацентр самому завантажувати серіали (фільми), які нам подобаються.
FlexGet
Це система, написана на Python, а отже працює майже на усіх платформах.
-
запускається вручну чи періодично (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
Отаке. Пробуйте.
Для себе, я ще не експериментував з торрентами, що додають серії оновленням торрент-файлу. Теоретично це вже справа торрент-клієнта як він з ними розбереться.
