---
id: ptfiles
name: PTFiles
description: "PTFiles (PTF) is a Private site for TV / MOVIES / GENERAL"
language: en-US
type: private
encoding: windows-1252
links:
  - https://ptfiles.net/

caps:
  categorymappings:
    - {id: 19, cat: Movies/SD, desc: "Movies/XviD"}
    - {id: 20, cat: Movies/DVD, desc: "Movies/DVD-R"}
    - {id: 60, cat: Movies/SD, desc: "Movies/SD X264"}
    - {id: 23, cat: TV/Anime, desc: "Anime"}
    - {id: 1, cat: PC/0day, desc: "Apps"}
    - {id: 55, cat: Books, desc: "Comics"}
    - {id: 5, cat: Movies/HD, desc: "Movies/720p HD"}
    - {id: 8, cat: Movies/HD, desc: "Movies/1080p HD"}
    - {id: 15, cat: Movies/UHD, desc: "Movies/Ultra-HD"}
    - {id: 44, cat: Movies, desc: "Movies/Packs"}
    - {id: 69, cat: Books, desc: "E Books"}
    - {id: 12, cat: Books, desc: "E Learning"}
    - {id: 11, cat: PC/Mac, desc: "Mac OS"}
    - {id: 7, cat: TV/SD, desc: "TV/XviD Episodes"}
    - {id: 42, cat: TV/SD, desc: "TV/SD X264 Episodes"}
    - {id: 33, cat: TV/HD, desc: "TV/HD Episodes"}
    - {id: 22, cat: Other, desc: "Misc"}
    - {id: 24, cat: PC/Mobile-Other, desc: "Mobile"}
    - {id: 6, cat: Audio, desc: "Music"}
    - {id: 39, cat: TV, desc: "TV/Seasons"}
    - {id: 4, cat: PC/Games, desc: "Games/PC"}
    - {id: 29, cat: Console, desc: "Games/Consoles"}
    - {id: 9, cat: XXX, desc: "XXX"}

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

settings:
  - name: cookie
    type: text
    label: Cookie
  - name: info
    type: info
    label: How to get the Cookie
    default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)<li>Refresh the page by pressing <b>F5</b><li>Click on the first row entry<li>Select the <b>Headers</b> tab on the Right panel<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
  - 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:
  method: cookie
  inputs:
    cookie: "{{ .Config.cookie }}"
  test:
    path: browse.php

search:
  paths:
    # https://ptfiles.net/browse.php?search=tt3612126&incldead=1&title=1
    # https://ptfiles.net/browse.php?free=1&search=&incldead=1&title=0
    - path: browse.php
  inputs:
    $raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
    search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
    # 0 active, 1 both, 2 dead, 3 needseed
    incldead: 0
    # 0 title, 1 descr, 2 both, 3 genre
    title: "{{ if .Query.IMDBID }}1{{ else }}0{{ end }}"
    free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
    sort: "{{ .Config.sort }}"
    type: "{{ .Config.type }}"

  rows:
    # for some users (don't know why) the table is called tablethree instead of tortable
    selector: table#tortable > tbody > tr.rowhead, table#tablethree > tbody > tr.rowhead

  fields:
    # column 3 will be the wait time for new users
    download:
      selector: a[href^="dl.php/"]
      attribute: href
    title:
      selector: a.torrentlink
      attribute: title
    category:
      selector: td[onclick*="browse.php?cat="]
      attribute: onclick
      filters:
        - name: querystring
          args: cat
        - name: trim
          args: "'"
    details:
      selector: a.torrentlink
      attribute: href
    imdbid:
      selector: a[href*="imdb.com/title/tt"]
      attribute: href
    files:
      selector: td:nth-last-child(5)
    grabs:
      selector: td:nth-last-child(3) > span
      filters:
        - name: regexp
          args: ([\d\.]+)
    size:
      selector: td:nth-last-child(3)
      remove: span
    seeders:
      selector: td:nth-last-child(2) > span > b:nth-child(1)
    leechers:
      selector: td:nth-last-child(2) > span > b:nth-child(2)
    date:
      # timeago
      selector: td:nth-child(2) > span > span > small
      filters:
        - name: replace
          args: ["Uploaded: ", ""]
    downloadvolumefactor:
      case:
        "span.tool:contains(\"[FREE]\")": 0
        "*": 1
    uploadvolumefactor:
      text: 1
    description:
      selector: td:nth-child(2) > span:has(span > small)
      remove: span:nth-child(1), span.tool, a[title^="Search all"], br ~ b > small
      filters:
        - name: trim
          args: "/"
    minimumratio:
      text: 1.0
    minimumseedtime:
      # 2 days (as seconds = 2 x 24 x 60 x 60)
      text: 172800
# TBDev Custom
