seekerr

command module
v1.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 19, 2022 License: MIT Imports: 1 Imported by: 0

README

seekerr

Tool to add new movies to Radarr based on RSS, IMDB and Trakt lists.

GitHub issues GitHub pull requests MIT Copyright 2020-2022 Github Releases


Introduction

Seekerr uses RSS, IMDB and Trakt.tv lists to find movies and adds them to Radarr.

Examples of supported lists:

Configuration

Sample Configuration
logger:
  level: info # panic,fatal,error,warn,info,debug,trace
  timeFormat: "" # golang time format
  color: true # active color on console
  human: true # store file log as human readable
  file: "var/log/seekerr.%Y%m%d.log" # %Y%m%d is used for rotation. leave empty to disable file log

cron: "0 */2 * * *"

services:
  resty:
    debug: false
    timeout: 20s #golang duration
    retry: 0 # zero for no retries
    retryWaitTime: 1s
    retryMaxWaitTime: 10s

  trakt:
    apiKey: ""

  omdb:
    apiKey: ""

  guessIt:
    type: "command" # webservice
    path: "guessit"
    # url: "http://192.168.1.100:5000/"

  radarr:
    url: "http://192.168.1.100:7878/"
    apiKey: ""
    rootFolder: "/movies/"
    quality: "Bluray"
    minimumAvailability: "inCinemas"
    monitored: true
    searchForMovie: false

notifications:
  gotify:
    webhook: "http://192.168.1.100:8070/message?token=XXXX"
    events: ["ADDED_MOVIE","REVISION_MOVIE","FINISH_ALL_FEEDS"] # START_FEED, FINISH_FEED, FINISH_ALL_FEEDS, ADDED_MOVIE, leave empty for all

  slack:
    webhook: "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
    events: ["ADDED_MOVIE","REVISION_MOVIE","FINISH_ALL_FEEDS"] # START_FEED, FINISH_FEED, FINISH_ALL_FEEDS, ADDED_MOVIE, leave empty for all

importer:
  revision: false
  filter:
    limit: 100 # limit the movies to process on each list
    exclude:
      - 'CountRatings < 2 || Runtime < 20 || ImdbVotes < 1000 || Year > Now().Year()'
      - 'Ratings.Imdb != 0 && Ratings.Imdb < 7'
      - 'Ratings.Metacritic != 0 && Ratings.Metacritic < 70'
      - 'Ratings.RottenTomatoes != 0 && Ratings.RottenTomatoes < 75'
    revision:
      - 'CountRatings < 2 || Runtime < 20 || ImdbVotes < 1000 || Year > Now().Year()'
      - 'Ratings.Imdb != 0 && Ratings.Imdb < 6.5'
      - 'Ratings.Metacritic != 0 && Ratings.Metacritic < 60'
      - 'Ratings.RottenTomatoes != 0 && Ratings.RottenTomatoes < 65'

  lists:
    rarbg:
      type: "rss" # rss | trakt | imdb
      url: "https://rarbgprx.org/rssdd_magnet.php?category=44"
      guessIt: true

    imdb:
      type: "imdb" # rss | trakt | imdb
      url: "https://www.imdb.com/list/ls016522954/?sort=list_order,asc&st_dt=&mode=detail&page=1&title_type=movie&user_rating=6.0%2C&ref_=ttls_ref_rt_usr"

    traktTrending:
      type: "trakt" # rss | trakt | imdb
      # special urls trakt://movies/trending, trakt://movies/popular, trakt://movies/anticipated, trakt://movies/boxoffice
      url: "trakt://movies/trending"

    traktPublic:
      type: "trakt" # rss | trakt | imdb
      url: "https://trakt.tv/users/movistapp/lists/now-playing?sort=rank,asc"
CRON

Added a new cron command that runs the import based on the schedule in the configuration:

cron: "0 */2 * * *"

A cron expression represents a set of times, using 5 space-separated fields.

Field name Mandatory? Allowed values Allowed special characters
Minutes Yes 0-59 * / , -
Hours Yes 0-23 * / , -
Day of month Yes 1-31 * / , - ?
Month Yes 1-12 or JAN-DEC * / , -
Day of week Yes 0-6 or SUN-SAT * / , - ?

Note: Month and Day-of-week field values are case insensitive. "SUN", "Sun", and "sun" are equally accepted.

Then execute the following command:

seekerr cron
Services
  • Radarr

    Radarr configuration.

      radarr:
        url: "http://192.168.1.100:7878/"
        apiKey: ""
        rootFolder: "/movies/"
        quality: "Bluray"
        minimumAvailability: "inCinemas"
        monitored: true
        searchForMovie: false
    

    apiKey - Radarr's API Key.

    quality - Quality Profile that movies are assigned to.

    minimumAvailability - The minimum availability the movies are set to.

    • Choices are announced, inCinemas, released (Physical/Web), or predb.

    rootFolder - Root folder for movies.

    url - Radarr's URL.

    • Note: If you have URL Base enabled in Radarr's settings, you will need to add that into the URL as well.
  • OMDB

    OMDb Authentication info.
    Needed to fetch movie ratings and filter out movies.

      omdb:
        apiKey: ""
    
  • Trakt

    1. Create a Trakt application by going here

    2. Enter a name for your application; for example seekerr

    3. Enter urn:ietf:wg:oauth:2.0:oob in the Redirect uri field.

    4. Click "SAVE APP".

    5. Open the seekerr configuration file seekerr.yaml and insert your Trakt API Key:

        trakt:
          apiKey: "your_trakt_api_key"
      
  • GuessIt

    GuessIt it's used to parse the title of RSS item and obtain the correct movie name and year. By knowing the correct movie we can fetch the ratings from OMDB.
    It can be configured as a command line or as rest service.

      guessIt:
        type: "command" # webservice
        path: "guessit"
        # url: "http://192.168.1.100:5000/"
    
  • Resty

      resty:
        debug: false
        timeout: 20s #golang duration
        retry: 0 # zero for no retries
        retryWaitTime: 1s
        retryMaxWaitTime: 10s
    
