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:

  - 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}}"

Tags

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.