---
id: thefallingangels
name: The Falling Angels
description: "The Falling Angels (TFA) is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: de-DE
type: private
encoding: UTF-8
links:
  - https://tfa.tf/

caps:
  categorymappings:
    - {id: 107, cat: PC/0day, desc: "Apps Windows"}
    - {id: 132, cat: PC/Mac, desc: "Apps Mac-OSX"}
    - {id: 105, cat: PC/Mobile-Other, desc: "Apps Other"}
    - {id: 116, cat: PC/Games, desc: "Games PC"}
    - {id: 155, cat: Console/NDS, desc: "Games Nintendo DS"}
    - {id: 134, cat: Console, desc: "Games Switch"}
    - {id: 138, cat: Console/Wii, desc: "Games Nintendo Wii"}
    - {id: 124, cat: Console/PSP, desc: "Games PSP / PS 1-4"}
    - {id: 139, cat: Console/XBox, desc: "Games XBOX"}
    - {id: 141, cat: Movies/SD, desc: "Movies SD"}
    - {id: 140, cat: Movies/HD, desc: "Movies HD"}
    - {id: 125, cat: Movies/UHD, desc: "Movies Ultra HD"}
    - {id: 104, cat: Movies/Other, desc: "Movies Packs"}
    - {id: 143, cat: Movies/BluRay, desc: "Movies Bluray"}
    - {id: 142, cat: Movies/DVD, desc: "Movies DVD"}
    - {id: 144, cat: Movies/DVD, desc: "Movies S-DVD"}
    - {id: 100, cat: Movies, desc: "Movies Horror"}
    - {id: 133, cat: Movies/Foreign, desc: "Movies Englisch"}
    - {id: 101, cat: Movies/HD, desc: "TFA AVCHD's"}
    - {id: 103, cat: Movies/DVD, desc: "TFA Special DVD's"}
    - {id: 113, cat: TV/Documentary, desc: "Dokus SD"}
    - {id: 108, cat: TV/Documentary, desc: "Dokus HD"}
    - {id: 171, cat: TV/Documentary, desc: "Dokus Ultra HD"}
    - {id: 154, cat: TV/Documentary, desc: "Dokus Packs"}
    - {id: 151, cat: TV/SD, desc: "Serien SD"}
    - {id: 149, cat: TV/HD, desc: "Serien HD"}
    - {id: 167, cat: TV/UHD, desc: "Serien Ultra HD"}
    - {id: 150, cat: TV/Other, desc: "Serien Packs"}
    - {id: 136, cat: TV/Foreign, desc: "Serien Englisch"}
    - {id: 153, cat: TV/Sport, desc: "Sport SD"}
    - {id: 152, cat: TV/Sport, desc: "Sport HD"}
    - {id: 135, cat: TV/Sport, desc: "Sport Ultra HD"}
    - {id: 106, cat: TV/Sport, desc: "Sport Packs"}
    - {id: 147, cat: Audio/MP3, desc: "Music MP3"}
    - {id: 145, cat: Audio/Lossless, desc: "Music Flac"}
    - {id: 137, cat: Audio, desc: "Music M4A"}
    - {id: 109, cat: Audio, desc: "Music Discographie"}
    - {id: 146, cat: Audio/Other, desc: "Music Packs"}
    - {id: 148, cat: Audio/Video, desc: "Music Video"}
    - {id: 158, cat: Movies/SD, desc: "Kids Movies SD"}
    - {id: 157, cat: Movies/HD, desc: "Kids Movies HD"}
    - {id: 162, cat: TV/SD, desc: "Kids Serien SD"}
    - {id: 161, cat: TV/HD, desc: "Kids Serien HD"}
    - {id: 112, cat: Audio/Audiobook, desc: "Kids Hörbuch"}
    - {id: 115, cat: Books/Mags, desc: "E-Books Zeitschriften"}
    - {id: 114, cat: Books/Comics, desc: "E-Books Comics"}
    - {id: 117, cat: Books/EBook, desc: "E-Books Bücher"}
    - {id: 156, cat: Books, desc: "E-Books Packs"}
    - {id: 130, cat: Books, desc: "E-Books FSK 18"}
    - {id: 160, cat: Movies/Other, desc: "Anime Movies SD"}
    - {id: 159, cat: Movies/Other, desc: "Anime Movies HD"}
    - {id: 173, cat: Movies/Other, desc: "Anime Movies UHD"}
    - {id: 172, cat: Movies/Other, desc: "Anime Movies Pack"}
    - {id: 169, cat: TV/Anime, desc: "Anime Serien SD"}
    - {id: 168, cat: TV/Anime, desc: "Anime Serien HD"}
    - {id: 170, cat: TV/Anime, desc: "Anime Serien Pack"}
    - {id: 129, cat: TV/Anime, desc: "Anime Sonstiges"}
    - {id: 118, cat: Other, desc: "Other Mobile"}
    - {id: 119, cat: Other, desc: "Other Hörbücher"}
    - {id: 123, cat: Other, desc: "Other Pics"}
    - {id: 121, cat: XXX, desc: "XXX Movies SD"}
    - {id: 120, cat: XXX, desc: "XXX Movies HD"}
    - {id: 165, cat: XXX, desc: "XXX Movies UHD"}
    - {id: 122, cat: XXX, desc: "XXX Movies Pack"}
    - {id: 131, cat: XXX, desc: "XXX Hentai"}
    - {id: 164, cat: XXX, desc: "XXX VR Porn"}
    - {id: 166, cat: XXX, desc: "XXX Games"}
    - {id: 110, cat: XXX, desc: "XXX Pics"}

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

