Flexget, Lostfilm.tv, transmission и pushbullet
В этой заметке рассмотрим связку Flexget, Lostfilm.tv, transmission и pushbullet.
После Нового Года выдались долгие выходные и я решил обновить связку flexget, transmission и lostfilm.tv. К этому меня подтолкнул читатель моего блога Ants Adolf Tamm.
Изменения
Как выяснилось, с тех пор как я последний раз редактировал конфиги, кое что изменилось:
- обновилась версия flexget (на момент написания этого мануала она была 1.2.31
- замена названия раздела конфига presets на templates
- замена плагина preset на template
- появился плагин schedules
- возможность запускать flexget как демон
Все это более подробно описано в предыдущем посте.
Старый конфиг не заработал после обновления flexget. Пришлось вносить изменения. Ниже я опишу что и где я изменил.
Также недавно мне попалось на глаза замечательное приложение для Android: Pushbullet.
Pushbullet
Описание с play.google.com:
Pushbullet shows you all of your phone's notifications right on your computer so you never miss a notification again!
Pushbullet also lets you send push notifications to yourself and to your friends!
Перевод:
Pushbullet показывает все ваши уведомления прямо на вашем компьютере и вы ни когда не пропустите их!
Pushbullet также дает вам возможность отправлять уведомления себе и своим друзьям!
Я решил использовать это приложение для уведомления на смартфон или планшет о том, что началась закачка очередной серии.
Что нам для этого нужно?
- Регистрируемся на сайте приложения: https://www.pushbullet.com/
- Заходим в настройки своего аккаунта и находим там API Key
Этот ключ нам понадобиться в дальнейшем для создания скрипта, который будет отправлять уведомления. - Узнаем идентификатор устройства, на которое мы хотим получать уведомления:
Для этого нужно в консоли запустить команду (вместо API_KEY подставляем свой ключ, который мы нашли на предыдущем шаге):
curl -u API_KEY: https://api.pushbullet.com/api/devices
{
"devices": [
{
"extras": {
"android_version": "4.3",
"app_version": 44,
"manufacturer": "samsung",
"model": "GT-I9300",
"sdk_version": "18"
},
"id": XXXXXXXXXXX,
"iden": "XXXXXXXXXXX"
},
{
"extras": {
"android_version": null,
"app_version": 19,
"manufacturer": "Google",
"model": "Chrome",
"nickname": "Chrome",
"sdk_version": null
},
"id": YYYYYYYYYYYYY,
"iden": "YYYYYYYYYYYYY"
}
],
"shared_devices": []
Как видим у меня два устройства – это смартфон и chrome. У вас их может быть больше или меньше. Нас интересует только id того устройства, которое мы будем использовать для получения уведомлений.
Теперь у нас имеется все необходимое для создания скрипта уведомлений – API key и Id устройства.
- Создаем скрипт в
/usr/local/bin
(или там где вам удобно) следующего содержания :
#!/bin/bash
title=$1
body=$2
curl -s https://api.pushbullet.com/api/pushes \
-u API_KEY: \
-d device_id=XXXXXXXXXXX \
-d type=note \
-d title="$title" \
-d body="$body" \
-X POST \
-0>/dev/null
- Даем имя нашему скрипту, к примеру, pushbullet и даем ему права на запуск.
Проверяем все ли правильно мы сделали – делаем тестовое уведомление:
/usr/local/bin/pushbullet flexget "Test notification"
Результат на экране смартфона:
Если вы увидели на экране своего смартфона или планшета аналогичную картинку – значит вы сделали все правильно.
Теперь перейдем к настройке flexget
Настройка связки Flexget, Lostfilm.tv, transmission и pushbullet
Я решил что не буду пользоваться кроном, а запущу flexget в режиме демона. Для этого необходимо использовать новый плагин schedules:
- tasks: lostfilm
interval:
minutes: 30
В данном случае задание lostfilm будет автоматически запускать каждые 30 минут.
Теперь опишем templates:
templates:
tvshows:
set:
path: /D/transmission/video/TV Shows/{{series_name}}/Season {{series_season}}
transmission:
host: 192.168.0.41
port: 9091
notification:
exec: /usr/local/bin/pushbullet flexget "Downloading {{series_id}}-{{series_name}}"
В моем случае шаблона всего два:
- tvshows: – путь куда будут качаться серии и настройки подключения к transmission. Я прислушался к совету Lex Rivera и сделал так что серии будут раскладываться по сезонам.
- notification: а вот здесь я и использую скрипт pushbullet, который будет высылать нам уведомления, когда flexget даст команду transmission качать очередную серию.
В итоге конфигурационный файл примет такой вид:
schedules:
- tasks: lostfilm
interval:
minutes: 30
templates:
tvshows:
set:
path: /D/transmission/video/TV Shows/{{series_name}}/Season {{series_season}}
transmission:
host: 192.168.0.41
port: 9091
series_premiere: yes
notification:
exec: /usr/local/bin/pushbullet flexget "Downloading {{series_id}}-{{series_name}}"
tasks:
lostfilm:
template:
- tvshows
- notification
headers:
cookie: "uid=XXXXXXX; pass=XXXXXXXX; usess=XXXXXXX"
rss: http://www.lostfilm.tv/rssdd.xml
urlrewrite:
newlost:
regexp: 'http://lostfilm.tv/download.php\?(?P<details>.*)'
format: 'http://www.lostfilm.tv/download.php?\g<details>'
regexp:
reject:
- The Complete
- mkv
- mp4
- 720p
manipulate:
- title:
replace:
regexp: '[^\x00-\x80]+'
format: ''
- url:
replace:
regexp: '&amp'
format: '&'
series:
- Futurama
- Helix
- Person of Interest
- Terra Nova
- Continuum
- American Horror Story
- Hell on Wheels
- Walking Dead
- Californication
- Touch
- Revolution
- Awake
- The River
- Arrow
- The Killing
- Last resort
- Bates Motel
- Game of Thrones
- Defiance
- Falling Skies
- Under the Dome
- Sleepy Hollow
- Almost Human
- Elementary
- Sherlock
- Intelligence
Проверим, не допустили ли мы ошибку:
flexget check
Если все ОК вы увидите следующее:
2014-01-17 12:56 WARNING manager Config line 2 is likely missing ':' at the end
2014-01-17 12:56 INFO check Config passed check.
На первую строчку можете не обращать внимание. Этот баг описан на сайте разработчика. Он касается планировщика.
Осталось только запустить flexget и ждать выхода очередной серии 🙂
flexget daemon start –d
PS
В последних версиях появился новый плагин – pushbullet
Теперь задача упрощается – достаточно в конфиге заменить всего несколько строчек:
вместо:
notification:
exec: /usr/local/bin/pushbullet "{{series_name}}" "Downloading {{series_id}}"
Нужно вставить это:
notification:
pushbullet:
apikey: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
title: "{{series_name}} - {{task}}"
body: "Download started - {{series_id}}"