---
id: uniongang
name: UnionGang
description: "UnionGang is a RUSSIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: ru-RU
type: private
encoding: UTF-8
links:
  - https://uniongang.net/
legacylinks:
  - http://www.uniongang.net/
  - https://www.uniongang.net/

caps:
  categorymappings:
    - {id: 1, cat: Movies, desc: "Movies / HDRip / BDRip"}
    - {id: 21, cat: Movies/WEB-DL, desc: "Movies WEB-DL / WEB-DLRip"}
    - {id: 2, cat: Movies/HD, desc: "Movies x264"}
    - {id: 5, cat: Movies/HD, desc: "Movies BDRemux / BDRip1080p"}
    - {id: 6, cat: TV, desc: "TV Сериал"}
    - {id: 7, cat: TV/Documentary, desc: "TV Документальный"}
    - {id: 9, cat: TV, desc: "Мультфильм"}
    - {id: 10, cat: TV, desc: "ТВ / Выпуски / Шоу"}
    - {id: 11, cat: PC, desc: "Игра / PC"}
    - {id: 13, cat: Audio, desc: "Музыка / Русская"}
    - {id: 14, cat: Audio, desc: "Музыка / Зарубежная"}
    - {id: 23, cat: Movies/UHD, desc: "Movies / 4K"}

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

settings:
  - name: username
    type: text
    label: Username
  - name: password
    type: password
    label: Password
  - name: stripcyrillic
    type: checkbox
    label: Strip Cyrillic Letters
    default: false
  - name: addrussiantotitle
    type: checkbox
    label: Add RUS to end of all titles to improve language detection by Sonarr and Radarr. Will cause English-only results to be misidentified.
    default: false
  - name: freeleech
    type: checkbox
    label: Search freeleech only
    default: false
  - name: sort
    type: select
    label: Sort requested from site
    default: 4
    options:
      4: created
      7: seeders
      5: size
      1: title
  - name: type
    type: select
    label: Order requested from site
    default: desc
    options:
      desc: desc
      asc: asc

login:
  path: takelogin.php
  method: post
  inputs:
    username: "{{ .Config.username }}"
    password: "{{ .Config.password }}"
  error:
    - selector: div.error
  test:
    path: /
    selector: a[href="/logout.php"]

