Flexget, Lostfilm.tv, transmission и pushbullet

flexget янв. 12, 2014

В этой заметке рассмотрим связку 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 также дает вам возможность отправлять уведомления себе и своим друзьям!

Ссылка на маркет

Расширение для Chrome

Расширение для Firefox

Я решил использовать это приложение для уведомления на смартфон или планшет о том, что началась закачка очередной серии.

Что нам для этого нужно?

  • Регистрируемся на сайте приложения: https://www.pushbullet.com/
  • Заходим в настройки своего аккаунта и находим там API Key:

Pushbullet

Этот ключ нам понадобиться в дальнейшем для создания скрипта, который будет отправлять уведомления.

  • Узнаем идентификатор устройства, на которое мы хотим получать уведомления:

Для этого нужно в консоли запустить команду (вместо 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"

Результат на экране смартфона:

Pushbullet Android

Если вы увидели на экране своего смартфона или планшета аналогичную картинку – значит вы сделали все правильно.

Теперь перейдем к настройке flexget

Настройка связки Flexget, Lostfilm.tv, transmission и pushbullet

  • Я решил что не буду пользоваться кроном, а запущу flexget в режиме демона. Для этого необходимо использовать новый плагин schedules:
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}}"
Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.