Skip to content

felipemarinho97/torrent-indexer

Repository files navigation

torrent-indexer

This is a simple torrent indexer that can be used to index torrents from HTML pages. It is written in Golang and uses Redis as a cache.

Test it

Visit https://torrent-indexer.darklyn.org/ to test it.

Supported sites

Deploy

If you have Docker + docker-compose installed, you can deploy it using the following command:

curl -s https://raw.githubusercontent.com/felipemarinho97/torrent-indexer/main/docker-compose.yml > docker-compose.yml
docker-compose up -d

The server will be available at http://localhost:8080/.

Configuration

You can configure the server using the following environment variables:

  • PORT: (optional) The port that the server will listen to. Default: 7006
  • FLARESOLVERR_ADDRESS: (optional) The address of the FlareSolverr instance. Default: N/A
  • MEILISEARCH_ADDRESS: (optional) The address of the MeiliSearch instance. Default: N/A
  • MEILISEARCH_KEY: (optional) The API key of the MeiliSearch instance. Default: N/A
  • REDIS_HOST: (optional) The address of the Redis instance. Default: localhost
  • SHORT_LIVED_CACHE_EXPIRATION (optional) The expiration time of the short-lived cache in duration format. Default: 30m
    • This cache is used to cache homepage or search results.
    • Example: 30m, 1h, 1h30m, 1h30m30s
  • LONG_LIVED_CACHE_EXPIRATION (optional) The expiration time of the long-lived cache in duration format. Default: 7d
    • This cache is used to store the torrent webpages (posts). You can set it to a higher value because the torrent pages are not updated frequently.

Integrating with Jackett

You can integrate this indexer with Jackett by adding a new Torznab custom indexer. Here is an example of how to do it for the bludv indexer:

---
id: bludv_indexer
name: BluDV Indexer
description: "BluDV - Custom indexer on from torrent-indexer"
language: pt-BR
type: public
encoding: UTF-8
links:
  - http://localhost:8080/

caps:
  categorymappings:
    - { id: Movie, cat: Movies, desc: "Movies" }
    - { id: TV, cat: TV, desc: "TV" }

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

settings: []

search:
  paths:
    - path: "indexers/bludv?filter_results=true&q={{ .Keywords }}"
      response:
        type: json

  keywordsfilters:
    - name: tolower

  rows:
    selector: $.results
    count:
      selector: $.count

  fields:
    _id:
      selector: title
    download:
      selector: magnet_link
    title:
      selector: title
    description:
      selector: original_title
    details:
      selector: details
    infohash:
      selector: info_hash
    date:
      selector: date
    size:
      selector: size
    seeders:
      selector: seed_count
    leechers:
      selector: leech_count
    imdb:
      selector: imdb
    category_is_tv_show:
      selector: title
      filters:
        - name: regexp
          args: "\\b(S\\d+(?:E\\d+)?)\\b"
    category:
      text: "{{ if .Result.category_is_tv_show }}TV{{ else }}Movie{{ end }}"
# json engine n/a

If you have more tips on how to integrate with other torrent API clients like Prowlarr, please open a PR.

Warning

The instance running at https://torrent-indexer.darklyn.org/ is my personal instance and it is not guaranteed to be up all the time. Also, for better availability, I recommend deploying your own instance because the Cloudflare protection may block requests from indexed sites if too many requests are made in a short period of time from the same IP.

If I notice that the instance is being used a lot, I may block requests from Jackett to avoid overloading the server without prior notice.