---
id: torrent9
name: Torrent9
description: "Torrent9 is a FRENCH Public site for TV / MOVIES / GENERAL"
language: fr-fr
type: public
encoding: UTF-8
followredirect: true
links:
  - https://torrent9.to/
  - https://www.torrent9.gg/
  - https://torrent9.unblockninja.com/
  - https://www.oxtorrent.me/

legacylinks:
  - http://www.torrent9.ec/
  - http://www.torrent9.red/
  - http://www.torrent9.bz/
  - http://www.torrents9.pe/
  - http://www.torrent9.cc/
  - http://www.torrent9.pe/
  - http://www.torrent9.blue/
  - https://www.torrent9.blue/
  - https://ww2.torrent9.blue/
  - https://www.torrent9.rip/
  - https://www.torrent9.ph/
  - https://ww1.torrent9.ph/
  - https://torrent9.ga/
  - https://www.torrent9.uno/
  - https://wvw.torrent9.uno/
  - https://ww1.torrent9.uno/
  - https://wvw.t9.pe/
  - https://www4.torrent9.to/
  - https://www.torrent9.cat/
  - https://www.torrent09.uno/
  - https://www.torrent9.pl/ # this is a proxy for torrent9clone
  - https://torrent9.black-mirror.xyz/ # this is a proxy for torrent9clone
  - https://torrent9.unblocked.casa/ # this is a proxy for torrent9clone
  - https://torrent9.proxyportal.fun/ # this is a proxy for torrent9clone
  - https://torrent9.uk-unblock.xyz/ # this is a proxy for torrent9clone
  - https://torrent9.ind-unblock.xyz/ # this is a proxy for torrent9clone
  - https://ww1.torrent9.is/
  - https://ww1.torrent9.to/
  - https://www.torrent9.is/
  - https://torrent9.li/ # not a proxy for torrent9 or torrent9clone

caps:
  categorymappings:
    - {id: films, cat: Movies, desc: "Movies"}
    - {id: series, cat: TV, desc: "TV"}
    - {id: musique, cat: Audio, desc: "Music"}
    - {id: ebook, cat: Books, desc: "Books"}
    - {id: logiciels, cat: PC, desc: "Software"}
    - {id: jeux-pc, cat: PC/Games, desc: "PC Games"}
    - {id: jeux-consoles, cat: Console/XBox 360, desc: "Console Games"}

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

settings:
  - name: multilang
    type: checkbox
    label: Replace MULTI by another language in release name
    default: false
  - name: multilanguage
    type: select
    label: Replace MULTI by this language
    default: FRENCH
    options:
      FRENCH: FRENCH
      MULTI.FRENCH: MULTI.FRENCH
      ENGLISH: ENGLISH
      MULTI.ENGLISH: MULTI.ENGLISH
      VOSTFR: VOSTFR
      MULTI.VOSTFR: MULTI.VOSTFR
  - name: vostfr
    type: checkbox
    label: Replace VOSTFR with ENGLISH
    default: false
  - name: sort
    type: select
    label: Sort requested from site (Only works for searches with Keywords)
    default: ".html"
    options:
      ".html": best
      ".html,trie-date-d": created desc
      ".html,trie-date-a": created asc
      ".html,trie-seeds-d": seeders desc
      ".html,trie-seeds-a": seeders asc
      ".html,trie-poid-d": size desc
      ".html,trie-poid-a": size asc
      ".html,trie-nom-d": title desc
      ".html,trie-nom-a": title asc
  - name: info_131681
    type: info
    label: About Torrent9 Categories
    default: Torrent9 only returns category <b>Movies</b> in its <i>Keywordless</i> search results page.</br>To pass your apps' indexer TEST you will need to include the 131681(Movies) category.

download:
  selector: a[href^="magnet:?"]
  attribute: href

search:
  paths:
    - path: "{{ if .Keywords }}/search_torrent/{{ .Keywords }}{{ .Config.sort }}{{ else }}/top_torrent.html{{ end }}"
  keywordsfilters:
    # if searching for season packs with S01 to saison 1 #9712
    - name: re_replace
      args: ["(?i)(S0)(\\d{1,2})$", "saison $2"]
    - name: re_replace
      args: ["(?i)(S)(\\d{1,3})$", "saison $2"]
    - name: replace
      args: [" ", "-"]

  rows:
    selector: table.table-striped > tbody > tr
    filters:
      - name: andmatch

  fields:
    category:
      selector: td:nth-child(1) i
      case:
        i[class="fa fa-video-camera"]: films
        i[class="fa fa-desktop"]: series
        i[class="fa fa-tv"]: series
        i[class="fa fa-music"]: musique
        i[class="fa fa-gamepad"]: jeux-pc
        i[class="fa fa-laptop"]: logiciels
        i[class="fa fa-book"]: ebook
    site_date:
      selector: td:nth-child(1) a
      filters:
        # year is at the end of the title, so we get it and name it site_date
        - name: regexp
          args: "(19|20\\d{2})$"
    title_phase1:
      selector: td:nth-child(1) a
      filters:
        # now we put the date at the right place according scene naming rules using .Result.site_date
        - name: re_replace
          args: ["(?i)( FRENCH)", " {{ .Result.site_date }} FRENCH"]
        - name: re_replace
          args: ["(?i)( MULTI)", " {{ .Result.site_date }} MULTI"]
        - name: re_replace
          args: ["(?i)( TRUEFRENCH)", " {{ .Result.site_date }} TRUEFRENCH"]
        - name: re_replace
          args: ["(?i)( VOSTFR)", " {{ .Result.site_date }} VOSTFR"]
        - name: re_replace
          args: ["(?i)( SUBFRENCH)", " {{ .Result.site_date }} SUBFRENCH"]
        # and we delete it at the end
        - name: re_replace
          args: ["(19|20\\d{2})$", ""]
    title_multilang:
      text: "{{ .Result.title_phase1 }}"
      filters:
        - name: re_replace
          args: ["(?i)(\\smulti\\s)", " {{ .Config.multilanguage }} "]
    title_phase2:
      text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
    title_vostfr:
      text: "{{ .Result.title_phase2 }}"
      filters:
        - name: re_replace
          args: ["(?i)(\\svostfr\\s)", " ENGLISH "]
        - name: re_replace
          args: ["(?i)(\\ssubfrench\\s)", " ENGLISH "]
    title:
      text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
    details:
      selector: td:nth-child(1) a
      attribute: href
    download:
      selector: td:nth-child(1) a
      attribute: href
    date:
      text: now
    size:
      selector: td:nth-child(2)
      filters:
        - name: replace
          args: ["Ko", "KB"]
        - name: replace
          args: ["Mo", "MB"]
        - name: replace
          args: ["Go", "GB"]
        - name: replace
          args: ["To", "TB"]
    seeders:
      text: 0
    seeders:
      selector: td:nth-child(3)
      optional: true
    leechers:
      text: 0
    leechers:
      selector: td:nth-child(4)
      optional: true
    downloadvolumefactor:
      text: 0
    uploadvolumefactor:
      text: 1
# engine n/a