Filters

The filters can be configured globally and per list, the list configuration takes precedence over the global filter configuration.

  revision: false
  filter:
    limit: 100 # limit the movies to process on each list
    exclude:
      - 'CountRatings < 2 || Runtime < 20 || ImdbVotes < 1000 || Year > Now().Year()'
      - 'Ratings.Imdb != 0 && Ratings.Imdb < 7'
      - 'Ratings.Metacritic != 0 && Ratings.Metacritic < 70'
      - 'Ratings.RottenTomatoes != 0 && Ratings.RottenTomatoes < 75'
    revision:
      - 'CountRatings < 2 || Runtime < 20 || ImdbVotes < 1000 || Year > Now().Year()'
      - 'Ratings.Imdb != 0 && Ratings.Imdb < 6.5'
      - 'Ratings.Metacritic != 0 && Ratings.Metacritic < 60'
      - 'Ratings.RottenTomatoes != 0 && Ratings.RottenTomatoes < 65'

revision - Notify me about movies that are not approved but match revision rules

limit - Process only this number movies in the list

exclude - An list of expressions that exclude the movie from being added

Lists

The base configuration for the lists is:

  name_of_list:
    # The type of the feed, support 3 types
    type: rss | trakt | imdb
    # special urls for trakt type trakt://movies/trending, trakt://movies/popular, trakt://movies/anticipated, trakt://movies/boxoffice
    url: "http://feed-url.com"
    guessIt: true # only for rss and if it's necessary to parse the title to get the correct movie name and year
    # you can override the global filters for a specific feed
    filter:  
  • RSS
    rarbg:
      type: "rss"
      url: "https://rarbgprx.org/rssdd_magnet.php?category=44"
      guessIt: true
  • IMDB
    imdb:
      type: "imdb"
      url: "https://www.imdb.com/list/ls016522954/?sort=list_order,asc&st_dt=&mode=detail&page=1&title_type=movie&user_rating=6.0%2C&ref_=ttls_ref_rt_usr"
  • Trakt
    traktTrending:
      type: "trakt" # rss | trakt | imdb
      # special urls trakt://movies/trending, trakt://movies/popular, trakt://movies/anticipated, trakt://movies/boxoffice
      url: "trakt://movies/trending"

    traktPublic:
      type: "trakt" # rss | trakt | imdb
      url: "https://trakt.tv/users/movistapp/lists/now-playing?sort=rank,asc"
Notifications
  • Gotify
notifications:
  gotify:
    webhook: "http://192.168.1.100:8070/message?token=XXXX"
    events: ["ADDED_MOVIE","REVISION_MOVIE","FINISH_ALL_FEEDS"] # START_FEED, FINISH_FEED, FINISH_ALL_FEEDS, ADDED_MOVIE, leave empty for all
  • Slack
  slack:
    webhook: "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
    events: ["ADDED_MOVIE","REVISION_MOVIE","FINISH_ALL_FEEDS"] # START_FEED, FINISH_FEED, FINISH_ALL_FEEDS, ADDED_MOVIE, leave empty for all

Slack notification example:

slack

Logger
logger:
  level: info # panic,fatal,error,warn,info,debug,trace
  timeFormat: "" # golang time format
  color: true # active color on console
  human: true # store log as human readable
  file: "var/log/seekerr.%Y%m%d.log" # %Y%m%d is used for rotation. leave empty to disable file log

Usage

Docker

Using stable releases:

docker run -d --name='Seekerr' -v '<path to data>':'/config':'rw' 'lightglitch/seekerr:stable'

Using master:

docker run -d --name='Seekerr' -v '<path to data>':'/config':'rw' 'lightglitch/seekerr:latest'

You need to create your config file before running the docker image.

General
seekerr
Tool to add new movies to Radarr using internet lists.
You can filter, exclude and define the minimum ratings to add the movies you pretend.

Usage:
  seekerr [command]

Available Commands:
  help        Help about any command
  import      Import the movies found in the lists to radarr.
  version     Print the version number of seekerr

Flags:
      --config string   config file (default is config/seekerr.yaml)
  -h, --help            help for seekerr

Use "seekerr [command] --help" for more information about a command.
Import
seekerr import --help
Import the movies found in the lists to radarr.

Usage:
  seekerr import [flags]

Flags:
  -h, --help          help for import
  -l, --list string   The name of the list to import (default "all")
  -r, --revision      Notify me about movies that are not approved but match revision rules

Global Flags:
      --config string   config file (default is config/seekerr.yaml)

-l, --list - The name of the list that is configured in the file seekerr.yaml. If empty imports all lists.

Cron
seekerr cron --help
Import the movies found in the lists to radarr using the schedule on the config file.

Usage:
  seekerr cron [flags]

Flags:
  -h, --help              help for cron
  -s, --schedule string   Run with this cron schedule

Global Flags:
      --config string   config file (default is config/seekerr.yaml)
TODO
  • Tests
  • Support Series and Sonarr
References and Inspiration
  • traktarr: Traktarr uses Trakt.tv to find shows and movies to add in to Sonarr and Radarr, respectively.

  • Radarr: A fork of Sonarr to work with movies à la Couchpotato.

  • Seekerr logo used icons made by phatplus and freepik from www.flaticon.com


Documentation

Overview

Copyright © 2020 Mário Franco

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Directories

Path Synopsis
common
rss
services
utils

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL