---
id: rutor
name: RuTor
description: "RuTor is a RUSSIAN Public site for MOVIES / TV / GENERAL"
language: ru-RU
type: public
encoding: UTF-8
links:
  - http://rutor.info/ # site does not support https ERR_CONNECTION_REFUSED
  - http://rutor.is/ # site does not support https ERR_CONNECTION_REFUSED
  - http://6tor.org/
legacylinks:
  - http://live-rutor.org/ # domain expired 9 Feb 2020
  - http://new-rutor.org/ # ERR_NAME_NOT_RESOLVED
  - https://rutor.black-mirror.xyz/
  - https://rutor.unblocked.casa/
  - https://rutor.proxyportal.fun/
  - https://rutor.uk-unblock.xyz/
  - https://rutor.ind-unblock.xyz/
  - https://rutor.unblocked.bar/
  - https://rutor.proxyportal.pw/
  - https://rutor.uk-unblock.pro/
  - https://rutor.root.yt/
  - https://rutor.unblocked.rest/
  - https://rutor.unblocked.monster/
  - https://rutor.nocensor.space/
  - https://rutor.nocensor.work/

caps:
  # unfortunately RuTor does not display categories anywhere in its search results page :-(
  # albeit you can select a single category in its search options
  # so I've opted not to support categories
  categorymappings:
    - {id: 1, cat: Movies, desc: "Movies"}
    - {id: 2, cat: TV, desc: "TV"}
    - {id: 3, cat: Other, desc: "Other"}

  modes:
    search: [q]
    tv-search: [q, season, ep, imdbid]
    movie-search: [q, imdbid]
    music-search: [q]

settings:
  - name: addrussian
    type: checkbox
    label: Add RUSSIAN to end of all titles to improve language detection by Sonarr and Radarr. Will cause English-only results to be misidentified.
    default: false
  - name: info
    type: info
    label: A note about RuTor
    default: RuTor does not display categories in its search results page. This definition is probably only suitable for Jackett Dashboard Manual searches.
  - name: sort
    type: select
    label: Sort requested from site (Applies only to Search with Keywords)
    default: 0
    options:
      0: "created desc"
      1: "created asc"
      2: "seeders desc"
      3: "seeders asc"
      6: "size desc"
      7: "size asc"
      8: "title desc"
      9: "title asc"

search:
  paths:
    # http://rutor.info/search/0/0/010/0/tt10288566 # search title and descr for imdb
    # http://rutor.info/search/0/0/100/0/gotham%2004x01 # search title for query
    # http://rutor.info/top/ # search keywordless
    - path: "{{ if .Query.IMDBID }}search/0/0/010/{{ .Config.sort }}/{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if .Keywords }}search/0/0/100/{{ .Config.sort }}/{{ .Keywords }}/{{ else }}{{ end }}{{ if or .Keywords .Query.IMDBID }}{{ else }}top/{{ end }}"

  rows:
    selector: tr:has(td:has(a.downgif))

  fields:
    category:
      text: 3
    title_is_rus:
      selector: td:nth-of-type(2) a[href^="/torrent/"]
      filters:
        - name: re_replace
          args: ["[^А-Яа-яЁё]+", ""]
    title:
      selector: td:nth-of-type(2) a[href^="/torrent/"]
      filters:
        - name: re_replace
          args: [".+\\/\\s([^а-яА-я\\/]+)\\s.*\\[(?:S*(\\d+))(?:x*(\\d+-*\\d*).*)*\\].*\\)\\s+(.+)\\s+(?:\\||от)\\s*(.+)", "$1 - S$2E$3 - rus - $4 - $5"]
        - name: replace
          args: ["E -", "E01-99 -"]
        - name: replace
          args: ["Кураж-Бамбей", "kurazh"]
        - name: append
          args: "{{ if .Result.title_is_rus }} - RUSSIAN{{ else }}{{ end }}"
        - name: re_replace
          args: ["(.+?) - RUSSIAN", "{{ if .Config.addrussian }}$1 - RUSSIAN{{ else }}$1{{ end }}"]
    details:
      selector: td:nth-of-type(2) a[href^="/torrent/"]
      attribute: href
    download:
      selector: td:nth-of-type(2) a.downgif
      attribute: href
    magnet:
      optional: true
      selector: td:nth-of-type(2) a[href^="magnet:?xt="]
      attribute: href
    date:
      # 27 Окт 17
      selector: td:nth-of-type(1)
      filters:
        # replace white spaces
        - name: re_replace
          args: ["[\\s]+", " "]
        # replace month abbreviations
        - name: replace
          args: ["Янв", "Jan"]
        - name: replace
          args: ["Фев", "Feb"]
        - name: replace
          args: ["Мар", "Mar"]
        - name: replace
          args: ["Апр", "Apr"]
        - name: replace
          args: ["Май", "May"]
        - name: replace
          args: ["Июн", "Jun"]
        - name: replace
          args: ["Июл", "Jul"]
        - name: replace
          args: ["Авг", "Aug"]
        - name: replace
          args: ["Сен", "Sep"]
        - name: replace
          args: ["Окт", "Oct"]
        - name: replace
          args: ["Ноя", "Nov"]
        - name: replace
          args: ["Дек", "Dec"]
        - name: append
          args: " 00:00:00 +03:00" # MSK
        - name: dateparse
          args: "02 Jan 06 15:04:05 -07:00"
    # some results don't have comments which throws off td count. So we go fishing for the following fields
    size:
      optional: true
      selector: td:contains(\00a0GB), td:contains(\00a0MB), td:contains(\00a0kB), td:contains(\00a0B)
    seeders:
      selector: td span.green
    leechers:
      selector: td span.red
    downloadvolumefactor:
      text: 0
    uploadvolumefactor:
      text: 1
# engine n/a