settings:
  - name: username
    type: text
    label: Username
  - name: password
    type: password
    label: Password
  - name: pin
    type: text
    label: Pin
  - name: freeleech
    type: checkbox
    label: Filter freeleech only
    default: false
  - name: sort
    type: select
    label: Sort requested from site
    default: added
    options:
      added: created
      seeds: seeders
      size: size
      name: title
  - name: type
    type: select
    label: Order requested from site
    default: desc
    options:
      desc: desc
      asc: asc
  - name: info_activity
    type: info
    label: Account Inactivity
    default: "Inactive accounts will be permanently deleted from the database after 125 days! Seeding torrents does not count as activity - the only thing that counts is logging in again! You can extend this period to 250 days by setting your account to Parked. You can do this under Edit Profile."

login:
  path: login.php
  method: form
  form: form[method="post"]
  cookies: ["JAVA=OK"] # avoid jscheck redirect
  inputs:
    username: "{{ .Config.username }}"
    password: "{{ .Config.password }}"
    pin: "{{ .Config.pin }}"
  error:
    - selector: div#login_error
  test:
    path: index.php
    selector: a[href="logout.php"]

search:
  paths:
    - path: selection.php
  inputs:
    $raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
    search: "{{ .Keywords }}"
    # 0 name, 1 descr, 2 both
    blah: 0
    orderby: "{{ .Config.sort }}"
    sort: "{{ .Config.type }}"

  rows:
    selector: "div.selection_wrap{{ if .Config.freeleech }}:has(div[onmouseover=\"return overlib('OnlyUp: Ja');\"]){{ else }}{{ end }}"

  fields:
    category_p1:
      selector: div.kat_cat_pic_name
    category_p2:
      selector: div.kat_cat_pic_name_b
    categorydesc:
      text: "{{ .Result.category_p1 }} {{ .Result.category_p2 }}"
    title:
      selector: a.selection_a
      filters:
        - name: re_replace
          args: ["^\\[[\\w ]*\\]\\s?", ""]
    details:
      selector: a.selection_a
      attribute: href
    download_default:
      selector: a[href^="download.php?torrent="]
      attribute: href
      optional: true
    download:
      selector: a[href^="download_ssl.php?torrent="]
      attribute: href
      optional: true
      default: "{{ .Result.download_default }}"
    poster:
      selector: div[id^="details"] img
      attribute: src
    size:
      selector: div.selection_unter_ad
    grabs:
      selector: div.selection_unter_ae
    date_day:
      # Heute 13:30:04
      # Gestern 09:10:10
      selector: div.selection_unter_ab:not(:contains("."))
      optional: true
      filters:
        - name: replace
          args: ["Heute", "Today"]
        - name: replace
          args: ["Gestern", "Yesterday"]
        - name: append
          args: " +01:00" # CET
    date_year:
      # 30.02.2018 um 23:12:50
      selector: div.selection_unter_ab:contains(".")
      optional: true
      filters:
        - name: replace
          args: [" um", ""]
        - name: append
          args: " +01:00" # CET
        - name: dateparse
          args: "dd.MM.yyyy HH:mm:ss zzz"
    date:
      text: "{{ if or .Result.date_year .Result.date_day }}{{ or .Result.date_year .Result.date_day }}{{ else }}now{{ end }}"
    description:
      selector: selection_unter_af
    seeders:
      selector: div.selection_unter_aa
    leechers:
      selector: div.selection_unter_aaa
    downloadvolumefactor:
      case:
        "div[onmouseover=\"return overlib('OnlyUp: Ja');\"]": 0
        "div[onmouseover=\"return overlib('Freeleech: Ja');\"]": 0
        "*": 1
    uploadvolumefactor:
      case:
        "div[onmouseover=\"return overlib('Freeleech: Ja');\"]": 0
        "*": 1
    minimumratio:
      text: 1.0
    minimumseedtime:
      # 2 days (as seconds = 2 x 24 x 60 x 60)
      text: 172800
# 3xT