search:
  paths:
    - path: browse.php
  inputs:
    $raw: "{{ range .Categories }}cat[]={{.}}&{{end}}"
    search: "{{ .Keywords }}"
    shw_incl_cats: 0
    #  0 default, 1 active, 1 inactive,  3 gold, 4 important, 5 unverified,  6 banned, 7 no tags, 8 my torrents, 9-31 lots of other choices
    incldead: "{{ if .Config.freeleech }}3{{ else }}0{{ end }}"
    sort: "{{ .Config.sort }}"
    type: "{{ .Config.type }}"
    # site does not support imdbid search or provide imdb links in results

  keywordsfilters:
    # strip season and/or ep
    - name: re_replace
      args: ["(?i)\\b(?:[SE]\\d{1,4}){1,2}\\b\\s?", ""]

  rows:
    selector: table.brws.main > tbody > tr[class^="torcont"]
    after: 1

  fields:
    category:
      selector: a[href^="browse.php?cat="]
      attribute: href
      filters:
        - name: querystring
          args: cat
    title:
      selector: a[href^="details.php?id="]
      filters:
        # normalize to SXXEYY format
        - name: re_replace
          args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)", "S$1E$2 of $3"]
        - name: re_replace
          args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езоны?.+?(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))?", "S$1E$2 of $3"]
        - name: re_replace
          args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езоны?.+?(\\d+(?:-\\d+)?)\\s*(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))\\s+из\\s*(\\w?)", "S$1E$2 of $3"]
        - name: re_replace
          args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))?", "S$1E$2 of $3"]
        - name: re_replace
          args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)\\s*(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))\\s+из\\s*(\\w?)", "S$1E$2 of $3"]
        - name: re_replace
          args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)", "S$1E$2"]
        - name: re_replace
          args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езоны?.+?(\\d+(?:-\\d+)?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "S$1E$2"]
        - name: re_replace
          args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "S$1E$2"]
        - name: re_replace
          args: ["(?i)[CС]езоны?[\\s:]*(\\d+(?:-\\d+)?)", "S$1"]
        - name: re_replace
          args: ["(?i)(\\d+(?:-\\d+)?)\\s+[CС]езоны?", "S$1"]
        - name: re_replace
          args: ["(?i)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)", "E$1 of $2"]
        - name: re_replace
          args: ["(?i)(\\d+(?:-\\d+)?)\\s*из\\s*(\\w?)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "E$1 of $2"]
        - name: re_replace
          args: ["(?i)(\\d+(?:-\\d+)?)\\s+(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))\\s+из\\s*(\\w?)", "E$1 of $2"]
        - name: re_replace
          args: ["(?i)(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))[\\s:]*(\\d+(?:-\\d+)?)", "E$1"]
        - name: re_replace
          args: ["(?i)(\\d+(?:-\\d+)?)\\s+(?:\\s*(?:[CС]ери[ияй]|Эпизод|Выпуски?))", "E$1"]
        - name: re_replace
          args: ["(?i)\\bР(\\d)?\\b", "P$1"]
        - name: re_replace
          args: ["(?i)\\sот\\s([\\w\\p{P}\\p{S}]+)\\s\\|(.+)", "$2-$1"]
        - name: re_replace
          args: ["\\s\\|\\s(\\w{4,})$", "-$1"]
        - name: re_replace
          args: ["(\\([\\p{IsCyrillic}\\W]+\\))|(^[\\p{IsCyrillic}\\W\\d]+\\/ )|([\\p{IsCyrillic} \\-]+,+)|([\\p{IsCyrillic}]+)", "{{ if .Config.stripcyrillic }}{{ else }}$1$2$3$4{{ end }}"]
        - name: re_replace
          args: ["(?i)\\bHDTV[-\\s]?Rip\\b", "HDTV"]
        - name: re_replace
          args: ["(?i)\\bSAT[-\\s]?Rip\\b", "HDTV"]
        - name: re_replace
          args: ["(?i)\\bWEB[-\\s]?DL[-\\s]?Rip\\b", "WEB-DL"]
        - name: re_replace
          args: ["(?i)\\bWEB\\sRip\\b", "WEBRip"]
        - name: re_replace
          args: ["(?i)\\bWEB\\sDL\\b", "WEB-DL"]
        - name: re_replace
          args: ["[\\[\\(\\{<«][\\s\\W]*[\\]\\)\\}>»]", ""]
        - name: re_replace
          args: ["^[\\s&,\\.!\\?\\+\\-_\\|\\/':]+", ""]
        - name: append
          args: "{{ if .Config.addrussiantotitle }} RUS{{ else }}{{ end }}"
    details:
      selector: a[href^="details.php?id="]
      attribute: href
    download:
      selector: a[href^="download.php?id="], a[href^="magnet:?xt="]
      attribute: href
    size:
      selector: a[href^="download.php?id="], a[href^="magnet:?xt="]
    seeders:
      selector: td:nth-last-child(3)
      filters:
        - name: split
          args: ["|", 0]
    leechers:
      selector: td:nth-last-child(3)
      filters:
        - name: split
          args: ["|", 1]
    date:
      selector: td:has(a[href^="userdetails.php?id="]) ~ td, td:has(a[href^="browse.php?gr="]) ~ td
      remove: a
      filters:
        - name: re_replace
          args: ["(?i)(назад)", "ago"]
        - name: re_replace
          args: ["(?i)(секунду|секунды|секунд)", "seconds"]
        - name: re_replace
          args: ["(?i)(минуты|минуту|минут)", "minutes"]
        - name: re_replace
          args: ["(?i)(часов|часа|час)", "hours"]
        - name: re_replace
          args: ["(?i)(день|дней|дня)", "days"]
        - name: re_replace
          args: ["(?i)(неделю|недели|недель)", "weeks"]
        - name: re_replace
          args: ["(?i)(месяц|месяца|месяцев)", "months"]
        - name: re_replace
          args: ["(?i)(года|год|лет)", "years"]
        - name: timeago
    downloadvolumefactor:
      case:
        img[src="/pic/freedownload.gif"]: 0
        "*": 1
    uploadvolumefactor:
      text: 1
    minimumratio:
      text: 0.3
# Engine n/a
