Compare commits

..

2 Commits

Author SHA1 Message Date
Bogdan
dc3e068066 cardigann: check for page size 2023-05-17 22:37:29 +03:00
Bogdan
f59cc953ec cardigann: check for page size 2023-05-17 22:37:29 +03:00
767 changed files with 25553 additions and 38536 deletions

View File

@@ -2,7 +2,6 @@ name: Bug report
description: Create a report of your issue
body:
- type: checkboxes
id: troubleshooting
attributes:
label: Have you checked our Troubleshooting page for your issue?
description: Please read the <a href="https://github.com/Jackett/Jackett/wiki/Troubleshooting">Troubleshooting</a> page for steps to resolve common issues.
@@ -10,7 +9,6 @@ body:
- label: I have checked the Troubleshooting page
required: true
- type: checkboxes
id: already-an-issue
attributes:
label: Is there already an issue for your problem?
description: Please make sure you are not creating an already submitted <a href="https://github.com/Jackett/Jackett/issues">Issue</a>. Check closed issues as well, because your issue may have already been fixed.
@@ -18,7 +16,6 @@ body:
- label: I have checked older issues, open and closed
required: true
- type: checkboxes
id: contributing-guidelines
attributes:
label: Have you read our Contributing Guidelines?
description: Please read our <a href="https://github.com/Jackett/Jackett/blob/master/CONTRIBUTING.md">Contributing Guidelines</a> before submitting your issue to ensure a prompt response to your bug.
@@ -26,7 +23,6 @@ body:
- label: I have read the Contributing Guidelines
required: true
- type: textarea
id: environment
attributes:
label: Environment
description: Please provide the details of the system Jackett is running on. The best way to do this is to restart Jackett, access the dashboard, view the log, and copy/paste replacing the example below with the last 10 Info lines at the bottom of the log.
@@ -44,14 +40,12 @@ body:
validations:
required: true
- type: textarea
id: description
attributes:
label: Description
description: List steps to reproduce the error and details on what happens and what you expected to happen.
validations:
required: true
- type: textarea
id: error-logs
attributes:
label: Logged Error Messages
description: |
@@ -61,9 +55,8 @@ body:
validations:
required: true
- type: textarea
id: screenshots
attributes:
label: Screenshots
description: Place any useful screenshots of the issue here, if needed (not a screenshot of the error textbox)
description: Place any screenshots of the issue here if needed
validations:
required: false

View File

@@ -1,35 +0,0 @@
name: Documentation request
description: Suggest a new Readme or Wiki section, or ammendment to an existing section, for this project
title: "[docs]: "
body:
- type: checkboxes
attributes:
label: Have you read our current Readme and Wiki?
description: Please read our <a href="https://github.com/Jackett/Jackett/blob/master/README.md">Readme</a> and <a href="https://github.com/Jackett/Jackett/wiki">Wiki</a> before submitting your request.
options:
- label: I have read the Wiki
required: true
- type: checkboxes
attributes:
label: Is there already a request for this change?
description: Please make sure you are not creating an already submitted <a href="https://github.com/Jackett/Jackett/issues">request</a>. Check closed issues as well, because your request may have already been added or rejected.
options:
- label: I have checked older issues, open and closed
required: true
- type: dropdown
id: type
attributes:
label: Readme or Wiki?
description: Please select which you are requesting be changed
options:
- Readme
- Wiki
validations:
required: true
- type: textarea
attributes:
label: Details
description: Please provide the details of your request
render: markdown
validations:
required: true

View File

@@ -36,13 +36,13 @@ body:
- Name: TrackerX
- URL: https://trackerx.yz
- Description: TrackerX is a Private Torrent Tracker for Movies, TV, and e-Learning
- Minimum Seeding Time and/or Minimum Seeding Ratio (if Private): MST 24hrs, MR 1.0
- Minimum Seeding Time and Minimum Ratio (if Private): MST 24hrs, MR 1.0
- Additional Comments: IMDB search has to be enabled in account settings, often has hcaptcha at login
value: |
- Name:
- URL:
- Description:
- Minimum Seeding Time and/or Minimum Seeding Ratio (if Private):
- Minimum Seeding Time and Minimum Ratio (if Private):
- Additional Comments:
render: markdown
validations:

View File

@@ -1,8 +0,0 @@
#### Description
A few sentences describing the overall goals of the pull request's commits.
#### Screenshot (if UI related)
#### Issues Fixed or Closed by this PR
* Fixes #XXXX

View File

@@ -33,16 +33,11 @@ on:
- '!src/Jackett.Test/**'
schedule:
- cron: '00 00 * * 5'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
analyze:
name: Analyze
runs-on: windows-2022
if: github.repository == 'Jackett/Jackett'
permissions:
actions: read
contents: read
@@ -57,11 +52,11 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -73,7 +68,7 @@ jobs:
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
uses: github/codeql-action/autobuild@v2
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -87,4 +82,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v2

View File

@@ -1,51 +0,0 @@
#
name: Redeliver failed webhook deliveries
# This workflow runs every 6 hours or when manually triggered.
on:
schedule:
- cron: '40 */6 * * *'
workflow_dispatch:
# This workflow will use the built in `GITHUB_TOKEN` to check out the repository contents. This grants `GITHUB_TOKEN` permission to do that.
permissions:
contents: read
#
jobs:
redeliver-failed-deliveries:
name: Redeliver failed deliveries
runs-on: ubuntu-latest
if: github.repository == 'Jackett/Jackett'
steps:
# This workflow will run a script that is stored in the repository. This step checks out the repository contents so that the workflow can access the script.
- name: Check out repo content
uses: actions/checkout@v4
# This step sets up Node.js. The script that this workflow will run uses Node.js.
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
# This step installs the octokit library. The script that this workflow will run uses the octokit library.
- name: Install dependencies
run: npm install octokit
# This step sets some environment variables, then runs a script to find and redeliver failed webhook deliveries.
# - Replace `YOUR_APP_ID_SECRET_NAME` with the name of the secret where you stored your app ID.
# - Replace `YOUR_PRIVATE_KEY_SECRET_NAME` with the name of the secret where you stored your private key.
# - Replace `YOUR_TOKEN_SECRET_NAME` with the name of the secret where you stored your personal access token.
# - Replace `YOUR_LAST_REDELIVERY_VARIABLE_NAME` with the name that you want to use for a configuration variable that will be stored in the repository where this workflow is stored. The name can be any string that contains only alphanumeric characters and `_`, and does not start with `GITHUB_` or a number. For more information, see "[AUTOTITLE](/actions/learn-github-actions/variables#defining-configuration-variables-for-multiple-workflows)."
- name: Run script
env:
APP_ID: ${{ secrets.PROBOT_ID }}
PRIVATE_KEY: ${{ secrets.PROBOT_KEY }}
TOKEN: ${{ secrets.PROBOT_TOKEN }}
LAST_REDELIVERY_VARIABLE_NAME: 'PROBOT_TIME'
WORKFLOW_REPO: ${{ github.event.repository.name }}
WORKFLOW_REPO_OWNER: ${{ github.repository_owner }}
run: |
node .github/workflows/scripts/redeliver-failed-deliveries.mjs

View File

@@ -1,221 +0,0 @@
// This script uses GitHub's Octokit SDK to make API requests. For more information, see https://docs.github.com/en/rest/guides/scripting-with-the-rest-api-and-javascript?apiVersion=2022-11-28
import { App, Octokit } from "octokit";
const sleep = ms => new Promise(r => setTimeout(r, ms));
let secondDelivery = true;
//
async function checkAndRedeliverWebhooks() {
// Get the values of environment variables that were set by the GitHub Actions workflow.
const APP_ID = process.env.APP_ID;
const PRIVATE_KEY = process.env.PRIVATE_KEY;
const TOKEN = process.env.TOKEN;
const LAST_REDELIVERY_VARIABLE_NAME = process.env.LAST_REDELIVERY_VARIABLE_NAME;
const WORKFLOW_REPO_NAME = process.env.WORKFLOW_REPO;
const WORKFLOW_REPO_OWNER = process.env.WORKFLOW_REPO_OWNER;
// Create an instance of the octokit `App` using the app ID and private key values that were set in the GitHub Actions workflow.
//
// This will be used to make API requests to the webhook-related endpoints.
const app = new App({
appId: APP_ID,
privateKey: PRIVATE_KEY,
});
// Create an instance of `Octokit` using the token values that were set in the GitHub Actions workflow.
//
// This will be used to update the configuration variable that stores the last time that this script ran.
const octokit = new Octokit({
auth: TOKEN,
});
try {
// Get the last time that this script ran from the configuration variable. If the variable is not defined, use the current time minus 24 hours.
const lastStoredRedeliveryTime = await getVariable({
variableName: LAST_REDELIVERY_VARIABLE_NAME,
repoOwner: WORKFLOW_REPO_OWNER,
repoName: WORKFLOW_REPO_NAME,
octokit,
});
const lastWebhookRedeliveryTime = lastStoredRedeliveryTime || (Date.now() - (24 * 60 * 60 * 1000)).toString();
// Record the time that this script started redelivering webhooks.
const newWebhookRedeliveryTime = Date.now().toString();
// Get the webhook deliveries that were delivered after `lastWebhookRedeliveryTime`.
const deliveries = await fetchWebhookDeliveriesSince({lastWebhookRedeliveryTime, app});
// Consolidate deliveries that have the same globally unique identifier (GUID). The GUID is constant across redeliveries of the same delivery.
let deliveriesByGuid = {};
for (const delivery of deliveries) {
deliveriesByGuid[delivery.guid]
? deliveriesByGuid[delivery.guid].push(delivery)
: (deliveriesByGuid[delivery.guid] = [delivery]);
}
// For each GUID value, if no deliveries for that GUID have been successfully delivered within the time frame, get the delivery ID of one of the deliveries with that GUID.
//
// This will prevent duplicate redeliveries if a delivery has failed multiple times.
// This will also prevent redelivery of failed deliveries that have already been successfully redelivered.
let failedDeliveryIDs = [];
for (const guid in deliveriesByGuid) {
const deliveries = deliveriesByGuid[guid];
const anySucceeded = deliveries.some(
(delivery) => delivery.status === "OK"
);
if (!anySucceeded) {
failedDeliveryIDs.push(deliveries[0].id);
}
}
// Redeliver any failed deliveries.
for (const deliveryId of failedDeliveryIDs) {
await redeliverWebhook({deliveryId, app});
// its likely ProBot was asleep when the first redeliver was sent and we know PRoBot startup takes about 12s
// so the first redeliver will likely timeout after 10s, but will have started ProBot
if (secondDelivery) {
secondDelivery = false;
// so we wait 13s so that the rest of the redeliveries will succeed
await sleep(13000);
}
}
// Update the configuration variable (or create the variable if it doesn't already exist) to store the time that this script started.
// This value will be used next time this script runs.
await updateVariable({
variableName: LAST_REDELIVERY_VARIABLE_NAME,
value: newWebhookRedeliveryTime,
variableExists: Boolean(lastStoredRedeliveryTime),
repoOwner: WORKFLOW_REPO_OWNER,
repoName: WORKFLOW_REPO_NAME,
octokit,
});
// Log the number of redeliveries.
console.log(
`Redelivered ${
failedDeliveryIDs.length
} failed webhook deliveries out of ${
deliveries.length
} total deliveries since ${Date(lastWebhookRedeliveryTime)}.`
);
} catch (error) {
// If there was an error, log the error so that it appears in the workflow run log, then throw the error so that the workflow run registers as a failure.
if (error.response) {
console.error(
`Failed to check and redeliver webhooks: ${error.response.data.message}`
);
}
console.error(error);
throw(error);
}
}
// This function will fetch all of the webhook deliveries that were delivered since `lastWebhookRedeliveryTime`.
// It uses the `octokit.paginate.iterator()` method to iterate through paginated results. For more information, see "[AUTOTITLE](/rest/guides/scripting-with-the-rest-api-and-javascript#making-paginated-requests)."
//
// If a page of results includes deliveries that occurred before `lastWebhookRedeliveryTime`,
// it will store only the deliveries that occurred after `lastWebhookRedeliveryTime` and then stop.
// Otherwise, it will store all of the deliveries from the page and request the next page.
async function fetchWebhookDeliveriesSince({lastWebhookRedeliveryTime, app}) {
const iterator = app.octokit.paginate.iterator(
"GET /app/hook/deliveries",
{
per_page: 100,
headers: {
"x-github-api-version": "2022-11-28",
},
}
);
const deliveries = [];
for await (const { data } of iterator) {
const oldestDeliveryTimestamp = new Date(
data[data.length - 1].delivered_at
).getTime();
if (oldestDeliveryTimestamp < lastWebhookRedeliveryTime) {
for (const delivery of data) {
if (
new Date(delivery.delivered_at).getTime() > lastWebhookRedeliveryTime
) {
deliveries.push(delivery);
} else {
break;
}
}
break;
} else {
deliveries.push(...data);
}
}
return deliveries;
}
// This function will redeliver a failed webhook delivery.
async function redeliverWebhook({deliveryId, app}) {
await app.octokit.request("POST /app/hook/deliveries/{delivery_id}/attempts", {
delivery_id: deliveryId,
});
}
// This function gets the value of a configuration variable.
// If the variable does not exist, the endpoint returns a 404 response and this function returns `undefined`.
async function getVariable({ variableName, repoOwner, repoName, octokit }) {
try {
const {
data: { value },
} = await octokit.request(
"GET /repos/{owner}/{repo}/actions/variables/{name}",
{
owner: repoOwner,
repo: repoName,
name: variableName,
}
);
return value;
} catch (error) {
if (error.status === 404) {
return undefined;
} else {
throw error;
}
}
}
// This function will update a configuration variable (or create the variable if it doesn't already exist). For more information, see "[AUTOTITLE](/actions/learn-github-actions/variables#defining-configuration-variables-for-multiple-workflows)."
async function updateVariable({
variableName,
value,
variableExists,
repoOwner,
repoName,
octokit,
}) {
if (variableExists) {
await octokit.request(
"PATCH /repos/{owner}/{repo}/actions/variables/{name}",
{
owner: repoOwner,
repo: repoName,
name: variableName,
value: value,
}
);
} else {
await octokit.request("POST /repos/{owner}/{repo}/actions/variables", {
owner: repoOwner,
repo: repoName,
name: variableName,
value: value,
});
}
}
// This will execute the `checkAndRedeliverWebhooks` function.
(async () => {
await checkAndRedeliverWebhooks();
})();

View File

@@ -6,9 +6,9 @@ permissions:
contents: read
jobs:
publish:
runs-on: ubuntu-latest
runs-on: windows-latest
steps:
- uses: vedantmgoyal9/winget-releaser@main
- uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: Jackett.Jackett
token: ${{ secrets.WINGET }}

View File

@@ -2,7 +2,7 @@
So, you've decided you want to help make Jackett a better program for everyone. Not everyone chooses to help, so we thank you for your decision.
In order to help us make the most of your contribution please take the time to read these contributing guidelines.
These are just guidelines, not hard rules. Use your best judgement, and feel free to propose changes to this document in a pull request.
These are just guidelines, not hard rules. Use your best judgment, and feel free to propose changes to this document in a pull request.
## Ways you can help
@@ -36,8 +36,8 @@ Bugs that are submitted without being on the latest version may be closed.
**Tracker isn't working**
If you are experiencing an issue with a tracker, then:
- Use your browser to check if you can access the site directly, and if a login is required,
check that you can login and that you do not have any outstanding account issues.
- Use your browser to check you can access the site directly, and if a login is required,
check you can login and that you do not have any outstanding account issues.
- If you haven't already, try upgrading to the latest version of Jackett.
- Check our [Troubleshooting wiki](https://github.com/Jackett/Jackett/wiki/Troubleshooting) for common issues.
- If it is still not working for you, then a **full enhanced log must be included**.

533
README.md

File diff suppressed because it is too large Load Diff

View File

@@ -2,36 +2,23 @@
name: $(majorVersion).$(minorVersion).$(patchVersion)
variables:
majorVersion: 0
minorVersion: 22
minorVersion: 20
patchVersion: $[counter(variables['minorVersion'], 1)] # this will reset when we bump minor
jackettVersion: $(majorVersion).$(minorVersion).$(patchVersion)
buildConfiguration: Release
netCoreFramework: net8.0
netCoreSdkVersion: 8.0.x
netCoreFramework: net6.0
netCoreSdkVersion: 6.0.x
# system.debug: true
trigger:
batch: true
branches:
include:
- master
- test/**
paths:
exclude:
- .github
- README.md
- CONTRIBUTING.md
- '*'
pr:
branches:
include:
- master
- test/**
paths:
exclude:
- .github
- README.md
- CONTRIBUTING.md
- '*'
stages:
- stage: BuildJackett
@@ -51,14 +38,14 @@ stages:
artifactName: Jackett.Binaries.Windows.zip
macOS:
buildDescription: macOS
imageName: macOS-13
imageName: macOS-12
framework: $(netCoreFramework)
runtime: osx-x64
archiveType: tar
artifactName: Jackett.Binaries.macOS.tar.gz
macOSARM64:
buildDescription: macOS ARM64
imageName: macOS-13
imageName: macOS-12
framework: $(netCoreFramework)
runtime: osx-arm64
archiveType: tar
@@ -129,7 +116,7 @@ stages:
displayName: Build DateTimeRoutines
# this task is not mandatory since DateTimeRoutines is build in the next task, but the purpose is to fix:
# error MSB4018: System.IO.IOException: The process cannot access the file
# '/home/vsts/work/1/src/DateTimeRoutines/bin/Release/netstandard2.0/DateTimeRoutines.deps.json'
# '/home/vsts/work/1/net6.0-linux-musl-arm/src/DateTimeRoutines/bin/Release/netstandard2.0/DateTimeRoutines.deps.json'
# because it is being used by another process.
inputs:
command: build
@@ -427,11 +414,11 @@ stages:
runtime: win-x86
macOS:
buildDescription: macOS
imageName: macOS-13
imageName: macOS-12
framework: $(netCoreFramework)
runtime: osx-x64
LinuxAMDx64:
buildDescription: LinuxAMDx64
buildDescription: Linux AMD x64
imageName: ubuntu-22.04
framework: $(netCoreFramework)
runtime: linux-x64
@@ -454,23 +441,22 @@ stages:
installationPath: $(Agent.ToolsDirectory)/dotnet
- task: DotNetCoreCLI@2
displayName: Unit Tests & Code Coverage
inputs:
command: test
projects: '$(Build.SourcesDirectory)/src/**/*.Test*/*.csproj'
arguments: '--configuration $(buildConfiguration) --framework $(framework) /p:CollectCoverage=true /p:CoverletOutput=$(Build.SourcesDirectory)/coverlet/reports/coverage.cobertura.$(buildDescription).xml /p:CoverletOutputFormat=cobertura /p:IncludeTestAssembly=true /p:ExcludeByAttribute=TestSDKAutoGeneratedCode'
testRunTitle: 'Unit - $(buildDescription) - $(Build.BuildId)'
- task: PublishPipelineArtifact@1
displayName: Unit Tests (Mono, Linux and macOS)
condition: and(succeeded(), not(startsWith(variables['runtime'], 'win')))
inputs:
targetPath: $(Build.SourcesDirectory)/coverlet/reports/
command: test
projects: '**/*.Test*/*.csproj'
arguments: '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework)'
testRunTitle: 'Unit - $(buildDescription) - $(Build.BuildId)'
- task: DownloadPipelineArtifact@2
- task: DotNetCoreCLI@2
displayName: Unit Tests & Code Coverage (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
downloadPath: $(Build.SourcesDirectory)/coverlet/reports/
itemPattern: '**/coverage.cobertura.*.xml'
command: test
projects: '**/*.Test*/*.csproj'
arguments: '--configuration $(buildConfiguration) --framework $(framework) /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura'
testRunTitle: 'Unit - $(buildDescription) - $(Build.BuildId)'
- task: DotNetCoreCLI@2
displayName: Install Coverage ReportGenerator Tool (Windows only)
@@ -478,29 +464,21 @@ stages:
inputs:
command: custom
custom: tool
arguments: install -g dotnet-reportgenerator-globaltool
arguments: install --tool-path . dotnet-reportgenerator-globaltool
- task: PowerShell@2
displayName: Generate Coverage Report (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
targetType: inline
script: reportgenerator -reports:$(Build.SourcesDirectory)/coverlet/reports/**/coverage.cobertura.*.xml -targetdir:$(Build.SourcesDirectory)/coverlet/reports/final/ -sourcedirs:$(Build.SourcesDirectory)/src/ -reporttypes:"Cobertura"
script: ./reportgenerator -reports:$(Build.SourcesDirectory)/src/*.Test*/coverage.*.cobertura.xml -targetdir:$(Build.SourcesDirectory)/coverlet/reports -reporttypes:"Cobertura"
- task: PublishCodeCoverageResults@1
displayName: Publish Code Coverage
displayName: Publish Code Coverage (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: $(Build.SourcesDirectory)/coverlet/reports/final/Cobertura.xml
pathToSources: $(Build.SourcesDirectory)/src/
additionalCodeCoverageFiles: $(Agent.TempDirectory)/*.trx
failIfCoverageEmpty: true
- task: PublishPipelineArtifact@1
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
targetPath: $(Build.SourcesDirectory)/coverlet/reports/coverage.cobertura.Windows.net8.0.xml
summaryFileLocation: $(Build.SourcesDirectory)/coverlet/reports/Cobertura.xml
- stage: IntegrationTestJackett
displayName: Integration Tests
@@ -521,7 +499,7 @@ stages:
runtime: win-x86
macOS:
buildDescription: macOS
imageName: macOS-13
imageName: macOS-12
artifactName: Jackett.Binaries.macOS.tar.gz
framework: $(netCoreFramework)
runtime: osx-x64
@@ -579,10 +557,20 @@ stages:
installationPath: $(Agent.ToolsDirectory)/dotnet
- task: DotNetCoreCLI@2
displayName: Integration Tests
displayName: Integration Tests (Mono, Linux and macOS)
condition: and(succeeded(), not(startsWith(variables['runtime'], 'win')))
inputs:
command: test
projects: '$(Build.SourcesDirectory)/src/**/*IntegrationTest*/*.csproj'
projects: '**/*IntegrationTest*/*.csproj'
arguments: '--configuration $(buildConfiguration) --runtime $(runtime) --framework $(framework)'
testRunTitle: 'Integration - $(buildDescription) - $(Build.BuildId)'
- task: DotNetCoreCLI@2
displayName: Integration Tests (Windows only)
condition: and(succeeded(), startsWith(variables['runtime'], 'win'))
inputs:
command: test
projects: '**/*IntegrationTest*/*.csproj'
arguments: '--configuration $(buildConfiguration) --framework $(framework)'
testRunTitle: 'Integration - $(buildDescription) - $(Build.BuildId)'

View File

@@ -24,7 +24,7 @@ if systemctl is-active --quiet "${JACKETT_SERVICE}"; then
if systemctl stop "${JACKETT_SERVICE}"; then
echo "Service '${JACKETT_SERVICE}' stopped"
else
echo "${BOLDRED}ERROR${NC}: The service '${JACKETT_SERVICE}' can not be stopped"
echo "${BOLDRED}ERROR${NC}: The service '${JACKETT_SERVICE}' Can not be stopped"
exit 1
fi
@@ -73,7 +73,6 @@ Type=simple
User=${JACKETT_USER}
Group=${JACKETT_USER}
WorkingDirectory=${JACKETT_DIR}
Environment="DOTNET_EnableDiagnostics=0"
ExecStart=/bin/sh "${JACKETT_DIR}/jackett_launcher.sh"
TimeoutStopSec=30

View File

@@ -24,7 +24,7 @@ if systemctl is-active --quiet "${JACKETT_SERVICE}"; then
if systemctl stop "${JACKETT_SERVICE}"; then
echo "Service '${JACKETT_SERVICE}' stopped"
else
echo "${BOLDRED}ERROR${NC}: The service '${JACKETT_SERVICE}' can not be stopped"
echo "${BOLDRED}ERROR${NC}: The service '${JACKETT_SERVICE}' Can not be stopped"
exit 1
fi

View File

@@ -10,7 +10,7 @@ if errorlevel 1 (
goto continue
) else (
echo JackettUpdater is still running
timeout /t 1 /nobreak > nul
ping -n 2 127.0.0.1 > nul
goto loop
)

6
nuget.config Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
</configuration>

View File

@@ -169,7 +169,7 @@ namespace DateTimeRoutines
/// </summary>
UkDate,
///// <summary>
///// time is specified through AM or PM
///// time is specifed through AM or PM
///// </summary>
//USA_TIME,
}

View File

@@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>9</LangVersion>
<LangVersion>8</LangVersion>
<NoWarn />
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningsAsErrors />

View File

@@ -1,19 +0,0 @@
<Project>
<!-- Common to all Jackett Projects -->
<PropertyGroup>
<!-- Specifies whether it's one of our own libraries -->
<JackettProject>false</JackettProject>
<JackettProject Condition="$(MSBuildProjectName.StartsWith('Jackett'))">true</JackettProject>
</PropertyGroup>
<!-- Set the Product and Version info for our own projects -->
<PropertyGroup Condition="'$(JackettProject)'=='true'">
<Version>0.0.0</Version>
<PathMap>$(MSBuildProjectDirectory)=./$(MSBuildProjectName)/</PathMap>
</PropertyGroup>
<PropertyGroup>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
</PropertyGroup>
</Project>

View File

@@ -378,11 +378,3 @@ input#searchquery {
.tagify .tagify__tag-text {
text-transform: lowercase;
}
#searchResults .indexers .error{
color: Tomato;
}
#searchResults .indexers .no-results{
color: Grey;
}

View File

@@ -120,7 +120,6 @@ function loadJackettSettings() {
$("#jackett-savedir").val(data.blackholedir);
$("#jackett-allowext").attr('checked', data.external);
$("#jackett-local-bind-address").val(data.local_bind_address);
$("#jackett-allowcors").attr('checked', data.cors);
$("#jackett-allowupdate").attr('checked', data.updatedisabled);
$("#jackett-prerelease").attr('checked', data.prerelease);
@@ -147,10 +146,6 @@ function loadJackettSettings() {
$("#can-upgrade-from-mono").show();
}
if (data.external != null && data.external === true && data.password === '' && !localStorage.getItem('external-access-warning-hidden')) {
$("#warning-external-access").show();
}
$.each(data.notices, function (index, value) {
console.log(value);
doNotify(value, "danger", "glyphicon glyphicon-alert", false);
@@ -466,7 +461,7 @@ function displayUnconfiguredIndexersList() {
$('#indexers div.dataTables_filter input').focusWithoutScrolling();
});
$("#modals").html(UnconfiguredIndexersDialog);
$("#modals").append(UnconfiguredIndexersDialog);
$('#add-selected-indexers').click(function () {
var selectedIndexers = $('#unconfigured-indexer-datatable').DataTable().$('input[type="checkbox"]');
@@ -804,7 +799,7 @@ function newConfigModal(title, config, caps, link, alternativesitelinks, descrip
link: link,
description: description
}));
$("#modals").html(configForm);
$("#modals").append(configForm);
populateConfigItems(configForm, config);
if (alternativesitelinks.length >= 1) {
@@ -1048,13 +1043,14 @@ function showSearch(selectedFilter, selectedIndexer, query, category) {
var selectedIndexers = [];
if (selectedIndexer)
selectedIndexers = selectedIndexer.split(",");
$('#select-indexer-modal').remove();
var releaseTemplate = Handlebars.compile($("#jackett-search").html());
var releaseDialog = $(releaseTemplate({
filters: availableFilters,
active: selectedFilter
}));
$("#modals").html(releaseDialog);
$("#modals").append(releaseDialog);
releaseDialog.on('shown.bs.modal', function () {
releaseDialog.find('#searchquery').focusWithoutScrolling();
@@ -1063,7 +1059,6 @@ function showSearch(selectedFilter, selectedIndexer, query, category) {
releaseDialog.on('hidden.bs.modal', function (e) {
$('#indexers div.dataTables_filter input').focusWithoutScrolling();
window.location.hash = currentFilter ? "indexers&filter=" + currentFilter : '';
document.title = "Jackett";
});
var setTrackers = function (filterId, trackers) {
@@ -1153,8 +1148,6 @@ function showSearch(selectedFilter, selectedIndexer, query, category) {
$('#searchResults div.dataTables_filter input').val("");
clearSearchResultTable($('#searchResults'));
document.title = "(...) " + searchString;
var trackerId = filterId || "all";
api.resultsForIndexer(trackerId, queryObj, function (data) {
$('#jackett-search-perform').html($('#search-button-ready').html());
@@ -1162,11 +1155,9 @@ function showSearch(selectedFilter, selectedIndexer, query, category) {
searchResults.empty();
updateSearchResultTable(searchResults, data).search('').columns().search('').draw();
searchResults.find('div.dataTables_filter input').focusWithoutScrolling();
document.title = "(" + data.Results.length +") " + searchString;
}).fail(function () {
$('#jackett-search-perform').html($('#search-button-ready').html());
doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
document.title = "(err) " + searchString;
});
});
@@ -1477,15 +1468,6 @@ function bindUIButtons() {
return false;
});
$('#remind-external-access-button').click(function () {
$("#warning-external-access").hide();
});
$('#dismiss-external-access-button').click(function () {
localStorage.setItem('external-access-warning-hidden', true);
$("#warning-external-access").hide();
});
$('#api-key-copy-button').click(function () {
var apiKey = api.key;
if (apiKey !== null || apiKey !== undefined) {
@@ -1599,7 +1581,7 @@ function bindUIButtons() {
});
}
});
$("#modals").html(releaseDialog);
$("#modals").append(releaseDialog);
releaseDialog.modal("show");
}).fail(function () {
doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
@@ -1618,7 +1600,7 @@ function bindUIButtons() {
logs: data
};
var releaseDialog = $(releaseTemplate(item));
$("#modals").html(releaseDialog);
$("#modals").append(releaseDialog);
releaseDialog.modal("show");
}).fail(function () {
doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
@@ -1630,7 +1612,6 @@ function bindUIButtons() {
var jackett_basepathoverride = $("#jackett-basepathoverride").val();
var jackett_baseurloverride = $("#jackett-baseurloverride").val();
var jackett_external = $("#jackett-allowext").is(':checked');
var jackett_local_bind_address = $("#jackett-local-bind-address").val();
var jackett_cors = $("#jackett-allowcors").is(':checked');
var jackett_update = $("#jackett-allowupdate").is(':checked');
var jackett_prerelease = $("#jackett-prerelease").is(':checked');
@@ -1652,7 +1633,6 @@ function bindUIButtons() {
var jsonObject = {
port: jackett_port,
external: jackett_external,
local_bind_address: jackett_local_bind_address,
cors: jackett_cors,
updatedisabled: jackett_update,
prerelease: jackett_prerelease,

View File

@@ -372,12 +372,3 @@ input#searchquery {
.tagify .tagify__tag-text {
text-transform: lowercase;
}
#searchResults .indexers .error{
color: Tomato;
}
#searchResults .indexers .no-results{
color: Grey;
}

View File

@@ -29,8 +29,8 @@
<link rel="stylesheet" type="text/css" href="../bootstrap/bootstrap.min.css?changed=2017083001">
<link rel="stylesheet" type="text/css" href="../animate.css?changed=2017083001">
<link rel="stylesheet" type="text/css" href="../css/tagify.css?changed=11662">
<link rel="stylesheet" type="text/css" href="../custom.css?changed=20240225001" media="only screen and (min-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=20240225001" media="only screen and (max-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../custom.css?changed=20220721002" media="only screen and (min-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../custom_mobile.css?changed=20220721002" media="only screen and (max-device-width: 480px)">
<link rel="stylesheet" type="text/css" href="../css/jquery.dataTables.min.css?changed=2017083001">
<link rel="stylesheet" type="text/css" href="../css/bootstrap-multiselect.css?changed=20230107001" />
<link rel="stylesheet" type="text/css" href="../css/font-awesome.min.css?changed=2017083001">
@@ -50,18 +50,6 @@
</div>
<hr />
<div id="warning-external-access" hidden class="alert alert-danger text-center" role="alert">
<strong>
<span class="glyphicon glyphicon-alert"></span> Security Risk: Your instance has external access enabled without using an admin password. <span class="glyphicon glyphicon-alert"></span>
<button id="remind-external-access-button" title="Remind me again later" class="btn btn-success btn-xs">
<span class="glyphicon glyphicon-hourglass" aria-hidden="true"></span>
</button>
<button id="dismiss-external-access-button" title="Do not show again" class="btn btn-danger btn-xs">
<span class="glyphicon glyphicon-eye-close" aria-hidden="true"></span>
</button>
</strong>
</div>
<div id="can-upgrade-from-mono" hidden class="alert alert-info" role="alert">
<strong>Standalone version of Jackett is now available - Mono not required</strong> <br>
To upgrade to the standalone version of Jackett, <a href="https://github.com/Jackett/Jackett#install-on-linux-amdx64" target="_blank" class="alert-link">click here</a> for install instructions.
@@ -191,10 +179,6 @@
<span class="input-header">External access: </span>
<input id="jackett-allowext" class="form-control input-right" type="checkbox" />
</div>
<div class="input-area">
<span class="input-header">Local bind address: </span>
<input id="jackett-local-bind-address" class="form-control input-right" type="text" value="" placeholder="127.0.0.1">
</div>
<div class="input-area">
<span class="input-header">Allow CORS: </span>
<input id="jackett-allowcors" class="form-control input-right" type="checkbox" />
@@ -481,9 +465,7 @@
<td class="fit">{{jacketTimespan PublishDate}}</td>
<td class="fit">{{jacketTimespan FirstSeen}}</td>
<td class="fit">{{Tracker}}</td>
<td class="Title" style="word-break: break-all">
{{#if Details}}<a href="{{Details}}" target="_blank">{{Title}}</a>{{else}}{{Title}}{{/if}} <span class="release-labels"></span>
</td>
<td class="Title" style="word-break: break-all"><a href="{{Details}}" target="_blank">{{Title}}</a> <span class="release-labels"></span></td>
<td class="fit">{{Size}}</td>
<td class="fit">{{jacketSize Size}}</td>
<td class="fit">{{Files}}</td>
@@ -547,10 +529,10 @@
</div>
<div class="modal-body">
<p>You can search all configured indexers from this screen.</p>
<label for="searchquery">Query</label>
<label for="text">Query</label>
<input class="form-control" type="text" name="query" id="searchquery" />
{{#if filters}}
<label for="searchFilter">Filter</label>
<label for="filter">Filter</label>
<select name="filter" id="searchFilter">
<option value="all">all</option>
{{#each filters}}
@@ -558,9 +540,9 @@
{{/each}}
</select>
{{/if}}
<label for="searchTracker">Tracker</label>
<label for="tracker">Tracker</label>
<select name="tracker" id="searchTracker" multiple="multiple"></select>
<label for="searchCategory">Category</label>
<label for="category">Category</label>
<select name="category" id="searchCategory" multiple="multiple"></select>
<button id="jackett-search-perform" class="btn btn-success btn-sm"><span class="fa fa-search"></span></button>
<div id="searchResults"></div>
@@ -575,35 +557,14 @@
<script id="jackett-search-results" type="text/x-handlebars-template">
<hr />
<span class="indexers">Your search was done using:
{{#each Indexers}}
<span
<p>Your search was done using:
{{#each Indexers}}{{Name}}
{{#if Error}}
class="error"
(<span title="{{Error}}"><b>Error</b></span>)
{{else}}
{{#ifCond Results 0}}
class="no-results"
{{/ifCond}}
({{Results}})
{{/if}}
>
{{Name}}
{{#if Error}}
(<span title="{{Error}}"<b>Error</b></span>)
{{~else~}}
({{~Results~}})
{{#if ElapsedTime}}
<span title="Elapsed time">[{{~ElapsedTime~}}ms]</span>
{{~else~}}
<span title="Elapsed time">[cache]</span>
{{~/if~}}
{{~/if~}}
{{~#if @last~}}
.
{{~else~}}
,
{{~/if~}}
</span>
{{/each}}
, {{/each}}
</p>
<datalist id="jackett-search-saved-presets"></datalist>
<table id="jackett-search-results-datatable" class="dataTable compact cell-border hover stripe">
@@ -631,9 +592,7 @@
<td class="text-center">{{PublishDate}}</td>
<td class="text-center" title="{{dateFormat PublishDate format="YYYY-MM-DD HH:mm:ss Z"}}">{{jacketTimespan PublishDate}}</td>
<td class="text-center">{{Tracker}}</td>
<td class="Title" style="word-break: break-all">
{{#if Details}}<a href="{{Details}}" target="_blank">{{Title}}</a>{{else}}{{Title}}{{/if}} <span class="release-labels"></span>
</td>
<td class="Title" style="word-break: break-all"><a href="{{Details}}" target="_blank">{{Title}}</a> <span class="release-labels"></span></td>
<td class="text-right">{{Size}}</td>
<td class="text-right fit">{{jacketSize Size}}</td>
<td class="text-center">{{Files}}</td>
@@ -797,6 +756,6 @@
</script>
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
<script type="text/javascript" src="../custom.js?changed=20240420v1"></script>
<script type="text/javascript" src="../custom.js?changed=2023041901"></script>
</body>
</html>

View File

@@ -20,7 +20,7 @@ Handlebars.registerHelper('jacketTimespan', function (context, block) {
var hours = timeSpan.asHours();
if (hours < 48) {
return parseFloat(hours).toFixed(1) + 'h ago';
return Math.round(hours) + 'h ago';
}
var days = timeSpan.asDays();

View File

@@ -1,28 +1,37 @@
---
id: 0daykiev
name: 0day.kiev
description: "0day.kiev.ua is a UKRAINIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: uk-UA
description: "0day.kiev.ua is a RUSSIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: ru-RU
type: private
encoding: windows-1251
links:
- https://tracker.0day.community/
legacylinks:
- https://tracker.0day.kiev.ua/
caps:
categorymappings:
- {id: 10, cat: Movies, desc: "Фильмы (Movies)"}
- {id: 16, cat: Movies/HD, desc: "HD / Фильмы (HD / Movies)"}
- {id: 30, cat: TV/HD, desc: "HD / Сериалы (HD / TV Shows)"}
- {id: 27, cat: Movies/HD, desc: "HD / Мультфильмы (HD / Cartoons)"}
- {id: 17, cat: PC/Games, desc: "Игры / ПК (Games / PC)"}
- {id: 14, cat: Audio, desc: "Музыка / Аудио (Music / Audio)"}
- {id: 11, cat: TV, desc: "Мультфильмы (Cartoons)"}
- {id: 29, cat: TV, desc: "Мультсериалы (TV Series)"}
- {id: 11, cat: Movies, desc: "Мультфильмы (Cartoons)"}
- {id: 28, cat: TV/Documentary, desc: "HD / Документальное (HD / Documentary)"}
- {id: 34, cat: TV/Anime, desc: "Аниме (Anime)"}
- {id: 20, cat: TV/Documentary, desc: "Документальное (Documentary)"}
- {id: 14, cat: Audio, desc: "Музыка / Аудио (Music / Audio)"}
- {id: 15, cat: Audio/Video, desc: "Музыка / Видео (Music / Video)"}
- {id: 16, cat: Movies/HD, desc: "HD / Фильмы (HD / Movies)"}
- {id: 27, cat: TV/HD, desc: "HD / Мультфильмы (HD / Cartoons)"}
- {id: 28, cat: TV/HD, desc: "HD / Документальное (HD / Documentary)"}
- {id: 41, cat: Movies/3D, desc: "HD / 3D видео (HD / 3D video)"}
- {id: 47, cat: Movies, desc: "HDv 0day Team"}
- {id: 17, cat: PC/Games, desc: "Игры / ПК (Games / PC)"}
- {id: 25, cat: Console/XBox 360, desc: "Игры / XBOX360 (Games / XBOX360)"}
- {id: 33, cat: Console/PSP, desc: "Игры / PSP - PS2 (Games / PSP - PS2)"}
- {id: 37, cat: Console/PS3, desc: "Игры / PS3 (Games / PS3)"}
- {id: 18, cat: PC/0day, desc: "Софт / Windows (Software / Windows)"}
- {id: 39, cat: PC/Mac, desc: "Mac OS (Софт / Игры) (Mac OS (Software / Games))"}
- {id: 19, cat: TV, desc: "TV / Сериалы (TV shows)"}
- {id: 30, cat: TV/HD, desc: "HD / Сериалы (HD / TV Shows)"}
- {id: 23, cat: TV, desc: "TV / Передачи (TV / Broadcasts)"}
- {id: 22, cat: TV/Sport, desc: "Спорт (Sports)"}
- {id: 31, cat: Other, desc: "Прочее (Other)"}
modes:
@@ -62,10 +71,6 @@ settings:
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "The tracker has a system for deleting inactive accounts after 6 months from your last visit to the tracker."
login:
path: takelogin.php
@@ -99,12 +104,12 @@ search:
keywordsfilters:
- name: diacritics
args: replace
- name: re_replace # S01 to сезон 1
args: ["(?i)\\bS0*(\\d+)\\b", "сезон $1"]
- name: re_replace # E01 to сері 1
args: ["(?i)\\bE0*(\\d+)\\b", "сері $1"]
- name: re_replace # S01E01 to сезон 1 сері 1
args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", "сезон $1 сері $2"]
- name: re_replace # S01 to Cезон 1
args: ["(?i)\\bS0*(\\d+)\\b", "езон $1"]
- name: re_replace # E01 to Серии 1
args: ["(?i)\\bE0*(\\d+)\\b", "ерии $1"]
- name: re_replace # S01E01 to Сезон 1 Серии 1
args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", "езон $1 ерии $2"]
rows:
selector: table > tbody > tr.rowtorrentinfo
@@ -121,35 +126,17 @@ search:
filters:
# normalize to SXXEYY format
- name: re_replace
args: ["(?i)[CС]езони?[\\s:]*(\\d+(?:-\\d+)?).+?(?:[CС]ері[їяй]|Епізоди?)[\\s:]*(\\d+(?:-\\d+)?)\\s*з\\s*(\\w?)", "S$1E$2 of $3"]
args: ["[\\:\\-\\/\\|]", " "]
- name: re_replace
args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езони?.+?(\\d+(?:-\\d+)?)\\s*з\\s*(\\w?)(?:\\s*(?:[CС]ері[їяй]|Епізоди?))?", "S$1E$2 of $3"]
args: ["(?i)\\bКураж Бамбей\\b", "kurazh"]
- name: re_replace
args: ["(?i)(\\d+(?:-\\d+)?)\\s*[CС]езони?.+?(\\d+(?:-\\d+)?)\\s*(?:[CС]ері[їяй]|Епізоди?)\\s+з\\s*(\\w?)", "S$1E$2 of $3"]
args: ["(?i)\\bКубик в Кубе\\b", "Kubik"]
- name: re_replace
args: ["(?i)[CС]езони?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)\\s*з\\s*(\\w?)(?:\\s*(?:[CС]ері[їяй]|Епізоди?))?", "S$1E$2 of $3"]
args: ["(?i)\\bКравец\\b", "Kravec"]
- name: re_replace
args: ["(?i)[CС]езони?[\\s:]*(\\d+(?:-\\d+)?).+?(\\d+(?:-\\d+)?)\\s*(?:[CС]ері[їяй]|Епізоди?)\\s+з\\s*(\\w?)", "S$1E$2 of $3"]
args: ["(?i)(.*)\\([CС]езон\\s+(\\d+)\\)\\s+[CС]ери[ия]\\s+(\\d+)\\s+(\\d+)(.*)", "$1 S$2E$3-$4 rus $5"]
- name: re_replace
args: ["(?i)[CС]езони?[\\s:]*(\\d+(?:-\\d+)?).+?(?:[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)(?:[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+(?:[CС]ері[їяй]|Епізоди?)\\s+з\\s*(\\w?)", "E$1 of $2"]
- name: re_replace
args: ["(?i)(?:[CС]ері[їяй]|Епізоди?)[\\s:]*(\\d+(?:-\\d+)?)", "E$1"]
- name: re_replace
args: ["(?i)(\\d+(?:-\\d+)?)\\s+(?:[CС]ері[їяй]|Епізоди?)", "E$1"]
args: ["(?i)(.*)\\([CС]езон\\s+(\\d+)\\)(.*)", "$1 S$2 rus $3"]
- 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
@@ -162,12 +149,6 @@ search:
args: ["(?i)\\bWEB Rip\\b", "WEBRip"]
- name: re_replace
args: ["(?i)\\bWEB DL\\b", "WEBDL"]
- name: re_replace
args: ["[\\[\\(\\{<«][\\s\\W]*[\\]\\)\\}>»]", ""]
- name: re_replace
args: ["^[\\s&,\\.!\\?\\+\\-_\\|\\/':]+", ""]
- name: re_replace
args: ["(?i)^\\(\\s*([SE]\\d+.*?)\\s*\\)[\\s\\/\\|]*(.+)", "$2 $1"]
details:
selector: a[href^="details.php?id="]
attribute: href
@@ -178,7 +159,7 @@ search:
selector: td:nth-child(2) i
filters:
- name: append
args: " +02:00" # EET
args: " +03:00" # MSK
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
size:

View File

@@ -5,30 +5,46 @@ description: "1337X is a Public torrent site that offers verified torrent downlo
language: en-US
type: public
encoding: UTF-8
followredirect: true
requestDelay: 2
# get status and news on domains at the official site https://1337x-status.org/
links:
- https://1337x.to/
- https://1337x.st/
- https://x1337x.ws/
- https://x1337x.eu/
- https://x1337x.se/
- https://x1337x.cc/
- https://1337x.unblockit.asia/
- https://1337x.unblockninja.com/
- https://1337x.ninjaproxy1.com/
- https://1337x.proxyninja.org/
- https://1337x.proxyninja.net/
- https://1337x.torrentbay.st/
- https://1337x.torrentsbay.org/
legacylinks:
- https://1337x.is/
- https://1337x.nocensor.work/
- https://1337x.unblockit.cam/
- https://1337x.nocensor.biz/
- https://1337x.gd/
- https://1337x.mrunblock.bond/
- https://1337x.abcproxy.org/
- https://1337x.so/
- https://1337x.unblockit.download/
- https://1337x.unblockit.day/
- https://1337x.unblockit.llc/
- https://1337x.unblockit.blue/
- https://1337x.unblockit.name/
- https://1337x.nocensor.sbs/
- https://1337x.unblockit.ist/
- https://1337x.unblockit.bet/
- https://1337x.unblockit.cat/
- https://1337x.unblockit.nz/
- https://1337x.nocensor.world/
- https://1337x.unblockit.page/
- https://1337x.unblockit.pet/
- https://1337x.nocensor.lol/
- https://1337x.unblockit.ink/
- https://1337x.nocensor.art/
- https://1337x.unblockit.bio/
- https://1337x.unblockit.boo/
- https://1337x.mrunblock.guru/
- https://1337x.mrunblock.life/ # cloudflare 403
- https://1337x.unblockit.click/
caps:
limitsDefault: 80
limitsMax: 80
categorymappings:
# Anime
- {id: 28, cat: TV/Anime, desc: "Anime/Anime"}
@@ -120,8 +136,10 @@ caps:
allowrawsearch: true
settings:
- name: info_flaresolverr
type: info_flaresolverr
- name: flaresolverr
type: info
label: FlareSolverr
default: This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href="https://github.com/Jackett/Jackett#configuring-flaresolverr" target="_blank">FlareSolverr</a> to access it.
- name: downloadlink
type: select
label: Download link
@@ -165,6 +183,9 @@ download:
attribute: href
search:
pageSize: 20
pageable: "{{ if or .Query.Album .Query.Artist .Keywords }}true{{ else }}false{{ end }}"
paths:
# present first page of movies tv and music results if there are no search parms supplied (20 hits per page)
- path: "{{ if or .Query.Album .Query.Artist .Keywords }}sort-search{{ else }}cat/Movies{{ end }}{{ if or .Query.Album .Query.Artist }}/{{ or .Query.Album .Query.Artist }}{{ else }}/{{ .Keywords }}{{ end }}{{ if or .Query.Album .Query.Artist .Keywords }}/{{ else }}{{ end }}{{ .Config.sort }}/{{ .Config.type }}/1/"
@@ -172,10 +193,6 @@ search:
- path: "{{ if or .Query.Album .Query.Artist .Keywords }}sort-search{{ else }}cat/Music{{ end }}{{ if or .Query.Album .Query.Artist }}/{{ or .Query.Album .Query.Artist }}{{ else }}/{{ .Keywords }}{{ end }}{{ if or .Query.Album .Query.Artist .Keywords }}/{{ else }}{{ end }}{{ .Config.sort }}/{{ .Config.type }}/{{ if or .Query.Album .Query.Artist .Keywords }}3{{ else }}1{{ end }}/"
- path: "{{ if or .Query.Album .Query.Artist .Keywords }}sort-search{{ else }}cat/Other{{ end }}{{ if or .Query.Album .Query.Artist }}/{{ or .Query.Album .Query.Artist }}{{ else }}/{{ .Keywords }}{{ end }}{{ if or .Query.Album .Query.Artist .Keywords }}/{{ else }}{{ end }}{{ .Config.sort }}/{{ .Config.type }}/{{ if or .Query.Album .Query.Artist .Keywords }}4{{ else }}1{{ end }}/"
keywordsfilters:
- name: re_replace # daily standard S2023 > 2023
args: ["\\bS(20\\d{2})\\b", "$1"]
rows:
selector: tr:has(a[href^="/torrent/"])
@@ -221,7 +238,7 @@ search:
args: ["(?i)WEB\\sDL", "WEB-DL"]
- name: re_replace
args: ["(?i)HDTVRIP", "HDTV"]
category_optional:
category_sub:
optional: true
selector: td[class^="coll-1"] a[href^="/sub/"]
attribute: href
@@ -230,7 +247,7 @@ search:
- name: split
args: ["/", 2]
category:
text: "{{ if .Result.category_optional }}{{ .Result.category_optional }}{{ else }}40{{ end }}"
text: "{{ if .Result.category_sub }}{{ .Result.category_sub }}{{ else }}40{{ end }}"
details:
selector: td[class^="coll-1"] a[href^="/torrent/"]
attribute: href

View File

@@ -10,25 +10,24 @@ links:
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movie(電影)"}
- {id: 402, cat: TV, desc: "TV Series(電視影劇)"}
- {id: 403, cat: TV, desc: "TV Shows(電視綜藝)"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries(紀錄教育)"}
- {id: 405, cat: TV/Anime, desc: "Animations(卡通動漫)"}
- {id: 406, cat: Audio/Video, desc: "Music Videos(音樂短片/演唱會)"}
- {id: 407, cat: TV/Sport, desc: "Sports(體育賽事)"}
- {id: 408, cat: Audio, desc: "HQ Audio(高品质音频)"}
- {id: 410, cat: PC/0day, desc: "Software(軟體)"}
- {id: 411, cat: PC/Games, desc: "Games(電子遊戲)"}
- {id: 412, cat: Books/EBook, desc: "eBook(電子書)"}
- {id: 409, cat: Other, desc: "Misc(其他)"}
- {id: 401, cat: Movies, desc: "Movies/电影"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
- {id: 405, cat: TV/Anime, desc: "Animations/动漫"}
- {id: 402, cat: TV, desc: "TV Series/电视剧"}
- {id: 403, cat: TV, desc: "TV Shows/综艺节目"}
- {id: 406, cat: Audio/Video, desc: "Music Videos/音乐MV"}
- {id: 407, cat: TV/Sport, desc: "Sports/体育"}
- {id: 409, cat: Other, desc: "Misc/其他"}
- {id: 408, cat: Audio, desc: "HQ Audio/高品质音频"}
- {id: 412, cat: Other, desc: "Edu/教育"}
- {id: 411, cat: PC/Games, desc: "Games/游戏"}
- {id: 410, cat: PC/0day, desc: "Software/软件"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
music-search: [q]
book-search: [q]
settings:
- name: username
@@ -64,16 +63,10 @@ settings:
options:
desc: desc
asc: asc
- name: info_flaresolverr
type: info_flaresolverr
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Cherish your user account. Inactive accounts would be deleted based on the following rules:<ol><li>Veteran User or above would never be deleted.</li><li>Elite User or above would never be deleted if parked (at User CP).</li><li>Parked accounts would be deleted if users have not logged in for more than 400 days in a row.</li><li>Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.</li><li>Accounts with both uploaded and downloaded amount being 0 would be deleted if users have not logged in for more than 100 days in a row.</li></ol>"
login:
path: login.php
@@ -196,4 +189,4 @@ search:
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.8.13 2024-07-23
# NexusPHP v1.8.2 2023-05-08

View File

@@ -144,7 +144,6 @@ login:
remove: table
test:
path: torrents-search.php
selector: a[href="account-logout.php"]
search:
paths:

View File

@@ -1,36 +1,42 @@
---
id: wintersakura
name: WinterSakura
description: "WinterSakura is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
id: 2xfree
name: 2xFree
description: "2xFree is a CHINESE Private Torrent Tracker for HD MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
requestDelay: 2
links:
- https://wintersakura.net/
- https://pt.2xfree.org/
caps:
categorymappings:
# torrents.php
- {id: 409, cat: Other, desc: "Misc其他", default: true}
- {id: 407, cat: TV/Sport, desc: "Sports体育", default: true}
- {id: 406, cat: Audio/Video, desc: "Music Videos音乐MV", default: true}
- {id: 408, cat: Audio, desc: "HQ Audio无损音乐", default: true}
- {id: 418, cat: TV, desc: "TV Shows综艺(分集)", default: true}
- {id: 403, cat: TV, desc: "TV Shows综艺(Packs合集)", default: true}
- {id: 402, cat: TV, desc: "TV Series剧集(分集)", default: true}
- {id: 414, cat: TV, desc: "TV Series剧集(Packs合集)", default: true}
- {id: 413, cat: TV/Anime, desc: "Animation series动漫剧集(分集)", default: true}
- {id: 423, cat: TV/Anime, desc: "Animation series动漫剧集(Packs合集)", default: true}
- {id: 422, cat: TV/Anime, desc: "Animation flims动漫电影", default: true}
- {id: 410, cat: TV/Documentary, desc: "Documentaries纪录片", default: true}
- {id: 401, cat: Movies, desc: "Movies电影", default: true}
# special.php
- {id: 427, cat: PC, desc: "Software软件/程序/代码", default: false}
- {id: 426, cat: Books/Technical, desc: "Papers期刊/论文", default: false}
- {id: 428, cat: Books/EBook, desc: "Books图书", default: false}
- {id: 425, cat: Other, desc: "Database数据/数据库", default: false}
- {id: 424, cat: Other, desc: "Course课程", default: false}
- {id: 401, cat: Movies, desc: "Movies(电影)", default: true}
- {id: 402, cat: TV, desc: "TV Series(电视剧)", default: true}
- {id: 403, cat: TV, desc: "TV Shows(综艺)", default: true}
- {id: 404, cat: TV/Documentary, desc: "Documentaries(纪录片)", default: true}
- {id: 405, cat: TV/Anime, desc: "Animations(动画)", default: true}
- {id: 406, cat: Audio/Video, desc: "Music Videos(MV)", default: true}
- {id: 407, cat: TV/Sport, desc: "Sports(体育运动)", default: true}
- {id: 408, cat: Audio, desc: "HQ Audio(音乐)", default: true}
- {id: 409, cat: Other, desc: "Misc(其他)", default: true}
- {id: 410, cat: Books, desc: "eBook(电子书)", default: true}
- {id: 411, cat: PC/Games, desc: "PCGame(游戏)", default: true}
- {id: 413, cat: Audio/Video, desc: "AV(无码)", default: true}
- {id: 414, cat: Audio/Video, desc: "AV(有码)", default: true}
- {id: 420, cat: XXX, desc: "HAnime(H动画)", default: true}
- {id: 421, cat: XXX, desc: "HComic(H漫画)", default: true}
- {id: 422, cat: XXX, desc: "HGame(H游戏)", default: true}
- {id: 423, cat: XXX, desc: "IV(写真影片)", default: true}
- {id: 424, cat: XXX, desc: "IV(写真图集)", default: true}
# special
- {id: 526, cat: Movies, desc: "VRMovies(3D/VR电影)", default: true}
- {id: 527, cat: TV, desc: "VRSeries(3D/VR剧集)", default: true}
- {id: 528, cat: Audio/Video, desc: "AV(VR无码)", default: true}
- {id: 529, cat: Audio/Video, desc: "AV(VR有码)", default: true}
- {id: 530, cat: Console, desc: "VRGame(VR一体机游戏)", default: true}
- {id: 531, cat: PC/Games, desc: "PCVRGame(PCVR游戏)", default: true}
- {id: 532, cat: Other, desc: "VRTools(VR工具软件)", default: true}
modes:
search: [q]
@@ -52,7 +58,7 @@ settings:
- name: info_2fa
type: info
label: "About 2FA code"
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the WinterSakura Web Site. Otherwise just leave it empty."
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the ICC2022 Web Site. Otherwise just leave it empty."
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -104,9 +110,9 @@ login:
search:
paths:
- path: torrents.php
categories: [409, 407, 406, 408, 418, 403, 402, 414, 413, 423, 422, 410, 401]
categories: [401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 413, 420, 421, 422, 423, 424]
- path: special.php
categories: [427, 426, 428, 425, 424]
categories: [526, 527, 528, 529, 530, 531, 532]
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.DoubanID }} {{ else }}{{ .Keywords }}{{ end }}{{ if .Query.DoubanID }}{{ .Query.DoubanID }}{{ else }}{{ end }}"
@@ -114,9 +120,9 @@ search:
incldead: 0
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
# 0 title, 1 descr, 3 uploader, 4 imdburl
# 0 title, 1 descr, 3 uploader, 4 imdburl (4 does not appear to work)
search_area: "{{ if or .Query.IMDBID .Query.DoubanID }}1{{ else }}0{{ end }}"
# 0 AND, 2 exact
# 0 AND, 1 OR, 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
@@ -200,8 +206,11 @@ search:
img.pro_2up: 2
"*": 1
minimumratio:
text: 0.4
text: 1.0
minimumseedtime:
# 1 day (as seconds = 24 x 60 x 60)
text: 86400
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.8.7 2023-09-04
# NexusPHP v1.8.2 2023-05-08

View File

@@ -56,16 +56,10 @@ settings:
options:
desc: desc
asc: asc
- name: info_flaresolverr
type: info_flaresolverr
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Cherish your account. Inactive accounts will be deleted based on the following provisions:<ol><li>Nexus Master or later will not be deleted account.</li><li>Veteran User or higher will not be deleted if temporarily locked (at User Settings).</li><li>Temporarily locked accounts will be deleted if not logged in within 90 days.</li><li>Accounts that are not temporarily locked will be deleted if they do not log in within 60 days.</li><li>Accounts with no storage for uploads and downloads will be deleted if they do not log in within 30 days or have registered within 14 days.</li></ol>"
login:
path: login.php

View File

@@ -42,10 +42,6 @@ settings:
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Filter freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
@@ -65,10 +61,6 @@ settings:
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Inactivity grace period is three months which means that if you do not log in to the 3Dtorrents web site for 90 days, your account will be deleted. If you are VIP your will stay until the VIP period is over."
login:
path: index.php?page=login
@@ -103,7 +95,7 @@ search:
by: "{{ .Config.type }}"
rows:
selector: "table[cellspacing!=\"1\"].lista > tbody > tr:has(a[href^=\"index.php?page=torrents&category=\"]){{ if .Config.freeleech }}:has(img[src=\"images/sign_free.png\"]){{ else }}{{ end }}"
selector: table[cellspacing!="1"].lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
category:
@@ -114,6 +106,7 @@ search:
args: category
- name: re_replace
args: ["(\\b0\\b)", "31"]
title:
selector: a[href^="index.php?page=torrent-details&id="]
details:
@@ -154,7 +147,6 @@ search:
default: 0
downloadvolumefactor:
case:
img[src="images/sign_free.png"]: 0
img[src="images/50off.png"]: 0.5
"*": 1
uploadvolumefactor:

View File

@@ -1,106 +0,0 @@
---
id: 52bt
name: 52BT
description: "52BT is a CHINESE Public tracker for TV / MOVIES / MUSIC / GENERAL"
language: zh-CN
type: public
encoding: UTF-8
requestDelay: 2
links:
# Send any content to 52btbtbt@gmail.com to get the latest address. or visit https://521.52btbt.cyou/
- https://www.529053.xyz/
- https://www.529055.xyz/
legacylinks:
- https://529050.xyz/
- https://529048.xyz/
- https://529049.xyz/
- https://www.529052.xyz/
caps:
categorymappings:
- {id: 影视, cat: TV, desc: 影视}
- {id: 影视, cat: Movies, desc: 影视}
- {id: 音乐, cat: Audio, desc: 音乐}
- {id: 图像, cat: Other, desc: 图像}
- {id: 文档书籍, cat: Books, desc: 文档书籍}
- {id: 压缩文件, cat: Other, desc: 压缩文件}
- {id: 安装包, cat: PC, desc: 安装包}
- {id: 其他, cat: Other, desc: 其他}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: cat-id
type: select
label: Category
default: 0
options:
0: All categories
1: Film and Television
2: Music
3: Images
4: Books
5: Zip Files
6: Software
7: Other
- name: sort
type: select
label: Sort requested from site
default: 2
options:
2: created
1: size
0: relevance
- name: info_flaresolverr
type: info_flaresolverr
search:
paths:
- path: "search-{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}-{{ .Config.cat-id }}-{{ .Config.sort }}-1.html"
- path: "search-{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}-{{ .Config.cat-id }}-{{ .Config.sort }}-2.html"
error:
- selector: :root:contains("Internal Server Error")
rows:
selector: div.ssbox
fields:
categorydesc:
selector: div.title > h3 > span
filters:
- name: re_replace
args: ["([\\[\\]]+)", ""]
title:
selector: a[href^="/hash/"]
details:
selector: a[href^="/hash/"]
attribute: href
infohash:
selector: a[href^="magnet:?xt="]
attribute: href
filters:
- name: regexp
args: ([A-F|a-f|0-9]{40})
date:
selector: div.sbar > span:contains("添加时间:") > b
filters:
- name: append
args: " +08:00" # CST
- name: dateparse
args: "yyyy-MM-dd zzz"
size:
selector: div.sbar > span:contains("大小:") > b
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -29,12 +29,13 @@ caps:
music-search: [q]
settings:
- name: username
- name: cookie
type: text
label: Username
- name: password
type: password
label: Password
label: Cookie
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -59,32 +60,13 @@ settings:
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Account retention rules:<ol><li>Veteran User (junior college) and above will be retained forever</li><li>Elite User (junior high school) and above will not be deleted after parking (in the control panel)</li><li>Users with a parked account who do not log in for 400 consecutive days will be deleted</li><li>Users with non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users with no traffic (that is, upload/download data are both 0) will be deleted if they do not log in for 15 consecutive days, or if the registration time reaches 60 days.</li></ol>"
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
method: cookie
inputs:
secret: ""
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
logout: ""
securelogin: ""
ssl: yes
trackerssl: yes
error:
- selector: td.embedded:has(h2:contains("失败"))
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href="usercp.php"]
search:
paths:

View File

@@ -127,10 +127,6 @@ settings:
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Inactive accounts of users, power users and mega users will be permanently deleted from the database after 125 days! Torrents in your share don't count as activity - only logging in again counts! You can extend this period to 250 days by setting your account to parking. You can find the option to do this under Edit Profile."
login:
path: signin.php
@@ -142,8 +138,7 @@ login:
error:
- selector: .error
test:
path: index.php
selector: a[href^="/logout.php?c="]
path: browse.php
search:
path: browse.php
@@ -208,7 +203,7 @@ search:
- name: replace
args: ["Gestern", "Yesterday"]
- name: append
args: "+01:00" # CET
args: " +01:00" # CET
date_year:
# 30.02.2018 23:12:50
selector: td:nth-child(10):contains("."):contains(":")
@@ -217,7 +212,7 @@ search:
- name: split
args: ["b", 0]
- name: append
args: "+01:00" # CET
args: " +01:00" # CET
- name: dateparse
args: "dd.MM.yyyy HH:mm:ss zzz"
date:

View File

@@ -74,10 +74,6 @@ settings:
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Accounts are automatically deactivated after 4 months of inactivity (no connection to the site)."
login:
method: form
@@ -97,7 +93,6 @@ login:
text: " - Bad username/password."
test:
path: /
selector: form#logoutForm
search:
paths:
@@ -118,7 +113,7 @@ search:
SortOrder: "{{ .Config.type }}"
rows:
selector: table.table-rows > tbody > tr:has(a[href^="/Torrent/Download?ReleaseId="])
selector: table.table-rows > tbody > tr
fields:
category:
@@ -172,6 +167,6 @@ search:
minimumratio:
text: 1.0
minimumseedtime:
# 4 days (as seconds = 4 x 24 x 60 x 60)
text: 345600
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# Gazelle

View File

@@ -1,7 +1,5 @@
---
id: abtorrents
replaces:
- audiobooktorrents
name: ABtorrents
description: "ABtorrents (ABT) is a Private Torrent Tracker for AUDIOBOOKS"
language: en-US
@@ -88,8 +86,10 @@ settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -98,17 +98,11 @@ settings:
type: info
label: Search results
default: "If you are getting the error <b>Login Failed, got redirected</b> then access the site with your browser and <b>mark as read</b> all PMs."
- name: info_activity
type: info
label: Account Inactivity
default: "Account retention rules:<ol><li>Any account that has unread PMs older than 14 days or has not logged in for 30 days will be suspended</li><li>Any account that has not been logged into for 90 days is deemed inactive and will thus be purged</li><li>Any account that has not been logged into for 30 days is deemed inactive and will be put on suspension until User logs in again</li><li>Users stats, points, and history are irrevocably lost when purged</li><li>Logging into the site is the ONLY way to keep an account active</li><li>SEEDING ONLY does NOT constitute site activity.</li></ol>"
login:
# using cookie method because login page simplecaptcha generates Exception: Cannot access child value on Newtonsoft.Json.Linq.JValue.
method: cookie
test:
path: index.php
selector: a[href*="logout.php?hash_please="]
path: browse.php
search:
paths:
@@ -143,32 +137,32 @@ search:
selector: a[href^="download.php?torrent="]
attribute: href
files:
selector: a[href^="filelist.php?id="]
selector: td:nth-last-child(9)
date_day:
# Yesterday<br/>6:00 AM
selector: td:nth-last-child(7):contains("day")
# auto adjusted by site account profile
# Yesterday 6:00 AM
selector: td:nth-last-child(2) > div:contains("day")
optional: true
filters:
- name: fuzzytime
date_year:
# Aug 6 2021<br/>7:25 PM
selector: td:nth-last-child(7):not(:contains("day"))
# auto adjusted by site account profile
# Aug 6 2021 7:25 PM
selector: td:nth-last-child(2) > div:not(:contains("day"))
optional: true
filters:
- name: dateparse
args: "MMM d yyyyh:mm tt"
args: "MMM d yyyy h:mm tt"
date:
text: "{{ if or .Result.date_day .Result.date_year }}{{ or .Result.date_day .Result.date_year }}{{ else }}now{{ end }}"
size:
selector: td:nth-last-child(4) div:first-child
selector: td:nth-last-child(6)
grabs:
selector: a[href^="snatches.php?id="]
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(3) div:nth-last-child(2)
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3) div:last-child
selector: td:nth-last-child(3)
downloadvolumefactor:
case:
tr.freeleech_color: 0

View File

@@ -1,27 +1,25 @@
---
id: tocashare
name: Toca Share
description: "Toca Share is a PORTUGUESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: pt-PT
id: acervos
name: Acervos (API)
description: "Acervos is a Brazilian tracker for movies, tv shows, and others."
language: pt-BR
type: private
encoding: UTF-8
links:
- https://tocashare.com/
- https://tocashare.biz/
- https://acervos.cc/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Filme"}
- {id: 2, cat: TV, desc: "Seriado"}
- {id: 3, cat: Audio, desc: "Som (Musica)"}
- {id: 4, cat: Console, desc: "Jogo"}
- {id: 5, cat: PC, desc: "App"}
- {id: 6, cat: Books/EBook, desc: "E-Books"}
- {id: 7, cat: Other, desc: "Cursos"}
- {id: 8, cat: XXX/ImageSet, desc: "Fotos Adultas"}
- {id: 9, cat: Audio/Audiobook, desc: "Audio E-Book"}
- {id: 10, cat: XXX, desc: "XXX"}
- {id: 11, cat: Audio/Video, desc: "Shows"}
- {id: 1, cat: Movies, desc: "Filmes"}
- {id: 2, cat: TV, desc: "Séries"}
- {id: 6, cat: TV/Anime, desc: "Animes"}
- {id: 3, cat: TV/Documentary, desc: "Documentários"}
- {id: 7, cat: Audio/Video, desc: "Shows"}
- {id: 4, cat: Console, desc: "Games"}
- {id: 8, cat: Other, desc: "Cursos"}
- {id: 9, cat: Books, desc: "eBooks / Revistas / Apostilas"}
- {id: 5, cat: PC, desc: "Programas"}
- {id: 10, cat: Other, desc: "Materiais de Apoio"}
modes:
search: [q]
@@ -37,7 +35,7 @@ settings:
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://tocashare.biz/\" target=\"_blank\">Toca Share</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
default: "Find or Generate a new API Token by accessing your <a href=\"https://acervos.cc/\" target=\"_blank\">Acervos</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -58,33 +56,28 @@ settings:
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "The inactivation system was created with the purpose of encouraging member participation. This way, after 7 days without accessing the website, 30 BONs will be deducted per day. If your account balance reaches 0 and you don't have any torrents being seeded, it will be automatically deactivated."
login:
path: /api/torrents
method: get
inputs:
api_token: "{{ .Config.apikey }}"
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://github.com/HDInnovations/UNIT3D-Community-Edition/wiki/Torrent-API-(UNIT3D-v8.x.x)
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php#L476
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
- path: "/api/torrents/filter"
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
api_token: "{{ .Config.apikey }}"
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
@@ -92,28 +85,46 @@ search:
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
- name: re_replace
args: ["(?i)\\bS(\\d+)", "T$1"]
rows:
selector: data
attribute: attributes
count:
selector: meta.total
fields:
category:
selector: category_id
title:
selector: name
files:
selector: num_file
filters:
- name: re_replace
args:
- "\\bDUAL\\b"
- "Portuguese (Brazil) English"
details:
selector: details_link
_cat:
selector: category
_type:
selector: type
_res:
selector: resolution
optional: true
_reg:
selector: region
optional: true
download:
selector: download_link
infohash:
@@ -132,16 +143,14 @@ search:
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)^None$", ""]
- name: re_replace
args: ["(?i)(Cinema TV)", "Cinema_TV"]
- name: re_replace
args: ["(?i)(Ficção científica)", "Ficção_científica"]
- name: replace
args: [" & ", "_&_"]
description:
text: "{{ .Result.genre }}"
text: "{{ .Result._cat }} {{ .Result._type }} {{ .Result._res }} {{ .Result._reg }} {{ .Result.genre }}"
files:
selector: num_file
seeders:
selector: seeders
leechers:
@@ -169,15 +178,15 @@ search:
100%: 0 # freeleech
"*": 0 # catch errors
uploadvolumefactor:
# api returns False, True
# api returns 0=false, 1=true
selector: double_upload
case:
False: 1 # normal
True: 2 # double
0: 1 # normal
1: 2 # double
# global MR is 0.4 but torrents must be seeded for 5 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 5 days (as seconds = 5 x 24 x 60 x 60)
text: 432000
# json UNIT3D 7.2.0
# 7 days (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 6.4.1 (custom)

View File

@@ -0,0 +1,111 @@
---
id: acgsou
name: ACGsou
description: "ACGsou (36DM) is a CHINESE Public torrent tracker for ANIME"
language: zh-CN
type: public
followredirect: true
encoding: UTF-8
requestDelay: 5
links:
- https://www.36dm.club/
- https://www.36dm.com/
legacylinks:
- https://www.acgsou.com/
- https://acgsou.com/
- http://www.acgsou.com/
- http://acgsou.com/
- http://www.36dm.club/
- https://36dm.com/
- http://36dm.com/
- http://www.36dm.com/
caps:
categorymappings:
- {id: 2, cat: TV/Anime, desc: "动画分类 (Anime)"}
- {id: 7, cat: TV/Anime, desc: "新番连载 (Anime New Fan Series)"}
- {id: 8, cat: TV/Anime, desc: "完整动画 (Anime Collection)"}
- {id: 9, cat: Movies/Other, desc: "剧场版 (Anime Movie)"}
- {id: 10, cat: TV/Anime, desc: "DVDRIP (Anime DVDRIP)"}
- {id: 11, cat: TV/Anime, desc: "BDRIP (Anime BDRIP)"}
- {id: 5, cat: TV/Anime, desc: "RAW/ISO"}
- {id: 3, cat: Books/Comics, desc: "漫画分类 (Manga)"}
- {id: 12, cat: Books/Comics, desc: "连载漫画 (Manga Serial)"}
- {id: 13, cat: Books/Comics, desc: "完整漫画 (Manga Complete)"}
- {id: 14, cat: Books/Comics, desc: "原版漫画 (Manga Original)"}
- {id: 4, cat: Audio, desc: "动漫音乐 (Anime Music)"}
- {id: 15, cat: Audio/Video, desc: "动画MV (Music Video)"}
- {id: 20, cat: TV, desc: "日剧 (Drama Japanese)"}
- {id: 21, cat: TV, desc: "特摄片 (Drama Special)"}
- {id: 6, cat: Other, desc: "其他资源 (Other)"}
- {id: 16, cat: Other, desc: "其他动画 (Other Animation)"}
- {id: 17, cat: Other, desc: "声优视频 (Voice Video)"}
- {id: 19, cat: Other, desc: "动漫资讯 (Anime Information)"}
- {id: 18, cat: PC/Games, desc: "游戏 (Games)"}
modes:
search: [q]
tv-search: [q, season, ep]
music-search: [q]
book-search: [q]
settings: []
download:
selectors:
- selector: a[href^="magnet:?xt="]
attribute: href
search:
paths:
# https://www.acgsou.com/1.html
# https://www.acgsou.com/search.php?keyword=test
- path: "{{ if .Keywords }}search.php?keyword={{ .Keywords }}{{ else }}1.html{{ end }}"
rows:
selector: table tbody tr[class^="alt"]:has(td:nth-child(3) a)
fields:
category:
selector: td:nth-child(2) a
attribute: href
filters:
- name: regexp
args: "sort-(\\d+)-1.html"
title:
selector: td:nth-child(3) a
details:
selector: td:nth-child(3) a
attribute: href
download:
selector: td:nth-child(3) a
attribute: href
date_year:
selector: td:nth-child(1):contains(":")
optional: true
filters:
- name: append
args: " +08:00" # CST
- name: dateparse
args: "MM/dd HH:mm zzz"
date_years:
selector: td:nth-child(1):not(:contains(":"))
optional: true
filters:
- name: append
args: " +08:00" # CST
- name: dateparse
args: "yyyy/MM/dd zzz"
date:
text: "{{ if or .Result.date_year .Result.date_years }}{{ or .Result.date_year .Result.date_years }}{{ else }}now{{ end }}"
size:
selector: td:nth-child(4)
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# BTMaster 2.1.1

View File

@@ -0,0 +1,184 @@
---
id: acidlounge
name: Acid-Lounge
description: "Acid Lounge (A-L) is a Private Torrent Tracker for 0DAY / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://www.acid-lounge.org.uk/
caps:
categorymappings:
- {id: 79, cat: PC/Mobile-Android, desc: "Android"}
- {id: 61, cat: TV/Anime, desc: "Anime"}
- {id: 55, cat: PC/0day, desc: "Appz/0-Day"}
- {id: 59, cat: PC/Mac, desc: "Appz/Mac"}
- {id: 22, cat: PC, desc: "Appz/Misc"}
- {id: 32, cat: PC, desc: "Appz/PC"}
- {id: 48, cat: Audio/Audiobook, desc: "Audio/Books"}
- {id: 84, cat: Other, desc: "Damaged Torrent"}
- {id: 14, cat: Books/EBook, desc: "eBooks"}
- {id: 82, cat: Books/Comics, desc: "eBooks/Comics"}
- {id: 81, cat: Books/Mags, desc: "eBooks/Mags"}
- {id: 60, cat: PC/Mac, desc: "Games/Mac"}
- {id: 54, cat: Console/NDS, desc: "Games/NDS"}
- {id: 4, cat: PC/Games, desc: "Games/PC"}
- {id: 42, cat: Console/PS3, desc: "Games/PS3"}
- {id: 56, cat: Console/Wii, desc: "Games/Wii"}
- {id: 36, cat: Console/XBox 360, desc: "Games/xbox360"}
- {id: 69, cat: Other, desc: "Halloween"}
- {id: 80, cat: PC/Mobile-iOS, desc: "iPhone / iPad"}
- {id: 46, cat: Other, desc: "Kids"}
- {id: 63, cat: PC, desc: "Linux"}
- {id: 49, cat: Other, desc: "Misc"}
- {id: 77, cat: Movies/3D, desc: "Movies/3D BLURAY"}
- {id: 73, cat: Movies/HD, desc: "Movies/Boxsets HD"}
- {id: 74, cat: Movies/SD, desc: "Movies/Boxsets SD"}
- {id: 25, cat: Movies/DVD, desc: "Movies/DVD-R"}
- {id: 51, cat: Movies/HD, desc: "Movies/HD"}
- {id: 26, cat: Movies, desc: "Movies/Retro"}
- {id: 29, cat: Movies/SD, desc: "Movies/SD"}
- {id: 52, cat: Movies/SD, desc: "Movies/WMV"}
- {id: 85, cat: Movies/HD, desc: "Movies/X265"}
- {id: 66, cat: Audio/Lossless, desc: "Music/Flac"}
- {id: 35, cat: Audio/MP3, desc: "Music/MP3"}
- {id: 31, cat: Audio/Video, desc: "Music/Videos"}
- {id: 72, cat: Movies, desc: "Sci-Fi"}
- {id: 83, cat: Movies, desc: "Tribute Packs"}
- {id: 30, cat: TV, desc: "TV"}
- {id: 50, cat: TV/HD, desc: "TV-HD/X264"}
- {id: 71, cat: TV/SD, desc: "TV-SD/X264"}
- {id: 75, cat: TV/HD, desc: "TV/Boxsets HD"}
- {id: 76, cat: TV/SD, desc: "TV/Boxsets SD"}
- {id: 37, cat: XXX, desc: "XXX"}
- {id: 68, cat: XXX, desc: "XXX/0-Day"}
- {id: 78, cat: XXX, desc: "XXX/3D"}
- {id: 67, cat: XXX/ImageSet, desc: "XXX/Imagesets"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: dateAdded
options:
dateAdded: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: Main/?act=Login
method: form
form: form#login
captcha:
type: image
selector: img[alt="Security code"]
input: code
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div.errorWrap
test:
path: browse.php
search:
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}cat[]={{.}}&{{end}}"
search: "{{ .Keywords }}"
# alive, aliveanddead, nobot, dead, free, nuked
status: "{{ if .Config.freeleech }}free{{ else }}aliveanddead{{ end }}"
# title, desc, both
search_type: title
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
rows:
selector: table#browse_torrents_table > tbody > tr[id^="torrent_row_"]
fields:
category:
selector: a[href^="browse.php?cat[]="]
attribute: href
filters:
- name: querystring
args: cat[]
title:
selector: a.torrent_name
attribute: title
details:
selector: a.torrent_name
attribute: href
download:
selector: a[href^="download.php?"]
attribute: href
description:
optional: true
selector: span.torrent_small_desc
genre:
selector: span.torrent_small_desc
filters:
- name: regexp
args: "\\[.+?\\] \\[(.+?)\\]"
- name: replace
args: [" ", "_"]
files:
selector: td.torrent_table_files
date:
selector: td.torrent_table_dateAdded
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
size:
selector: td.torrent_table_size
grabs:
selector: td.torrent_table_snatched
filters:
- name: regexp
args: (\d+)
seeders:
selector: td.torrent_table_seeders
leechers:
selector: td.torrent_table_leechers
downloadvolumefactor:
case:
":root div#notice_ratioBoostingMadness": 0
img[src$="images/freedownload.gif"]: 0
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 1.0
minimumseedtime:
# 5 day (as seconds = 5 x 24 x 60 x 60)
text: 432000 # 3 days for torrents under 20GB
# engine n/a

View File

@@ -47,19 +47,12 @@ login:
vb_login_password: "{{ .Config.password }}"
cookieuser: 1
do: login
error:
- selector: div.restore:contains("invalid username or password")
test:
path: torrents.php
selector: a[href*="logout.php"]
search:
paths:
- path: torrents.php
inputs:
sort: "{{ .Config.sort }}"
order: "{{ .Config.order }}"
query: "{{ .Keywords }}"
- path: "torrents.php?sort={{ .Config.sort }}&order={{ .Config.order}}&query={{ .Keywords }}"
rows:
selector: table[width='100%'][align='center']:not([class]) > tbody > tr

View File

@@ -84,10 +84,6 @@ settings:
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "You will be immediately banned if you have not logged in for more than 6 weeks."
login:
path: takelogin.php

View File

@@ -1,209 +0,0 @@
---
id: agsvpt
name: AGSVPT
description: "AGSVPT (Arctic Global Seed Vault) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
requestDelay: 2
links:
- https://www.agsvpt.com/
- https://abroad.agsvpt.com/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movie(电影)", default: true}
- {id: 402, cat: TV, desc: "TV Series(电视剧)", default: true}
- {id: 403, cat: TV, desc: "TV Shows(综艺)", default: true}
- {id: 405, cat: TV/Anime, desc: "Anime(动漫)", default: true}
- {id: 404, cat: TV/Documentary, desc: "Documentaries(纪录片)", default: true}
- {id: 419, cat: TV, desc: "Playlet短剧", default: true}
- {id: 411, cat: Audio, desc: "Music(音乐)", default: true}
- {id: 406, cat: Audio/Video, desc: "MV(演唱", default: true}
- {id: 407, cat: TV/Sport, desc: "Sports(体育)", default: true}
- {id: 408, cat: Audio/Audiobook, desc: "Audio(音频)", default: true}
# special
- {id: 413, cat: PC/Games, desc: "Game(游戏)", default: false}
- {id: 416, cat: Books/Comics, desc: "Comic(漫画)", default: false}
- {id: 412, cat: PC/0day, desc: "Software(软件)", default: false}
- {id: 418, cat: Other, desc: "Picture(图片)", default: false}
- {id: 415, cat: Books/EBook, desc: "E-Book(电子书/有声书)", default: false}
- {id: 417, cat: Other, desc: "Education(学习资料)", default: false}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: 2facode
type: text
label: 2FA code
- name: info_2fa
type: info
label: "About 2FA code"
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the AGSVPT Web Site. Otherwise just leave it empty."
- 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
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>每页种子数:每页显示</b><i>(Torrents per page:)</i> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Account retention rules:<ol><li>Elite User and above will not have their account deleted after parking (in the Control Panel)</li><li>Users who do not log in for 400 consecutive days will be disabled.</li><li>Users with a parked account will be disabled if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e., uploading/downloading data is 0) within 7 days of new registration will be disabled</li><li>Users with no traffic (i.e. both upload/download data is 0) who do not log in for 30 consecutive days will be disabled.</li></ol>"
login:
path: takelogin.php
method: post
inputs:
secret: ""
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
two_step_code: "{{ .Config.2facode }}"
logout: ""
securelogin: ""
ssl: yes
trackerssl: yes
error:
- selector: td.embedded:has(h2:contains("失败"))
message:
selector: td.text
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
categories: [401, 402, 403, 405, 404, 419, 411, 406, 407, 408]
- path: special.php
categories: [413, 416, 412, 418, 415, 417]
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.DoubanID }} {{ else }}{{ .Keywords }}{{ end }}{{ if .Query.DoubanID }}{{ .Query.DoubanID }}{{ else }}{{ end }}"
# 0 incldead, 1 active, 2 dead
incldead: 0
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
# 0 title, 1 descr, 3 uploader, 4 imdburl
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if .Query.DoubanID }}1{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.DoubanID }}{{ else }}0{{ end }}"
# 0 AND, 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
notnewword: 1
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
title_default:
selector: a[href^="details.php?id="]
title:
selector: a[title][href^="details.php?id="]
attribute: title
optional: true
default: "{{ .Result.title_default }}"
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
poster:
selector: img[data-src]
attribute: data-src
date_elapsed:
# time type: time elapsed (default)
selector: td.rowfollow:nth-child(4) > span[title]
attribute: title
optional: true
filters:
- name: append
args: " +08:00" # CST
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
date_added:
# time added
selector: td.rowfollow:nth-child(4):not(:has(span))
optional: true
filters:
- name: append
args: " +08:00" # CST
- name: dateparse
args: "yyyy-MM-ddHH:mm:ss zzz"
date:
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
size:
selector: td.rowfollow:nth-child(5)
seeders:
selector: td.rowfollow:nth-child(6)
leechers:
selector: td.rowfollow:nth-child(7)
grabs:
selector: td.rowfollow:nth-child(8)
downloadvolumefactor:
case:
img.pro_free: 0
img.pro_free2up: 0
img.pro_50pctdown: 0.5
img.pro_50pctdown2up: 0.5
img.pro_30pctdown: 0.3
"*": 1
uploadvolumefactor:
case:
img.pro_50pctdown2up: 2
img.pro_free2up: 2
img.pro_2up: 2
"*": 1
minimumratio:
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
description_verified:
case:
span[title="通过"]: "Verified:"
span[title="未审"]: "Unverified:"
span[title="拒绝"]: "Banned:"
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
filters:
- name: prepend
args: "{{ .Result.description_verified }} "
# NexusPHP v1.8.12 2024-04-05

View File

@@ -35,8 +35,10 @@ settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -59,13 +61,12 @@ settings:
asc: asc
login:
# using cookie method because login page returns 0 bytes with a cookie flog=6
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: /
selector: a[href^="torrents-details.php?id="]
selector: a[href="account-logout.php"]
search:
paths:
@@ -73,7 +74,7 @@ search:
- path: get_ttable.php
inputs:
pcat: "Show+All"
scat: "{{ join .Categories \",\" }}"
$raw: "scat={{ range .Categories }}{{.}},{{end}}&"
subbed: ""
fl: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
resd: ""

View File

@@ -14,6 +14,12 @@ caps:
- {id: 9, cat: TV/Sport, desc: "Sport"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: Console, desc: "Games"}
- {id: 10, cat: PC, desc: "Software & Apps"}
- {id: 11, cat: Books, desc: "Ebooks & Magazines"}
- {id: 14, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 15, cat: Other, desc: "Education"}
- {id: 6, cat: XXX, desc: "XXX"}
modes:
search: [q]
@@ -29,15 +35,11 @@ settings:
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://aither.cc/\" target=\"_blank\">Aither</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
default: "Find or Generate a new API Token by accessing your <a href=\"https://aither.cc/\" target=\"_blank\">Aither</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
@@ -54,33 +56,28 @@ settings:
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "You must log in to the Aither web site with your browser once every 120 days to prevent your account from getting disabled."
login:
path: /api/torrents
method: get
inputs:
api_token: "{{ .Config.apikey }}"
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://github.com/HDInnovations/UNIT3D-Community-Edition/wiki/Torrent-API-(UNIT3D-v8.x.x)
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php#L476
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
- path: "/api/torrents/filter"
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
api_token: "{{ .Config.apikey }}"
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
@@ -92,6 +89,7 @@ search:
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
keywordsfilters:
- name: re_replace
@@ -100,19 +98,14 @@ search:
rows:
selector: data
attribute: attributes
count:
selector: meta.total
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
selector: name
details:
selector: details_link
download:
@@ -141,6 +134,8 @@ search:
args: [" & ", "_&_"]
description:
text: "{{ .Result.genre }}"
files:
selector: num_file
seeders:
selector: seeders
leechers:
@@ -152,17 +147,12 @@ search:
selector: created_at
filters:
- name: append
args: " +00:00" # UTC
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
downloadvolumefactor:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
@@ -172,20 +162,16 @@ search:
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
uploadvolumefactor:
# api returns 0=false, 1=true
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
0: 1 # normal
1: 2 # double
# global MR is 0.4 but torrents must be seeded for 5 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 5 days (as seconds = 5 x 24 x 60 x 60)
# 5 days (as seconds = 3 x 24 x 60 x 60)
text: 432000
# json UNIT3D 8.3.3
# json UNIT3D 6.5.0

View File

@@ -14,60 +14,81 @@ legacylinks:
caps:
categorymappings:
- {id: 75, cat: XXX, desc: "Adultos: Hentai"}
- {id: 107, cat: XXX, desc: "Adultos: Gay"}
- {id: 75, cat: XXX, desc: "Adultos: Hentai"}
- {id: 108, cat: XXX, desc: "Adultos: Transex/Female"}
- {id: 74, cat: XXX, desc: "Adultos: XXX"}
- {id: 146, cat: XXX, desc: "Adultos: OnlyFans"}
- {id: 69, cat: TV/Anime, desc: "Anime: Anime"}
- {id: 116, cat: TV/Anime, desc: "Anime: Filmes"}
- {id: 118, cat: TV/Anime, desc: "Anime: Séries"}
- {id: 21, cat: PC/0day, desc: "Aplicativos: Windows"}
- {id: 28, cat: PC/Mobile-iOS, desc: "Aplicativos: iPod"}
- {id: 23, cat: PC/Mobile-Android, desc: "Aplicativos: Android"}
- {id: 27, cat: PC/Mobile-iOS, desc: "Aplicativos: iPad"}
- {id: 26, cat: PC/Mobile-iOS, desc: "Aplicativos: iPhone"}
- {id: 28, cat: PC/Mobile-iOS, desc: "Aplicativos: iPod"}
- {id: 25, cat: PC, desc: "Aplicativos: Linux"}
- {id: 23, cat: PC/Mobile-Android, desc: "Aplicativos: Android"}
- {id: 22, cat: PC/Mac, desc: "Aplicativos: Mac"}
- {id: 73, cat: Books, desc: "Cursos: Video Aula"}
- {id: 72, cat: Books, desc: "Cursos: Apostila"}
- {id: 71, cat: Books, desc: "Cursos: Cursos"}
- {id: 67, cat: Books, desc: "Ebook: Livros"}
- {id: 112, cat: Books, desc: "Ebook: HQs"}
- {id: 147, cat: Books, desc: "Ebook: Mangas"}
- {id: 21, cat: PC/0day, desc: "Aplicativos: Windows"}
- {id: 72, cat: Books, desc: "Apostila: Apostila"}
- {id: 71, cat: Books, desc: "Apostila: Cursos"}
- {id: 121, cat: Audio/Audiobook, desc: "Ebook: Audio-book"}
- {id: 112, cat: Books, desc: "Ebook: HQs"}
- {id: 67, cat: Books, desc: "Ebook: Livros"}
- {id: 68, cat: Books, desc: "Ebook: Revistas"}
- {id: 119, cat: Movies, desc: "Filmes:"}
- {id: 70, cat: XXX, desc: "Fotos: Revistas, Livros e Fotos"}
- {id: 51, cat: Console/PS3, desc: "Jogos: Ps3"}
- {id: 54, cat: Console/XBox 360, desc: "Jogos: Xbox360"}
- {id: 109, cat: Console, desc: "Jogos: Emulação"}
- {id: 110, cat: Console, desc: "Jogos: Nintendo Switch"}
- {id: 52, cat: Console, desc: "Jogos: Dreamcast"}
- {id: 50, cat: Console, desc: "Jogos: Ps2"}
- {id: 49, cat: Console, desc: "Jogos: Ps1"}
- {id: 48, cat: PC/Mac, desc: "Jogos: Mac"}
- {id: 55, cat: Console/Wii, desc: "Jogos: Wii"}
- {id: 82, cat: Console/PSP, desc: "Jogos: PSP"}
- {id: 47, cat: PC/Games, desc: "Jogos: Pc"}
- {id: 61, cat: Console, desc: "Jogos: Emuladores e Roms"}
- {id: 58, cat: Console/NDS, desc: "Jogos: Nintendo DS"}
- {id: 70, cat: XXX, desc: "Fotos: XXX"}
- {id: 57, cat: Console, desc: "Jogos: Android"}
- {id: 52, cat: Console, desc: "Jogos: Dreamcast"}
- {id: 109, cat: Console, desc: "Jogos: Emulação"}
- {id: 61, cat: Console, desc: "Jogos: Emuladores e Roms"}
- {id: 48, cat: PC/Mac, desc: "Jogos: Mac"}
- {id: 58, cat: Console/NDS, desc: "Jogos: Nintendo DS"}
- {id: 110, cat: Console, desc: "Jogos: Nintendo Switch"}
- {id: 47, cat: PC/Games, desc: "Jogos: Pc"}
- {id: 49, cat: Console, desc: "Jogos: Ps1"}
- {id: 50, cat: Console, desc: "Jogos: Ps2"}
- {id: 51, cat: Console/PS3, desc: "Jogos: Ps3"}
- {id: 79, cat: Console/PS4, desc: "Jogos: Ps4"}
- {id: 82, cat: Console/PSP, desc: "Jogos: PSP"}
- {id: 55, cat: Console/Wii, desc: "Jogos: Wii"}
- {id: 54, cat: Console/XBox 360, desc: "Jogos: Xbox360"}
- {id: 56, cat: Console/XBox, desc: "Jogos: Xbox"}
- {id: 78, cat: Console/XBox One, desc: "Jogos: Xbox One"}
- {id: 79, cat: Console/PS4, desc: "Jogos: Ps4"}
- {id: 129, cat: Other, desc: "Outros: Fonts"}
- {id: 128, cat: Other, desc: "Outros: Scripts"}
- {id: 29, cat: Audio, desc: "Musica: Axé"}
- {id: 38, cat: Audio, desc: "Musica: Blues"}
- {id: 39, cat: Audio, desc: "Musica: Dance"}
- {id: 40, cat: Audio, desc: "Musica: Discografia"}
- {id: 43, cat: Audio, desc: "Musica: Dubstep"}
- {id: 30, cat: Audio, desc: "Musica: Eletronica"}
- {id: 41, cat: Audio, desc: "Musica: Erudita"}
- {id: 42, cat: Audio, desc: "Musica: Forró"}
- {id: 31, cat: Audio, desc: "Musica: Funk"}
- {id: 84, cat: Audio, desc: "Musica: Game (OST)"}
- {id: 83, cat: Audio, desc: "Musica: Gospel"}
- {id: 37, cat: Audio, desc: "Musica: Hard Rock"}
- {id: 33, cat: Audio, desc: "Musica: Hip-Hop"}
- {id: 114, cat: Audio, desc: "Musica: MPB"}
- {id: 77, cat: Audio, desc: "Musica: Outros"}
- {id: 32, cat: Audio, desc: "Musica: Pagode"}
- {id: 115, cat: Audio, desc: "Musica: POP"}
- {id: 34, cat: Audio, desc: "Musica: Rap"}
- {id: 76, cat: Audio, desc: "Musica: Reggae"}
- {id: 36, cat: Audio, desc: "Musica: Rock"}
- {id: 45, cat: Audio, desc: "Musica: Samba"}
- {id: 46, cat: Audio, desc: "Musica: Sertanejo"}
- {id: 120, cat: TV, desc: "Series:"}
- {id: 65, cat: TV, desc: "Shows: Show"}
- {id: 63, cat: TV, desc: "Tv: Aberta"}
- {id: 62, cat: TV/Sport, desc: "Tv: Esportes"}
- {id: 64, cat: TV, desc: "Tv: Fechada"}
- {id: 73, cat: TV, desc: "Video Aula: Video Aula"}
- {id: 127, cat: Other, desc: "Outros: Add-ons"}
- {id: 126, cat: Other, desc: "Outros: Extensões"}
- {id: 129, cat: Other, desc: "Outros: Fonts"}
- {id: 130, cat: Other, desc: "Outros: MOD"}
- {id: 125, cat: Other, desc: "Outros: Pack de Imagens"}
- {id: 124, cat: Other, desc: "Outros: Vetores"}
- {id: 122, cat: Other, desc: "Outros: Plug-ins"}
- {id: 126, cat: Other, desc: "Outros: Extensões"}
- {id: 120, cat: TV, desc: "Series:"}
- {id: 64, cat: TV, desc: "Tv: Fechada"}
- {id: 62, cat: TV/Sport, desc: "Tv: Esportes"}
- {id: 63, cat: TV, desc: "Tv: Aberta"}
- {id: 128, cat: Other, desc: "Outros: Scripts"}
- {id: 124, cat: Other, desc: "Outros: Vetores"}
modes:
search: [q]
@@ -107,10 +128,6 @@ settings:
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Inactive accounts, that is, without access for 90 days (3 months), will be automatically deleted by the system; with no possibility of reactivation."
login:
path: account-login.php
@@ -158,23 +175,6 @@ search:
selector: "div#fancy-list-group ul.list-group li.list-group-item{{ if .Config.freeleech }}:has(span.badge-success:contains(\"FREE\")){{ else }}{{ end }}"
fields:
category_default:
# tv and movie just have an image :-b
selector: div.list-group-item-addon img
attribute: src
optional: true
case:
"[src$=\"/filmes2.fw.png\"]": 119
"[src$=\"/seriados.fw.png\"]": 120
category:
# while the rest have a href with a cat number \o/
selector: a[href*="cat="]
attribute: href
optional: true
default: "{{ .Result.category_default }}"
filters:
- name: querystring
args: cat
_quality:
selector: div.list-group-item-content p.m-0 span.badge-primary:contains("1080p"), div.list-group-item-content p.m-0 span.badge-primary:contains("720p"), div.list-group-item-content p.m-0 span.badge-primary:contains("4k")
optional: true
@@ -190,6 +190,10 @@ search:
_language:
selector: div.list-group-item-content p.m-0 span.badge-primary[style$="#b6249d;"]
optional: true
genre:
selector: div.list-group-item-content p.m-0 span.badge-primary[style$="#1c38c2;"]
description:
text: "{{ .Result.genre }}"
title:
selector: a[href*="torrents-details.php?id="], a[href*="details-misc.php?id="]
filters:
@@ -216,6 +220,86 @@ search:
download:
selector: a[href*="download.php?id="]
attribute: href
category:
selector: div.list-group-item-addon img
attribute: src
case:
# unfortunately the site does not have category numbers on the results page, just a image which can apply to both movies and tv.
# therefore I've order the list to favour movies.
# also, not all images have been verified as the site has many empty categories. their image names have been extrapolated from the cat desc.
"[src$=\"/Adultos.fw.png\"]": 74
"[src$=\"/Gay.jpeg\"]": 107
"[src$=\"/Trans.jpeg\"]": 108
"[src$=\"/Hentai.png\"]": 75
"[src$=\"/Anime2.fw.png\"]": 69
"[src$=\"/aplicativos.fw.png\"]": 21
"[src$=\"/Mac.png\"]": 22
"[src$=\"/Android.png\"]": 23
"[src$=\"/Linux.png\"]": 25
"[src$=\"/iPhone.png\"]": 26
"[src$=\"/iPad.png\"]": 27
"[src$=\"/iPod.png\"]": 28
"[src$=\"/Cursos.png\"]": 71
"[src$=\"/Apostila.png\"]": 72
"[src$=\"/E-books.png\"]": 67
"[src$=\"/Revista.png\"]": 68
"[src$=\"/HQ.png\"]": 112
"[src$=\"/filmes2.fw.png\"]": 119
"[src$=\"/Revistas-XXX.png\"]": 70
"[src$=\"/PS4.png\"]": 79
"[src$=\"/Jogos-PC.png\"]": 47
"[src$=\"/Emulador.png\"]": 61
"[src$=\"/Emulacao.png\"]": 109
"[src$=\"/Jogos-Mac.png\"]": 48
"[src$=\"/Jogos-PS1.png\"]": 49
"[src$=\"/Jogos-PS2.png\"]": 50
"[src$=\"/Jogos-PS3.png\"]": 51
"[src$=\"/Jogos-Dreamcast.png\"]": 52
"[src$=\"/Jogos-Xbox360.png\"]": 54
"[src$=\"/Jogos-Xbox.png\"]": 56
"[src$=\"/Jogos-Wii.png\"]": 55
"[src$=\"/Jogos-DS.png\"]": 58
"[src$=\"/jogosandroid.png\"]": 57
"[src$=\"/PSP.png\"]": 82
"[src$=\"/Jogos-NS.png\"]": 110
"[src$=\"/Jogos-XboxOne.png\"]": 78
"[src$=\"/Axe.png\"]": 29
"[src$=\"/Eletronica.png\"]": 30
"[src$=\"/Funk.png\"]": 31
"[src$=\"/Pagode.png\"]": 32
"[src$=\"/HIP_HOP.png\"]": 33
"[src$=\"/Rap.png\"]": 34
"[src$=\"/Rock.png\"]": 36
"[src$=\"/Hard-Rock.png\"]": 37
"[src$=\"/Blues.png\"]": 38
"[src$=\"/Dance.png\"]": 39
"[src$=\"/Discografia.png\"]": 40
"[src$=\"/Erudita.png\"]": 41
"[src$=\"/Forro.png\"]": 42
"[src$=\"/Dubstep.png\"]": 43
"[src$=\"/Sertanejo.png\"]": 46
"[src$=\"/Samba.png\"]": 45
"[src$=\"/Musica-Outros.png\"]": 77
"[src$=\"/Reggae.png\"]": 76
"[src$=\"/Gospel.png\"]": 83
"[src$=\"/POP.png\"]": 115
"[src$=\"/MPB.png\"]": 114
"[src$=\"/OST.png\"]": 84
"[src$=\"/seriados.fw.png\"]": 120
"[src$=\"/show.fw.png\"]": 65
"[src$=\"/Aberta.png\"]": 63
"[src$=\"/Esporte.png\"]": 62
"[src$=\"/Fechada.png\"]": 64
"[src$=\"/video aula4.fw.png\"]": 73
"[src$=\"/Add-ons.png\"]": 127
"[src$=\"/Extensões.png\"]": 126
"[src$=\"/Fonts.png\"]": 129
"[src$=\"/MOD.png\"]": 130
"[src$=\"/Imagens.png\"]": 125
"[src$=\"/Plug-ins.png\"]": 122
"[src$=\"/Scripts.png\"]": 128
"[src$=\"/Vetores.png\"]": 124
"[src$=\"/outros2.png\"]": 130
date:
selector: p:contains("Lançado:")
# auto adjusted by site account profile
@@ -236,10 +320,6 @@ search:
selector: div.list-group-item-controls a:nth-child(2)
grabs:
selector: div.list-group-item-controls a:nth-child(3)
genre:
selector: div.list-group-item-content p.m-0 span.badge-primary[style$="#1c38c2;"]
description:
text: "{{ .Result.genre }}"
downloadvolumefactor:
case:
"span.badge-success:contains(\"FREE\")": 0

View File

@@ -23,10 +23,6 @@ settings:
type: checkbox
label: Strip Cyrillic Letters
default: false
- name: sonarr_compatibility
type: checkbox
label: Improve Sonarr compatibility by trying to better parse Season information in release titles.
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.
@@ -35,7 +31,7 @@ settings:
search:
paths:
# https://github.com/anilibria/docs/blob/master/api_v3.md
- path: "https://api.anilibria.tv/v3/title/{{ if .Keywords }}search{{ else }}updates{{ end }}"
- path: "https://api.anilibria.tv/v3/{{ if .Keywords }}searchTitles{{ else }}getUpdates{{ end }}"
response:
type: json
@@ -64,58 +60,6 @@ search:
selector: ..names.ru
title_en:
selector: ..names.en
title_en_parsed:
selector: ..names.en
filters:
- name: re_replace
args: ["(?i)\\bPart\\s*1\\b", "Part One"]
- name: re_replace
args: ["(?i)\\bPart\\s*2\\b", "Part Two"]
- name: re_replace
args: ["(?i)\\bPart\\s*3\\b", "Part Three"]
- name: re_replace
args: ["(?i)\\bPart\\s*4\\b", "Part Four"]
- name: re_replace
args: ["(?i)\\bPart\\s*5\\b", "Part Five"]
- name: re_replace
args: ["(?i)\\bPart\\s*6\\b", "Part Six"]
- name: re_replace
args: ["(?i)\\bPart\\s*7\\b", "Part Seven"]
- name: re_replace
args: ["(?i)\\bPart\\s*8\\b", "Part Eight"]
- name: re_replace
args: ["(?i)\\bPart\\s*9\\b", "Part Nine"]
- name: re_replace
args: ["(?i)\\bseason\\s*(\\d+)\\b", ""]
- name: re_replace
args: ["(?i)\\b(\\d+)(st|nd|rd|th)\\s*season[\\s\\.]*", ""]
- name: re_replace
args: ["(?i)\\b(\\d+)\\s*season\\b[\\s\\.]*", ""]
- name: re_replace
args: ["(?i)\\bseason\\s*([IVXLCDM]+)\\b", ""]
- name: re_replace
args: ["\\bI$", ""]
- name: re_replace
args: ["\\bII$", ""]
- name: re_replace
args: ["\\bIII$", ""]
- name: re_replace
args: ["\\bIV$", ""]
- name: re_replace
args: ["\\bV$", ""]
- name: re_replace
args: ["\\bVI$", ""]
- name: re_replace
args: ["\\bVII$", ""]
- name: re_replace
args: ["\\bVIII$", ""]
- name: re_replace
args: ["\\bIX$", ""]
- name: re_replace
args: ["\\bX$", ""]
- name: re_replace
args: ["(?i)\\b(\\d+)(?:st|nd|rd|th)?\\b", ""]
- name: trim
title_alternative:
selector: ..names.alternative
optional: true
@@ -128,151 +72,28 @@ search:
args: ["^[\\s&,\\.!\\?\\+\\-_\\|\\/':]+", ""]
- name: re_replace
args: ["^OVA$", ""]
_season_number_en:
selector: ..names.en
filters:
- name: re_replace
args: ["(?i)\\bPart\\s*\\d+\\s*$", ""]
- name: re_replace
args: ["(?i)(^.*\\bseason\\s*(\\d+)\\b\\s*$)", "S$2"]
- name: re_replace
args: ["(?i)(^.*\\b(\\d+)(st|nd|rd|th)\\s*season\\b.*$)", "S$2"]
- name: re_replace
args: ["(?i)(^.*\\b(\\d+)\\s*season\\b.*$)", "S$2"]
- name: re_replace
args: ["(?i)(^.*\\bseason\\s*([IVXLCDM]+)\\b\\s*$)", "$1"]
- name: re_replace
args: ["(^.*X$)", "S10"]
- name: re_replace
args: ["(^.*IX$)", "S9"]
- name: re_replace
args: ["(^.*VIII$)", "S8"]
- name: re_replace
args: ["(^.*VII$)", "S7"]
- name: re_replace
args: ["(^.*VI$)", "S6"]
- name: re_replace
args: ["(^.*V$)", "S5"]
- name: re_replace
args: ["(^.*IV$)", "S4"]
- name: re_replace
args: ["(^.*III$)", "S3"]
- name: re_replace
args: ["(^.*II$)", "S2"]
- name: re_replace
args: ["(^.*I$)", "S1"]
- name: re_replace
args: ["(?i)(^.*\\b(\\d+)(?:st|nd|rd|th)?\\b\\s*$)", "S$2"]
- name: re_replace
args: ["(?i)^(?!S\\d+).*", ""]
_season_number_alternative:
selector: ..names.alternative
optional: true
filters:
- name: re_replace
args: ["(?i)\\bPart\\s*\\d+\\s*$", ""]
- name: re_replace
args: ["(?i)(^.*\\bseason\\s*(\\d+)\\b\\s*$)", "S$2"]
- name: re_replace
args: ["(?i)(^.*\\b(\\d+)(st|nd|rd|th)\\s*season\\b\\s*$)", "S$2"]
- name: re_replace
args: ["(?i)(^.*\\b(\\d+)\\s*season\\b\\s*$)", "S$2"]
- name: re_replace
args: ["(?i)(^.*\\bseason\\s*([IVXLCDM]+)\\b\\s*$)", "$1"]
- name: re_replace
args: ["(^.*X$)", "S10"]
- name: re_replace
args: ["(^.*IX$)", "S9"]
- name: re_replace
args: ["(^.*VIII$)", "S8"]
- name: re_replace
args: ["(^.*VII$)", "S7"]
- name: re_replace
args: ["(^.*VI$)", "S6"]
- name: re_replace
args: ["(^.*V$)", "S5"]
- name: re_replace
args: ["(^.*IV$)", "S4"]
- name: re_replace
args: ["(^.*III$)", "S3"]
- name: re_replace
args: ["(^.*II$)", "S2"]
- name: re_replace
args: ["(^.*I$)", "S1"]
- name: re_replace
args: ["(?i)(^.*\\b(\\d+)(?:st|nd|rd|th)?\\b\\s*$)", "S$2"]
- name: re_replace
args: ["(?i)^(?!S\\d+).*", ""]
_season_number:
text: "{{ .Result._season_number_en }}"
filters:
- name: append
args: "{{ .Result._season_number_alternative }}"
- name: re_replace
args: ["^S1S1$", "S1"]
- name: re_replace
args: ["^S1(.+)$", "$1"]
- name: re_replace
args: ["^(S\\d+).*$", "$1"]
- name: re_replace
args: ["^$", "S1"]
year:
selector: ..season.year
_quality:
selector: quality.string
_quality_type:
selector: quality.type
_quality_resolution:
selector: quality.resolution
_quality_encoder:
selector: quality.encoder
filters:
- name: re_replace
args: ["(?i)^h", "x"]
title_parsed:
text: "{{ if .Config.stripcyrillic }}{{ else }}{{ .Result.title_ru }} / {{ end }}{{ .Result.title_en_parsed }} {{ .Result._season_number}}E{{ .Result._episodes }} [{{ .Result._quality_type }} {{ .Result._quality_resolution }} {{ .Result._quality_encoder }}]"
filters:
- name: re_replace
args: ["\\bS\\d+EФильм\\b", "({{ .Result.year }}) MOVIE"]
- name: re_replace
args: ["\\bS\\d+EOVA\\b", "({{ .Result.year }}) OVA"]
- name: re_replace
args: ["\\bS\\d+EONA\\b", "({{ .Result.year }}) ONA"]
- name: re_replace
args: ["\\bS\\d+EMovie\\b", "({{ .Result.year }}) MOVIE"]
- name: re_replace
args: ["\\bS\\d+EП/м фильм\\b", "({{ .Result.year }}) MOVIE"]
- name: re_replace
args: ["\\bS\\d+EРекап\\b", "({{ .Result.year }}) RECAP"]
- name: re_replace
args: ["\\bS\\d+ETV-Special\\b", "({{ .Result.year }}) SPECIAL"]
- name: append
args: "{{ if .Config.addrussiantotitle }} - RUS{{ else }}{{ end }}"
title_original:
title:
text: "{{ if .Config.stripcyrillic }}{{ else }}{{ .Result.title_ru }} / {{ end }}{{ .Result.title_en }}{{ if .Result.title_alternative }} / AKA {{ .Result.title_alternative }}{{ else }}{{ end }} ({{ .Result.year }}) [{{ .Result._quality }}]{{ if .Result._episodes }} - E{{ .Result._episodes }}{{ else }}{{ end }}"
filters:
- name: re_replace
args: [" - \\bEФильм\\b", " - MOVIE"]
- name: re_replace
args: [" - \\bEMovie\\b", " - MOVIE"]
- name: re_replace
args: [" - \\bEП/м фильм\\b", " - MOVIE"]
- name: re_replace
args: [" - \\bEOVA\\b", " - OVA"]
- name: re_replace
args: [" - \\bEONA\\b", " - ONA"]
- name: append
args: "{{ if .Config.addrussiantotitle }} - RUS{{ else }}{{ end }}"
title:
text: "{{ if .Config.sonarr_compatibility }}{{ .Result.title_parsed }}{{ else }}{{ .Result.title_original }}{{ end }}"
_code:
selector: ..code
details:
text: "{{ .Config.sitelink }}release/{{ .Result._code }}.html"
download_url:
selector: url
download:
text: "{{ .Config.sitelink }}{{ .Result.download_url }}"
selector: url
filters:
- name: prepend
args: "{{ .Config.sitelink }}"
magnet:
selector: magnet
poster:

View File

@@ -0,0 +1,145 @@
---
id: anime-free
name: Anime-Free
description: "Anime-Free is a RUSSIAN Semi-Private Torrent Tracker for Hentai manga, eroge and flash porn games"
language: ru-RU
type: semi-private
encoding: windows-1251
testlinktorrent: false
links:
- https://anime-free.one/
legacylinks:
- https://anime-free.net/ # redirects to *.biz
- https://anime-free.biz/
- http://anime-free.one/
caps:
categorymappings:
- {id: 14, cat: TV/Anime, desc: "Аниме хентай"}
- {id: 47, cat: TV/Anime, desc: " Хентай на Русском языке"}
- {id: 48, cat: TV/Anime, desc: " Хентай Без русского перевода"}
- {id: 45, cat: TV/Anime, desc: " Хентай Без цензуры"}
- {id: 46, cat: TV/Anime, desc: " Хентай с цензурой"}
- {id: 54, cat: Other, desc: "Косплей"}
- {id: 51, cat: TV/Anime, desc: "[3D] хентай и анимация"}
- {id: 5, cat: Books/Comics, desc: "Хентай манга"}
- {id: 56, cat: Console, desc: "Игры"}
- {id: 10, cat: Console, desc: " Эротические и хентай игры"}
- {id: 55, cat: Console, desc: " 3DCG/3D-Animation игры"}
- {id: 57, cat: Console, desc: " Игры на русском языке"}
- {id: 58, cat: Other, desc: " Онлайн игры"}
- {id: 52, cat: Books/Comics, desc: "Порно комиксы"}
- {id: 49, cat: XXX/ImageSet, desc: "Хентай картинки, иллюстрации, обои и Art "}
- {id: 43, cat: TV/Anime, desc: "Эччи (Легкая эротика)"}
- {id: 4, cat: TV/Anime, desc: "Аниме Хентай"}
- {id: 50, cat: Other, desc: "Хентай Онлайн"}
modes:
search: [q]
settings:
- name: email
type: text
label: Email
- name: password
type: password
label: Password
login:
path: /
method: form
form: form.login-form
inputs:
login_name: "{{ .Config.email }}"
login_password: "{{ .Config.password }}"
error:
- selector: div.berrors
test:
path: /
selector: a[href$="/index.php?action=logout"]
download:
selectors:
- selector: a[href*="/engine/download.php?id="]
attribute: href
search:
# https://anime-free.biz/index.php?do=search&subaction=search&search_start=0&full_search=1&result_from=1&story=slaves+to+passion&all_word_seach=1&titleonly=3&searchuser=&replyless=0&replylimit=0&searchdate=0&beforeafter=after&sortby=date&resorder=desc&showposts=0&catlist[]=0
paths:
- path: index.php
inputs:
$raw: "{{ range .Categories }}catlist[]={{.}}&{{end}}"
do: search
subaction: search
search_start: 0
full_search: 1
result_from: 1
showposts: 0
all_word_seach: 1
# 0 article, 1 comments, 2 static pages, 3 article titles
titleonly: "{{ if .Keywords }}3{{ else }}0{{ end }}"
searchdate: 0
searchuser: ""
story: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
sortby: date
resorder: desc
rows:
selector: article
fields:
category:
selector: a[href*="category="]
attribute: href
optional: true
default: 54
case:
a[href$="3d_hentai"]: 51
a[href$="3dcg_game"]: 55
a[href$="censored"]: 46
a[href$="comics"]: 52
a[href$="cosplay"]: 54
a[href$="etty"]: 43
a[href$="h-game"]: 10
a[href$="h-online"]: 50
a[href$="hentai"]: 4
a[href$="hentai_games"]: 56
a[href$="hentai_manga"]: 5
a[href$="hentai_raznoe"]: 49
a[href$="hentai_rus"]: 47
a[href$="online_games"]: 58
a[href$="original_hentai"]: 48
a[href$="rus-game"]: 57
a[href$="uncensored"]: 45
title:
selector: h2.title a
details:
selector: h2.title a
attribute: href
download:
selector: h2.title a
attribute: href
poster:
selector: img.entry-image
attribute: src
description:
selector: div[itemprop="description"]
optional: true
date:
selector: li:has(img#adddate)
filters:
- name: dateparse
args: "dd-MM-yyyy, HH:mm"
seeders:
text: 1
leechers:
text: 1
size:
selector: b.file_size
optional: true
default: 0 B
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -1,196 +0,0 @@
---
id: animelovers-api
name: AnimeLovers (API)
description: "AnimeLovers is a Private tracker for ANIME / MANGA / DOUNGUA / MANHWA"
language: en-US
type: private
encoding: UTF-8
links:
- https://animelovers.club/
caps:
categorymappings:
- {id: 1, cat: Movies/Other, desc: "Anime Movies"}
- {id: 2, cat: TV/Anime, desc: "Anime Series"}
- {id: 3, cat: TV/Anime, desc: "Anime OVA"}
- {id: 11, cat: TV/Anime, desc: "Donghua Anime"}
- {id: 9, cat: XXX, desc: "Doujinshi"}
- {id: 4, cat: Books/Comics, desc: "Manhua/Manhwa"}
- {id: 8, cat: Books/Comics, desc: "Manga"}
- {id: 7, cat: XXX, desc: "Hentai"}
- {id: 10, cat: Audio/Lossless, desc: "Lossless Music"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://animelovers.club/\" target=\"_blank\">AnimeLovers</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: 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: "In order to not be disabled, you are required to login to AnimeLovers at least once every 90 days."
login:
path: /api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://github.com/HDInnovations/UNIT3D-Community-Edition/wiki/Torrent-API-(UNIT3D-v8.x.x)
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php#L476
- path: "/api/torrents/filter"
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
infohash:
selector: info_hash
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
description:
text: "{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 7 days (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 8.3.4

View File

@@ -1,160 +0,0 @@
---
id: animetorrentsro
name: AnimeTorrents.ro
description: "AnimeTorrents.ro (Anime Torrents Romania) is a ROMANIAN Private Torrent Tracker for ANIME / MANGA"
language: ro-RO
type: private
encoding: UTF-8
links:
- https://animetorrents.ro/
caps:
categorymappings:
- {id: 1, cat: TV/Anime, desc: "ANIME"}
- {id: 1, cat: Movies/Other, desc: "ANIME"} # for Radarr
- {id: 2, cat: Books/Comics, desc: "MANGA"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: cat-id
type: select
label: Category
default: 0
options:
0: All categories
1: Anime
2: Manga
- 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
- name: info
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Inactive accounts under VIP and without parked are automatically deleted after about a year."
login:
path: login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
referer: /
selectorinputs:
csrf_token:
selector: input[name="csrf_token"]
attribute: value
error:
- selector: table.main:contains("esuat")
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
# https://animetorrents.ro/browse.php?search=2023&incldead=1&blah=0&cat=0
- path: browse.php
inputs:
search: "{{ .Keywords }}"
# 0 active, 1 all, 2 dead, 3 free
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
# 0 name, 1 genre
blah: 0
# site does not support multiple cats
cat: "{{ .Config.cat-id }}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
# does not support imdbid search
rows:
selector: td > table > tbody > tr:has(a[href^="download.php/"])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
filters:
- name: re_replace
args: ["^(\\[.+?\\]).(.+)", "$2.$1"]
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php/"]
attribute: href
poster:
selector: a[onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.+?) width"
files:
selector: td:nth-last-child(8)
date:
selector: td:nth-last-child(6)
filters:
- name: append
args: " +00:00" # auto adjusted by site account profile
- name: dateparse
args: "dd-MM-yyyyHH:mm:ss zzz"
size:
selector: td:nth-last-child(5)
grabs:
selector: td:nth-last-child(4)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
downloadvolumefactor:
case:
img[alt="Free"]: 0
"*": 1
uploadvolumefactor:
text: 1
genre:
selector: a[href^="download.php/"]
description:
text: "{{ .Result.genre }}"
minimumratio:
text: 1.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# engine n/a

View File

@@ -0,0 +1,177 @@
---
id: animetracker
name: AnimeTracker (API)
description: "AnimeTracker is a Private Torrent Tracker for HD ANIME / MANGA / HENTAI"
language: en-US
type: private
encoding: UTF-8
links:
- https://animetracker.cc/
caps:
categorymappings:
- {id: 7, cat: TV/Anime, desc: "Series English"}
- {id: 16, cat: TV/Anime, desc: "ongoing"}
- {id: 11, cat: TV/Anime, desc: "Series Non-English"}
- {id: 1, cat: TV/Anime, desc: "Raws"}
- {id: 2, cat: TV/Anime, desc: "OVA"}
- {id: 4, cat: Movies, desc: "Movie"}
- {id: 15, cat: Books/Comics, desc: "Manga"}
- {id: 6, cat: XXX, desc: "Hentai Censored"}
- {id: 14, cat: XXX, desc: "Hentai Uncensored"}
- {id: 9, cat: XXX, desc: "Hentai Manga"}
- {id: 10, cat: Movies, desc: "Live Action"}
- {id: 3, cat: Audio, desc: "Music"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://animetracker.cc/\" target=\"_blank\">AnimeTracker</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: /api/torrents
method: get
inputs:
api_token: "{{ .Config.apikey }}"
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
search:
paths:
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
- path: "/api/torrents/filter"
response:
type: json
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
api_token: "{{ .Config.apikey }}"
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
count:
selector: meta.total
fields:
category:
selector: category_id
title:
selector: name
details:
selector: details_link
download:
selector: download_link
infohash:
selector: info_hash
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: replace
args: [" & ", "_&_"]
description:
text: "{{ .Result.genre }}"
files:
selector: num_file
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
downloadvolumefactor:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
uploadvolumefactor:
# api returns 0=false, 1=true
selector: double_upload
case:
0: 1 # normal
1: 2 # double
# global MR is 0.4 but torrents must be seeded for 5 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 5 day (as seconds = 5 x 24 x 60 x 60)
text: 432000
# json UNIT3D 6.4.0

View File

@@ -28,8 +28,8 @@ caps:
modes:
search: [q]
tv-search: [q, season, ep, tvdbid, tmdbid]
movie-search: [q, tmdbid]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
@@ -40,15 +40,11 @@ settings:
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://animeworld.cx/\" target=\"_blank\">AnimeWorld</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
default: "Find or Generate a new API Token by accessing your <a href=\"https://animeworld.cx/\" target=\"_blank\">AnimeWorld</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
@@ -65,73 +61,58 @@ settings:
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Accounts are set as inactive by the system after 180 days. After 270 days in inactive status, the accounts are automatically deleted from the system."
login:
path: /api/torrents
method: get
inputs:
api_token: "{{ .Config.apikey }}"
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://github.com/HDInnovations/UNIT3D-Community-Edition/wiki/Torrent-API-(UNIT3D-v8.x.x)
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php#L476
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
- path: "/api/torrents/filter"
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
api_token: "{{ .Config.apikey }}"
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
# seasonNumber: "{{ .Query.Season }}" # disabled due to Prowlarr/Indexers#486
# episodeNumber: "{{ .Query.Ep }}" # disabled due to Prowlarr/Indexers#486
# imdbId: "{{ .Query.IMDBIDShort }}" # disabled due to #14776
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
page: 1
rows:
selector: data
attribute: attributes
count:
selector: meta.total
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
categorydesc:
selector: category
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
selector: name
details:
selector: details_link
download:
selector: download_link
infohash:
selector: info_hash
poster:
selector: meta.poster
selector: poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
@@ -141,15 +122,8 @@ search:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: replace
args: [" & ", "_&_"]
description:
text: "{{ .Result.genre }}"
files:
selector: num_file
seeders:
selector: seeders
leechers:
@@ -166,12 +140,7 @@ search:
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
downloadvolumefactor:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
@@ -181,20 +150,13 @@ search:
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
uploadvolumefactor:
# api returns 0=false, 1=true
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 1.0 but torrents must be seeded for 7 days regardless of ratio
# minimumratio:
# text: 1.0
0: 1 # normal
1: 2 # double
minimumseedtime:
# 7 days (as seconds = 7 x 24 x 60 x 60)
# 7 day (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 8.1.3 (custom)
# json UNIT3D 6.0.0

View File

@@ -9,8 +9,10 @@ links:
- https://www.anirena.com/
settings:
- name: info_flaresolverr
type: info_flaresolverr
- name: flaresolverr
type: info
label: FlareSolverr
default: This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href="https://github.com/Jackett/Jackett#configuring-flaresolverr" target="_blank">FlareSolverr</a> to access it.
caps:
categorymappings:
@@ -39,9 +41,7 @@ caps:
search:
paths:
- path: /
inputs:
s: "{{ .Keywords }}"
- path: "{{ if .Keywords }}?s={{ .Keywords}}{{ else }}{{ end }}"
rows:
selector: table tbody tr:has(td.torrents_small_type_data1)

View File

@@ -5,7 +5,9 @@ description: "AniSource is a Public site for HD Anime raws."
language: en-US
type: public
encoding: UTF-8
requestDelay: 5
requestDelay: 2
certificates:
- 7b36f0dc75d3340727b6f74bbdbde46ec59b7037 # expired 12 Feb 2023
links:
- https://asnet.pw/
@@ -25,13 +27,18 @@ search:
- path: /
inputs:
tpage: 2
- path: /
inputs:
tpage: 3
- path: /
inputs:
tpage: 4
- path: /
inputs:
tpage: 5
inputs:
search: "{{ .Keywords }}"
headers:
# site blocks Jackett's User-Agents, so slightly alter it here (e.g. Chrome/87.0. > Chrome/97.0.)
User-Agent: ["Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4280.88 Safari/537.36"]
rows:
selector: div[class^="item"]
@@ -47,12 +54,12 @@ search:
details:
selector: a[href*="/showprofile/"]
attribute: href
infohash:
selector: a[href*="/showprofile/"]
download:
selector: a[href*="/download/"]
attribute: href
magnet:
selector: a[href^="magnet:?xt="]
attribute: href
filters:
- name: regexp
args: ([A-F|a-f|0-9]{40})
date:
selector: font[color="Black"]
filters:

View File

@@ -1,14 +1,10 @@
---
id: anthelion-api
replaces:
- tehconnectionme
- anthelion
name: Anthelion (API)
description: "Anthelion is a Private MOVIES tracker"
language: en-US
type: private
encoding: UTF-8
# Status: https://ant.trackerstatus.info/
links:
- https://anthelion.me/
@@ -36,10 +32,6 @@ settings:
type: info
label: About your API key
default: "Find or Generate a new API Key by accessing your <a href=\"https://anthelion.me/\" target=\"_blank\">Anthelion</a> account <i>Settings</i> page and scrolling down to the <b>API Key</b> section.<br>Tick the <b>Search</b> and <b>Download</b> checkboxes and click the <b>save profile</b> button to generate the key."
- name: info_activity
type: info
label: Account Inactivity
default: "Activity is defined as actually using your account, including the snatch/grab/seeding of torrents. You are also required to sign-in to the web frontend of Anthelion at least once per 3mo (90 days) (Note, using autodl/ARR does not satisfy this)."
login:
path: api.php
@@ -68,8 +60,7 @@ search:
q: "{{ .Keywords }}"
tmdb: "{{ .Query.TMDBID }}"
imdb: "{{ .Query.IMDBIDShort }}"
# category filtering is disabled since it seems to rely on the AND operator that prevents some releases to show on search.
# cat: "{{ join .Categories \",\" }}"
cat: "{{ join .Categories \",\" }}"
limit: 100
offset: 0
@@ -117,12 +108,12 @@ search:
optional: true
filters:
- name: trim
title_optional:
title:
selector: title
filters:
- name: htmldecode
- name: append
args: " {{ .Result.year }} {{ .Result._codec }} {{ .Result._container }} {{ .Result._media }} {{ .Result._resolution }} {{ .Result._audioFormat }}{{ if .Result._subbing }} Subs{{ else }}{{ end }}{{ if .Result._flags }} {{ .Result._flags }}{{ else }}{{ end }}{{ if .Result._language }} {{ .Result._language }}{{ else }}{{ end }}{{ if and (.Result._releaseGroup) (ne .Result._releaseGroup \"NULL\") }}-{{ .Result._releaseGroup }}{{ else }}{{ end }}"
args: " {{ .Result.year }} {{ .Result._codec }} {{ .Result._container }} {{ .Result._media }} {{ .Result._resolution }} {{ .Result._audioFormat }}{{ if .Result._subbing }} Subs{{ else }}{{ end }}{{ if .Result._flags }} {{ .Result._flags }}{{ else }}{{ end }}{{ if .Result._language }} {{ .Result._language }}{{ else }}{{ end }}{{ if and (.Result._releaseGroup) (ne .Result._releaseGroup \"NULL\") }} -{{ .Result._releaseGroup }}{{ else }}{{ end }}"
details:
selector: guid
download:
@@ -164,11 +155,4 @@ search:
minimumseedtime:
# 3 day (as seconds = 3 x 24 x 60 x 60)
text: 259200
_filename:
selector: "files[0].name"
filters:
- name: htmldecode
optional: true
title:
text: "{{ if and (eq .Result.files \"1\") (.Result._filename) }}{{ .Result._filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
# json api

View File

@@ -124,7 +124,6 @@ login:
args: ["');", ""]
test:
path: index.php
selector: a[href="logout.php"]
download:
before:

View File

@@ -2,7 +2,7 @@
id: arabp2p
name: ArabP2P
description: "ArabP2P is an ARABIC Private Torrent Tracker for MOVIES / TV / GENERAL"
language: ar-AE
language: ar-AR
type: private
encoding: UTF-8
links:
@@ -34,10 +34,6 @@ settings:
options:
2: desc
1: asc
- name: info_activity
type: info
label: Account Inactivity
default: "You must log in periodically. If the member is absent from the website for a period of 3 months, the account will be deleted without prior warning."
caps:
categorymappings:
@@ -52,7 +48,6 @@ caps:
- {id: 52, cat: TV, desc: "مسرحيات (Plays)"}
- {id: 71, cat: TV, desc: "مسلسلات مدبلجه عربي (Arabic Dubbed Series)"}
- {id: 90, cat: TV, desc: "برامج ومسابقات (Shows)"}
- {id: 117, cat: TV, desc: "رمضان 2024 (Ramadan)"}
# المرئيات الاجنبية Foreign Movies
- {id: 92, cat: TV/Foreign, desc: "تعليمي (Educational)"}
- {id: 93, cat: TV/Documentary, desc: "وثائقي (Documentary)"}
@@ -60,12 +55,9 @@ caps:
- {id: 57, cat: TV/Foreign, desc: "مسلسلات آسيوية (Asian Series)"}
- {id: 42, cat: Movies/Foreign, desc: "افلام اجنبيه (Foreign)"}
- {id: 74, cat: Movies/HD, desc: "جودة عالية HD"}
- {id: 113, cat: TV/Foreign, desc: "مسلسلات لاتينية مترجم.مدبلج(Latin Series"}
- {id: 76, cat: Movies/3D, desc: "&ثلاثي الابعاد 3D (3D)"}
- {id: 59, cat: Movies/Foreign, desc: "افلام آسيوية (Asian Movies)"}
- {id: 86, cat: Movies/Foreign, desc: "افلام هنديه (Indian Movies)"}
- {id: 114, cat: Movies/Foreign, desc: "افلام لاتينية مترجم.مدبلج (Latin Movies)"}
- {id: 115, cat: TV/Foreign, desc: "مسلسلات تركية مترجم.مدبلج (Turkish Series)"}
- {id: 116, cat: Movies/Foreign, desc: "افلام تركية مترجم.مدبلج (Turkish Movies)"}
# انمي مدبلج عربي Anime Arabic dubbed
- {id: 98, cat: TV/Anime, desc: "افلام (Movies)"}
- {id: 100, cat: TV/Anime, desc: "مسلسلات (Series)"}
@@ -96,6 +88,7 @@ caps:
- {id: 65, cat: Other, desc: "صور (Images)"}
- {id: 56, cat: Other, desc: "رياضي (Sport)"}
- {id: 46, cat: Other, desc: "منوع (Misc)"}
- {id: 112, cat: Other, desc: "رمضان 2023"}
modes:
search: [q]

View File

@@ -2,7 +2,7 @@
id: arabtorrents
name: ArabTorrents
description: "ArabTorrents is an ARABIC Private Torrent Tracker for MOVIES / TV / GENERAL"
language: ar-AE
language: ar-AR
type: private
encoding: windows-1256
requestDelay: 2
@@ -145,7 +145,7 @@ download:
path: takethanks.php
method: post
inputs:
torrentid: "{{ re_replace .DownloadUri.PathAndQuery \".*download-torrent-(\\d+).*\" \"$1\"}}"
torrentid: "{{ .DownloadUri.Query.id }}"
search:
paths:
@@ -169,22 +169,22 @@ search:
args: ["^(.+)$", "*$1*"]
rows:
selector: table#sortabletable > tbody > tr:has(span > a[href*="details.php?id="])
selector: table#sortabletable > tbody > tr:has(div > a[href*="details.php?id="])
fields:
category:
selector: td a[href*="/torrent-category-"]
selector: td a[href*="/browse.php?category="]
attribute: href
filters:
- name: regexp
args: "torrent-category-(\\d+)\/"
- name: querystring
args: category
title:
selector: td div.tooltip-target
selector: td a[href*="/details.php?id="]
details:
selector: span a[href*="/details.php?id="]
selector: td a[href*="/details.php?id="]
attribute: href
download:
selector: a[href*="/download-torrent-"]
selector: a[href*="/download.php?id="]
attribute: href
date:
selector: td:nth-child(2) > div:nth-child(3)

View File

@@ -28,7 +28,6 @@ caps:
- {id: 20, cat: Movies/HD, desc: "Movies / Movies HD"}
- {id: 21, cat: Movies/HD, desc: "Movies / x265"}
- {id: 22, cat: Movies/UHD, desc: "Movies / 4K"}
- {id: 59, cat: Movies/HD, desc: "Movies / AV1"}
- {id: 2, cat: TV, desc: "Series"}
- {id: 23, cat: TV/HD, desc: "Series / TV Episodes HD"}
- {id: 24, cat: TV, desc: "Series / TV Episodes"}

View File

@@ -6,8 +6,6 @@ language: en-US
type: private
encoding: UTF-8
links:
- https://eiga.moi/
legacylinks:
- https://asiancinema.me/
caps:
@@ -49,13 +47,8 @@ settings:
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Your account will be automatically deleted from the database after 90 days of inactivity. If you return or visit the site with your account before that amount of time passes, then the inactivity timer will reset and your account will be fine for another 90 days.<br>Keep in mind that 'activity' is considered a visit to any page and that torrent traffic is not counted as account activity. In order to reset the inactivity timer all you have to do is visit a single page while logged in with your account. If your account is deleted for inactivity, please do not ask the site staff to un-delete it for you. The deletion is performed automatically by the server and, as such, your account cannot be recovered after it has been deleted."
login:
# note APIKEY is broken on this 5.3.0 site
path: login
method: form
form: form[action$="/login"]
@@ -134,42 +127,8 @@ search:
date:
selector: time
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
- name: append
args: " ago"
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
@@ -191,4 +150,4 @@ search:
minimumseedtime:
# 7 days (as seconds = 7 x 24 x 60 x 60)
text: 604800
# UNIT3D 5.3.0
# UNIT3D 3.0.0

View File

@@ -62,10 +62,6 @@ settings:
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "No special action required for red ribbons and permanent sponsors and above regardless of time, for others after 1 year of zero activity on tracker and/or website account will be closed."
login:
path: login
@@ -95,10 +91,9 @@ search:
selector: table.torrenttable_helper > tbody > tr:has(img)
fields:
category_optional:
category:
selector: img[class^="cat-"]
attribute: class
optional: true
case:
img.cat-anime: 1
img.cat-hk: 2
@@ -116,8 +111,6 @@ search:
img.cat-pinku: 12
img.cat-drama: 15
img.cat-ost: 16
category:
text: "{{ if .Result.category_optional }}{{ .Result.category_optional }}{{ else }}12{{ end }}"
title:
selector: span[id]
details:

View File

@@ -33,8 +33,10 @@ settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -59,13 +61,8 @@ settings:
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Account retention rules:<ol><li>Users with Extreme User and above will be retained forever</li><li>Starting from 20230701, the non-login ban time will be adjusted to:<ul><li>(Home Alone) User - 40 days</li><li>(Young and vigorous) Power User - 60 days</li><li>(Children of Jianghu) Elite User - 80 days</li><li>(Street Fighter) Crazy User - 100 days</li><li>(non-stop) Insane User - 120 days</li><li>(Outstanding Citizen) Veteran User - 180 days</li></ul></li><li>Users with no traffic (i.e. uploading/downloading data) If it is 0) If you do not log in for 7 consecutive days will be disabled</li><li>'Parked accounts' no longer enjoy the benefits of retaining accounts, and are also subject to the above rules.</li></ol>"
login:
# using cookie method because site has cloudflare challenge and flaresolverr is currently broken. Switch to standard nexus login when fixed.
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"

View File

@@ -180,16 +180,15 @@ caps:
- {id: 244, cat: Other, desc: "GFXNEWS OTHER GRAPHICS Zbrush, Substance tools"}
- {id: 216, cat: Other, desc: "GFXNEWS PHOTOSTOCK"}
- {id: 220, cat: Other, desc: "GFXNEWS PHOTOGRAPHY - ART"}
- {id: 227, cat: Other, desc: "GFXNEWS 2D Graphics"}
- {id: 250, cat: Other, desc: "GFXNEWS 2D Graphics Effects"}
- {id: 228, cat: Other, desc: "GFXNEWS 2D Graphics Actions, Pattern & Styles"}
- {id: 229, cat: Other, desc: "GFXNEWS 2D Graphics Background & PSD Source"}
- {id: 230, cat: Other, desc: "GFXNEWS 2D Graphics Brushes & Gradient"}
- {id: 246, cat: Other, desc: "GFXNEWS 2D Graphics Mockup"}
- {id: 247, cat: Other, desc: "GFXNEWS 2D Graphics Overlays"}
- {id: 249, cat: Other, desc: "GFXNEWS 2D Graphics Preset"}
- {id: 231, cat: Other, desc: "GFXNEWS 2D Graphics Toolkits, Papers & Objects"}
- {id: 245, cat: Other, desc: "GFXNEWS GFX Plugins"}
- {id: 227, cat: Other, desc: "GFXNEWS PHOTOSHOP"}
- {id: 228, cat: Other, desc: "GFXNEWS PHOTOSHOP Actions, Pattern & Styles"}
- {id: 229, cat: Other, desc: "GFXNEWS PHOTOSHOP Background & PSD Source"}
- {id: 230, cat: Other, desc: "GFXNEWS PHOTOSHOP Brushes & Gradient"}
- {id: 246, cat: Other, desc: "GFXNEWS PHOTOSHOP Mockup"}
- {id: 247, cat: Other, desc: "GFXNEWS PHOTOSHOP Overlays"}
- {id: 249, cat: Other, desc: "GFXNEWS PHOTOSHOP Preset"}
- {id: 231, cat: Other, desc: "GFXNEWS PHOTOSHOP Toolkits, Papers & Objects"}
- {id: 245, cat: Other, desc: "GFXNEWS PLUGINS"}
- {id: 210, cat: Other, desc: "GFXNEWS PLUGINS WIN"}
- {id: 223, cat: Other, desc: "GFXNEWS PLUGINS MAC"}
- {id: 225, cat: Other, desc: "GFXNEWS PLUGINS LINUX"}
@@ -227,10 +226,6 @@ settings:
options:
2: desc
1: asc
- name: info_activity
type: info
label: Account Inactivity
default: "You must stay active on the site...<ol><li>Any New users that have no stats for one month will have their account deleted</li><li>Any disabled accounts will be deleted after 6 months</li><li>Any accounts inactive for more than 6 months will be deleted</li><li>Donor accounts will be left untouched.</li></ol>"
login:
path: login.php
@@ -306,7 +301,7 @@ search:
- name: querystring
args: f
size:
selector: td:contains(\00a0GB), td:contains(\00a0MB), td:contains(\00a0KB), td:contains(\00a0B)
selector: td:contains(\00a0GB), td:contains(\00a0MB), td:contains(\00a0kB), td:contains(\00a0B)
optional: true
default: 0
seeders:
@@ -321,10 +316,6 @@ search:
selector: td[title^="Replies:"]
optional: true
default: 0
description:
case:
span.tor-approved: Verified
span.tor-not-approved: Unverified
downloadvolumefactor:
text: 1
uploadvolumefactor:

View File

@@ -51,7 +51,6 @@ login:
- selector: table:contains("An error has occured!")
test:
path: browse.php
selector: a[href*="logout.php"]
search:
paths:

View File

@@ -27,17 +27,13 @@ caps:
- {id: 16, cat: TV/Documentary, desc: "Docu"}
- {id: 41, cat: Console, desc: "Dragon"}
- {id: 5, cat: Books, desc: "EBooks"}
- {id: 80, cat: PC, desc: "Emulation Media"}
- {id: 61, cat: Console, desc: "emuxtras"}
- {id: 69, cat: TV, desc: "Entertainment"}
- {id: 84, cat: TV, desc: "GOG DRM FREE"}
- {id: 77, cat: PC, desc: "Hyperspin"}
- {id: 34, cat: TV, desc: "Kids"}
- {id: 43, cat: Console, desc: "LB No Intro"}
- {id: 33, cat: TV/Sport, desc: "MMA/Boxing"}
- {id: 32, cat: Movies, desc: "Movie Pack"}
- {id: 6, cat: Movies, desc: "Movies/XVID"}
- {id: 82, cat: PC, desc: "MS-DOS"}
- {id: 7, cat: Audio, desc: "Music"}
- {id: 31, cat: Console, desc: "Nintendo"}
- {id: 59, cat: Console, desc: "P-R-U"}
@@ -45,23 +41,16 @@ caps:
- {id: 50, cat: Console, desc: "PlayBox"}
- {id: 30, cat: Console, desc: "Playstation"}
- {id: 62, cat: Console, desc: "RaspberryPi"}
- {id: 83, cat: Console, desc: "Retro eXo"}
- {id: 56, cat: Console, desc: "Retro Minis"}
- {id: 81, cat: PC, desc: "Retro Scene Releases"}
- {id: 67, cat: Console, desc: "Retrobat"}
- {id: 79, cat: PC, desc: "RGB-Pi"}
- {id: 76, cat: Console, desc: "RGS"}
- {id: 27, cat: Console, desc: "Roms and Emulators"}
- {id: 68, cat: Console, desc: "Schmoomer's"}
- {id: 57, cat: Console, desc: "Sega"}
- {id: 74, cat: PC, desc: "Sleyk/SGC"}
- {id: 40, cat: TV, desc: "Soaps"}
- {id: 29, cat: TV/Sport, desc: "Sport"}
- {id: 9, cat: TV, desc: "TV-Boxsets"}
- {id: 11, cat: TV, desc: "TV/x264"}
- {id: 10, cat: TV, desc: "TV/Xvid"}
- {id: 75, cat: Audio, desc: "Video Game Music"}
- {id: 73, cat: Console, desc: "Wolfanoz"}
- {id: 14, cat: TV/Sport, desc: "WWE"}
- {id: 26, cat: Console, desc: "Xbox"}
- {id: 12, cat: Console, desc: "XBOX360"}
@@ -89,10 +78,6 @@ settings:
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>40</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "To keep records updated regularly, all inactive accounts will be deleted after 60 days of inactivity."
login:
path: takelogin.php

View File

@@ -8,9 +8,16 @@ encoding: UTF-8
requestDelay: 5
links:
- https://badasstorrents.com/
- https://badasstorrents.mrunblock.life/
- https://badasstorrents.nocensor.click/
legacylinks:
- https://badasstorrents.mrunblock.bond/
- https://badasstorrents.nocensor.cloud/
- https://badasstorrents.nocensor.work/
- https://badasstorrents.nocensor.biz/
- https://badasstorrents.nocensor.sbs/
- https://badasstorrents.nocensor.world/
- https://badasstorrents.nocensor.lol/
- https://badasstorrents.nocensor.art/
- https://badasstorrents.mrunblock.guru/
caps:
categories:
@@ -30,28 +37,41 @@ caps:
movie-search: [q]
music-search: [q, album, artist]
book-search: [q]
settings:
- name: info_flaresolverr
type: info_flaresolverr
- name: downloadlink
type: select
label: Download link
default: "magnet:?xt="
options:
"/d/": ".torrent"
"/download/": ".torrent"
"magnet:?xt=": "magnet"
- name: downloadlink2
type: select
label: Download link (fallback)
default: "/d/"
default: "/download/"
options:
"/d/": ".torrent"
"/download/": ".torrent"
"magnet:?xt=": "magnet"
- name: info_download
type: info
label: About the Download links
default: You can optionally set as a fallback an automatic alternate link, so if the .torrent download link fails your download will still be successful.
- name: sort
type: select
label: Sort requested from site
default: date
options:
date: created
seeds: seeders
size: size
title: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
download:
selectors:
@@ -62,43 +82,35 @@ download:
search:
paths:
# search has 10 torrents per page, latest has 100 torrents per page.
- path: "{{ if .Keywords }}s/{{ .Keywords }}{{ else }}latest.html{{ end }}"
- path: "{{ if .Keywords }}s/{{ .Keywords }}&page=10{{ else }}{{ end }}"
keywordsfilters:
- name: re_replace
args: ["[\\s]+", "-"]
- name: tolower
- path: "torrents/{{ if .Keywords }}search/{{ .Keywords }}/{{ else }}{{ end }}{{ .Config.sort }}/{{ .Config.type }}"
- path: "torrents/{{ if .Keywords }}search/{{ .Keywords }}/{{ else }}{{ end }}26/{{ .Config.sort }}/{{ .Config.type }}"
rows:
selector: table.table-hover > tbody > tr
selector: table.table-hover > tbody > tr:has(a[href*="/torrent/"])
filters:
- name: andmatch
fields:
category:
selector: a[href^="/c/"]
selector: a[href*="/cat/"]
title:
selector: a[href*="/v/"]
selector: a[href*="/torrent/"]
details:
selector: a[href*="/v/"]
selector: a[href*="/torrent/"]
attribute: href
download:
selector: a[href*="/v/"]
selector: a[href*="/torrent/"]
attribute: href
date:
selector: td:nth-child(3)
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
size:
selector: td:nth-child(4)
seeders:
filters:
- name: timeago
size:
selector: td:nth-child(5)
leechers:
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
downloadvolumefactor:
text: 0
uploadvolumefactor:

View File

@@ -5,7 +5,6 @@ description: "Bangumi Moe is a Public torrent site for ANIME"
language: en-US
type: public
encoding: UTF-8
requestDelay: 3
links:
- https://bangumi.moe/
@@ -51,7 +50,7 @@ search:
title:
selector: title
details:
text: /
text: "{{ .Config.sitelink }}"
infohash:
selector: infoHash
poster:
@@ -61,6 +60,7 @@ search:
args: "src=\\\"(.+?)\\\""
description:
selector: category_tag.locale.en
optional: true
date:
# 2021-10-19T06:10:15.772Z
selector: publish_time

View File

@@ -1,25 +1,30 @@
---
id: azusa
name: Azusa (梓喵)
description: "Azusa (梓喵) is a CHINESE Private Torrent Tracker focusing on Comics"
id: beitai
name: BeiTai
description: "BeiTai is a CHINESE Private Torrent Tracker for HD MOVIES / TV"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://azusa.wiki/
- https://www.beitai.pt/
caps:
categorymappings:
- {id: 404, cat: PC/Games, desc: "Game"}
- {id: 402, cat: Books/Comics, desc: "Comic"}
- {id: 403, cat: Books/EBook, desc: "Light Novel"}
- {id: 407, cat: Other, desc: "CG"}
- {id: 409, cat: Audio, desc: "Music"}
- {id: 401, cat: Movies, desc: "Movies/电影"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
- {id: 405, cat: TV/Anime, desc: "Animations/动漫"}
- {id: 402, cat: TV, desc: "TV Series/剧集"}
- {id: 403, cat: TV, desc: "TV Shows/综艺"}
- {id: 406, cat: Audio/Video, desc: "MusicVideo/音乐MV"}
- {id: 407, cat: TV/Sport, desc: "Sports/运体"}
- {id: 409, cat: Other, desc: "Misc/其他"}
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
music-search: [q]
book-search: [q]
settings:
- name: username
@@ -28,13 +33,6 @@ settings:
- name: password
type: password
label: Password
- name: 2facode
type: text
label: 2FA code
- name: info_2fa
type: info
label: "About 2FA code"
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the Uploads Web Site. Otherwise just leave it empty."
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -61,22 +59,15 @@ settings:
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
path: takelogin.php
method: post
inputs:
secret: ""
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
two_step_code: "{{ .Config.2facode }}"
logout: ""
securelogin: ""
ssl: yes
trackerssl: ""
trackerssl: yes
error:
- selector: td.embedded:has(h2:contains("失败"))
test:
@@ -88,13 +79,13 @@ search:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if .Query.DoubanID }}/{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.DoubanID }}{{ else }}{{ .Keywords }}{{ end }}"
# 0 incldead, 1 active, 2 dead
incldead: 0
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
# 0 title, 1 descr, 3 uploader, 4 imdburl
search_area: 0
# 0 title, 1 descr, 3 uploader, 4 imdburl (4 does not appear to work).
search_area: "{{ if or .Query.IMDBID .Query.DoubanID }}1{{ else }}0{{ end }}"
# 0 AND, 1 OR, 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
@@ -105,12 +96,6 @@ search:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
title_default:
selector: a[href^="details.php?id="]
title:
@@ -118,15 +103,24 @@ search:
attribute: title
optional: true
default: "{{ .Result.title_default }}"
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
imdbid:
selector: div.imdb_100 > a
attribute: href
date_elapsed:
# time type: time elapsed (default)
selector: td.rowfollow:nth-child(4) > span[title]
selector: td:nth-child(4) > span[title]
attribute: title
optional: true
filters:
@@ -136,7 +130,7 @@ search:
args: "yyyy-MM-dd HH:mm:ss zzz"
date_added:
# time added
selector: td.rowfollow:nth-child(4):not(:has(span))
selector: td:nth-child(4):not(:has(span))
optional: true
filters:
- name: append
@@ -146,13 +140,13 @@ search:
date:
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
size:
selector: td.rowfollow:nth-child(5)
selector: td:nth-child(5)
seeders:
selector: td.rowfollow:nth-child(6)
selector: td:nth-child(6)
leechers:
selector: td.rowfollow:nth-child(7)
selector: td:nth-child(7)
grabs:
selector: td.rowfollow:nth-child(8)
selector: td:nth-child(8)
downloadvolumefactor:
case:
img.pro_free: 0
@@ -170,4 +164,4 @@ search:
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.7.20 2022-08-05
# NexusPHP Standard v1.5 Beta 4

View File

@@ -1,159 +0,0 @@
---
id: beload
name: Beload
description: "Beload is a HUNGARIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: hu-HU
type: private
encoding: UTF-8
links:
- https://beload.org/
caps:
categorymappings:
- {id: 27, cat: Movies/DVD, desc: "Animáció/DVD/Eng"}
- {id: 26, cat: Movies/DVD, desc: "Animáció/DVD/Hun"}
- {id: 25, cat: Movies/HD, desc: "Animáció/HD/Eng"}
- {id: 24, cat: Movies/HD, desc: "Animáció/HD/Hun"}
- {id: 28, cat: Movies/SD, desc: "Animáció/SD/Hun"}
- {id: 12, cat: Movies/SD, desc: "Film/Cam/Eng"}
- {id: 11, cat: Movies/SD, desc: "Film/Cam/Hun"}
- {id: 4, cat: Movies/DVD, desc: "Film/DVD-R/Eng"}
- {id: 3, cat: Movies/DVD, desc: "Film/DVD-R/Hun"}
- {id: 6, cat: Movies/DVD, desc: "Film/DVD9/Eng"}
- {id: 5, cat: Movies/DVD, desc: "Film/DVD9/Hun"}
- {id: 2, cat: Movies/Foreign, desc: "Film/HD/Eng"}
- {id: 1, cat: Movies/HD, desc: "Film/HD/Hun"}
- {id: 8, cat: Movies/Foreign, desc: "Film/SD/Eng"}
- {id: 7, cat: Movies/SD, desc: "Film/SD/Hun"}
- {id: 10, cat: Movies/Foreign, desc: "Film/XviD/Eng"}
- {id: 9, cat: Movies/SD, desc: "Film/XviD/Hun"}
- {id: 31, cat: Audio/Audiobook, desc: "Hangoskönyv"}
- {id: 42, cat: PC/Games, desc: "Játék/ISO"}
- {id: 43, cat: PC/Games, desc: "Játék/RIP"}
- {id: 30, cat: Books/Foreign, desc: "Könyv/Eng"}
- {id: 29, cat: Books/EBook, desc: "Könyv/Hun"}
- {id: 44, cat: PC/ISO, desc: "Program/ISO"}
- {id: 45, cat: PC, desc: "Program/RIP"}
- {id: 14, cat: TV/Foreign, desc: "Sorozat/HD/Eng"}
- {id: 13, cat: TV/HD, desc: "Sorozat/HD/Hun"}
- {id: 16, cat: TV/Foreign, desc: "Sorozat/SD/Eng"}
- {id: 15, cat: TV/SD, desc: "Sorozat/SD/hun"}
- {id: 38, cat: XXX/SD, desc: "XXX/HD"}
- {id: 41, cat: XXX/ImageSet, desc: "XXX/Kép"}
- {id: 40, cat: XXX/SD, desc: "XXX/SD"}
- {id: 20, cat: Audio/Foreign, desc: "Zene/Mp3/Eng"}
- {id: 19, cat: Audio/MP3, desc: "Zene/Mp3/Hun"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: sort
type: select
label: Sort requested from site
default: 4
options:
1: title
4: created
7: seeders
5: size
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
# using cookie method because login page has embedded Google reCAPTCHA
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href="/logout.php"]
search:
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0 active, 1 both, 2 dead, 3 my uploa, 4 waiting for seeds
incldead: 1
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
# does not support imdbid searches
rows:
selector: "div.torrents-container > table > tbody > tr > td.text > table > tbody > tr:has(a[href^=\"details.php?id=\"]):not(:has(a[href=\"browse.php?cat=0\"]))"
after: 1
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="][title]
attribute: title
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?torrent="]
attribute: href
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
poster:
selector: a.preview
attribute: href
date:
selector: td:nth-last-child(6) > a
attribute: title
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
files:
selector: td:nth-last-child(8)
size:
selector: td:nth-last-child(5) b
grabs:
selector: td:nth-last-child(4)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
description:
case:
i.fa-check: Verified
i.fa-question: Unverified
downloadvolumefactor:
case:
"span[style=\"font-size: 10px;\"]:contains(\"0x\")": 0
"*": 1
uploadvolumefactor:
case:
"span[style=\"font-size: 10px;\"]:contains(\"2x\")": 2
"span[style=\"font-size: 10px;\"]:contains(\"4x\")": 4
"*": 1
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# engine n/a

View File

@@ -1,120 +0,0 @@
---
id: best-torrents
name: Best-Torrents
description: "Best-Torrents is a POLISH Semi-Private PAY2DL Torrent Tracker for MOVIES / TV / GENERAL"
language: pl-PL
type: semi-private
encoding: UTF-8
links:
- https://best-torrents.com/
caps:
categorymappings:
- {id: 774, cat: Movies, desc: Filmy Polskie}
- {id: 642, cat: Movies, desc: Filmy/Bajki}
- {id: 1, cat: Movies/SD, desc: Filmy XviD/DivX}
- {id: 20, cat: Movies/DVD, desc: Filmy DVD}
- {id: 23, cat: Movies/HD, desc: Filmy x264}
- {id: 573, cat: Movies/UHD, desc: Filmy 4K UHD}
- {id: 17, cat: Movies/HD, desc: Filmy HD}
- {id: 265, cat: Movies/HD, desc: Filmy x265 HEVC}
- {id: 12, cat: Movies/3D, desc: Filmy 3D}
- {id: 530, cat: Movies/SD, desc: Filmy TS/CAM}
- {id: 9, cat: PC, desc: Programy}
- {id: 7, cat: Console, desc: Konsole}
- {id: 6, cat: PC/Games, desc: Gry}
- {id: 5, cat: Audio, desc: Muzyka}
- {id: 305, cat: Audio/Video, desc: Teledyski}
- {id: 22, cat: TV, desc: TV}
- {id: 228, cat: XXX, desc: Erotyka}
- {id: 25, cat: Books/EBook, desc: Książki}
- {id: 739, cat: Audio/Audiobook, desc: AudioBooki}
- {id: 26, cat: Books/Comics, desc: Komiksy}
- {id: 27, cat: PC/Mac, desc: Linux/Mac}
- {id: 28, cat: TV/Sport, desc: Sport}
- {id: 29, cat: TV/Anime, desc: Anime}
- {id: 31, cat: PC/Mobile-Other, desc: GSM/PDA}
- {id: 32, cat: Other, desc: Inne}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.komunikaty:contains("Nazwa użytkownika bądź hasło jest nieprawidłowe")
test:
path: /
selector: a[href$="/logout.php"]
search:
# https://best-torrents.com/szukaj.php?search=%25&cat=774&full_name=no
paths:
- path: szukaj.php
inputs:
# does not appear to support multi category searches
cat: 0
# no, 0 Standard mode, 1 Initial mode, 2 Full Phrase mode, 3 Final mode
full_name: no
search: "{{ if .Keywords }}{{ .Keywords }}{{ else }}%{{ end }}"
rows:
selector: div#torrents_browse-standard-all
fields:
categorydesc:
selector: div#torrents_browse-standard-category a
attribute: href
filters:
- name: regexp
args: kategorii/(.+?)/gatunku
title:
selector: div#torrents_browse-standard-torrent-name a
details:
selector: div#torrents_browse-standard-torrent-name a
attribute: href
download:
selector: div#torrents_browse-standard-download a
attribute: href
poster:
selector: div#torrents_browse-standard-poster img
attribute: src
date:
selector: div#torrents_browse-standard-time
remove: b
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
size:
selector: div#torrents_browse-standard-size
remove: b
filters:
- name: regexp
args: (\d{1,4}\.\d{2}\s+?[T|G|M|k]B)
seeders:
selector: div#torrents_browse-standard-seeds span font
leechers:
selector: div#torrents_browse-standard-peers span font
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -95,10 +95,6 @@ settings:
type: info
label: About login error
default: If you get a <b>Login Failed, got redirected.</b> error during your config <i>save</i> then most likely you have used an incorrect username or password.
- name: info_activity
type: info
label: Account Inactivity
default: "<ol><li>Users who have not accessed the site for 180 days will be deleted!</li><li>If the vacation mode is set, the system will not delete the given user for 365 days.</li></ol>"
login:
path: takelogin.php
@@ -106,8 +102,6 @@ login:
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: :root:contains("Sikertelen bejelentkezés")
test:
path: index.php
selector: a[href^="logout.php?c="]
@@ -129,15 +123,14 @@ search:
- name: andmatch
fields:
category_optional:
category:
selector: a[href^="browse.php?cat="]
attribute: href
optional: true
default: 38
filters:
- name: querystring
args: cat
category:
text: "{{ if .Result.category_optional }}{{ .Result.category_optional }}{{ else }}38{{ end }}"
title_default:
# can be abbreviated
selector: a[href^="details.php?id="]
@@ -188,10 +181,6 @@ search:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
description:
case:
img[src="pic/yes.png"]: Verified
img[src="pic/nincs.png"]: Unverified
downloadvolumefactor:
case:
img[src="pic/free.png"]: 0

View File

@@ -0,0 +1,133 @@
---
id: beyond-hd
name: Beyond-HD
description: "Without BeyondHD, your HDTV is just a TV"
language: en-US
type: private
encoding: UTF-8
links:
- https://beyond-hd.me/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
settings:
- name: info_oid
type: info
label: "About 2FA"
default: "If you want to enable 2FA then use the Beyond-HD (API) indexer instead."
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: login
method: form
form: form[action$="/login"]
captcha:
type: image
selector: img[src^="/captcha?_CAPTCHA"]
input: key
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: form[action$="/login"] .text-red
- selector: script:contains("toastr.error")
message:
selector: script:contains("toastr.error")
# test:
# path: torrents
search:
paths:
- path: torrents
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
search: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
imdb: "{{ .Query.IMDBIDShort }}"
tmdb: "{{ .Query.TMDBID }}"
sorting: "{{ .Config.sort }}"
direction: "{{ .Config.type }}"
qty: 100
rows:
selector: div.table-torrents > table > tbody > tr[id^="torrentposter"]
fields:
category:
selector: a[href*="/categories/"]
attribute: href
optional: true
default: 1
filters:
- name: regexp
args: "/categories/.*?\\.(\\d+)"
title:
selector: a.torrent-name
details:
selector: a.torrent-name
attribute: href
download:
selector: a[href*="/download/"]
attribute: href
date:
selector: td:not(a[href$="/history"]) span.text-orange
filters:
- name: timeago
size:
selector: td span.text-blue
seeders:
selector: a[href$="/peers"] span.text-green
leechers:
selector: a[href$="/peers"] span.text-red
grabs:
selector: a[href$="/history"]
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
tmdbid:
selector: a[href*="themoviedb.org/movie/"], a[href*="themoviedb.org/tv/"]
attribute: href
downloadvolumefactor:
case:
i[data-original-title="100% Free"]: 0
i[data-original-title="100% Free (Limited UL)"]: 0
i[data-original-title="25% Promo"]: 0.75
i[data-original-title="50% Promo"]: 0.5
i[data-original-title="75% Promo"]: 0.25
"*": 1
uploadvolumefactor:
text: 1
# UNIT3D (custom)

View File

@@ -89,19 +89,19 @@ settings:
asc: asc
search:
# https://bigfangroup.org/browse.php?search=black+lightning&cat=0&incldead=0&year=0&format=0
paths:
# https://bigfangroup.org/browse.php?ajax=1&search=the+librarian&cat=0&incldead=0&year=0&format=0
- path: browse.php
inputs:
ajax: 1
search: "{{ .Keywords }}"
cat: "{{ if .Keywords }}0{{ else }}{{ end }}"
cat: 0
# 0 active, 1 incldead, 2 onlydead, 3 gold, 4 noseed, 5 silver, 7 BFG
incldead: "{{ if .Keywords }}1{{ else }}{{ end }}"
year: "{{ if .Keywords }}0{{ else }}1{{ end }}"
format: "{{ if .Keywords }}0{{ else }}{{ end }}"
s: "{{ if .Keywords }}{{ .Config.sort }}{{ else }}{{ end }}"
d: "{{ if .Keywords }}{{ .Config.type }}{{ else }}{{ end }}"
incldead: 1
ajax: 1
year: 0
format: 0
s: "{{ .Config.sort }}"
d: "{{ .Config.type }}"
keywordsfilters:
# strip season and/or ep

View File

@@ -11,29 +11,43 @@ links:
caps:
categorymappings:
- {id: 85, cat: Movies/SD, desc: "Film-Cam", default: true}
- {id: 15, cat: Movies/SD, desc: "Film-SD", default: true}
- {id: 17, cat: Movies/DVD, desc: "Film-DVD", default: true}
- {id: 83, cat: Movies/HD, desc: "Film-HD", default: true}
- {id: 94, cat: Movies/HD, desc: "Film-FHD", default: true}
- {id: 92, cat: Movies/UHD, desc: "Film-UHD", default: true}
- {id: 22, cat: TV, desc: "Sorozat-Hun", default: true}
- {id: 64, cat: Movies, desc: "Film-Pack", default: true}
- {id: 24, cat: Audio/Video, desc: "Klip", default: true}
- {id: 85, cat: Movies/SD, desc: "Film/Cam/Hun", default: true}
- {id: 86, cat: Movies/SD, desc: "Film/Cam/Eng", default: true}
- {id: 15, cat: Movies/SD, desc: "Film/SD/Hun", default: true}
- {id: 16, cat: Movies/SD, desc: "Film/SD/Eng", default: true}
- {id: 17, cat: Movies/DVD, desc: "Film/DVD/Hun", default: true}
- {id: 19, cat: Movies/DVD, desc: "Film/DVD/Eng", default: true}
- {id: 83, cat: Movies/HD, desc: "Film/HD/Hun", default: true}
- {id: 82, cat: Movies/HD, desc: "Film/HD/Eng", default: true}
- {id: 94, cat: Movies/HD, desc: "Film/FHD/Hun", default: true}
- {id: 95, cat: Movies/HD, desc: "Film/FHD/Eng", default: true}
- {id: 92, cat: Movies/UHD, desc: "Film/UHD/Hun", default: true}
- {id: 93, cat: Movies/UHD, desc: "Film/UHD/Eng", default: true}
- {id: 64, cat: Movies, desc: "Film/Pack", default: true}
- {id: 24, cat: Audio/Video, desc: "Videóklip", default: true}
- {id: 22, cat: TV, desc: "Sorozat/Hun", default: true}
- {id: 58, cat: TV, desc: "Sorozat/Eng", default: true}
- {id: 69, cat: TV/Anime, desc: "Mese/SD", default: true}
- {id: 68, cat: TV/Anime, desc: "Mese/DVD", default: true}
- {id: 91, cat: TV/Anime, desc: "Mese/HD", default: true}
- {id: 25, cat: Audio/MP3, desc: "Mp3/Hun", default: true}
- {id: 26, cat: Audio/MP3, desc: "Mp3/Eng", default: true}
- {id: 84, cat: Audio/Lossless, desc: "Lossless/Hun", default: true}
- {id: 71, cat: Audio/Lossless, desc: "Lossless/Eng", default: true}
- {id: 31, cat: PC/Games, desc: "Játék/PC", default: true}
- {id: 81, cat: PC/0day, desc: "Program/PC", default: true}
- {id: 49, cat: PC/0day, desc: "Program/Rip", default: true}
- {id: 27, cat: Books/EBook, desc: "Könyv/Hun", default: true}
- {id: 50, cat: Books/EBook, desc: "Könyv/Eng", default: true}
- {id: 14, cat: PC, desc: "Program/Egyéb", default: true}
- {id: 65, cat: Other, desc: "Egyéb", default: true}
- {id: 33, cat: XXX/SD, desc: "SD/XXX", default: false}
- {id: 89, cat: XXX/x264, desc: "HD/XXX", default: false}
- {id: 66, cat: XXX/ImageSet, desc: "Képek/XXX", default: false}
# the following are no longer in the cat list in the search page, but are still in the profile cat list
- {id: 54, cat: Console, desc: "Játék/Konzol", default: true}
- {id: 67, cat: PC/Mobile-Android, desc: "Program/Mobil", default: true}
- {id: 70, cat: Audio/Audiobook, desc: "Hangoskönyv", default: true}
- {id: 27, cat: Books/EBook, desc: "Könyv", default: true}
- {id: 69, cat: TV/Anime, desc: "Mese-SD", default: true}
- {id: 91, cat: TV/Anime, desc: "Mese-HD", default: true}
- {id: 25, cat: Audio/MP3, desc: "Mp3-Hun", default: true}
- {id: 26, cat: Audio/MP3, desc: "Mp3-Eng", default: true}
- {id: 84, cat: Audio/Lossless, desc: "FLAC-Hun", default: true}
- {id: 71, cat: Audio/Lossless, desc: "FLAC-Eng", default: true}
- {id: 31, cat: PC/Games, desc: "Játék", default: true}
- {id: 81, cat: PC/0day, desc: "Program", default: true}
- {id: 14, cat: Other, desc: "Egyéb", default: true}
- {id: 66, cat: XXX/ImageSet, desc: "XXX", default: false}
- {id: 33, cat: XXX/SD, desc: "XXX-SD", default: false}
- {id: 89, cat: XXX/x264, desc: "XXX-HD", default: false}
modes:
search: [q]
@@ -46,8 +60,10 @@ settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
- name: freeleech
type: checkbox
label: Filter freeleech only
@@ -71,10 +87,6 @@ settings:
type: info
label: Results Per Page
default: For best results, change the <b>Torrentek száma egy oldalon:</b> setting to <b>50</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "If the user does not access the site for 1 month, he will receive an e-mail notification. If you stay away for 9 months, your account will be suspended and deleted. After the 9-month absence, the user cannot register again."
login:
method: cookie
@@ -87,14 +99,13 @@ login:
search:
paths:
- path: browse.php
categories: [85, 86, 15, 16, 17, 19, 83, 82, 94, 95, 92, 93, 22, 58, 64, 24, 70, 27, 50, 69, 68, 91, 25, 26, 84, 71, 31, 54, 81, 67, 49, 14, 65, 97]
categories: [85, 86, 15, 16, 17, 19, 83, 82, 94, 95, 92, 93, 64, 24, 22, 58, 69, 68, 91, 25, 26, 84, 71, 31, 81, 49, 27, 50, 14, 65, 54, 67, 70]
inputs:
# 0 all, 1 active, 2 deadonly, 3 myuploads, 4 zeroseed, 6 re-seeded
incldead: 0
- path: browse.php
- path: browse_xxx.php
categories: [33, 66, 89]
inputs:
xxx: 1
# 0 active, 1 all, 2 deadonly, 3 myuploads, 4 zeroseed, 6 re-seeded
incldead: 1
inputs:
@@ -106,20 +117,20 @@ search:
# can support genre searching but you need to know the id, eg &genre23=1 for Comedy (id is 23)
rows:
selector: "tr[class^=\"toriadatok\"]:has(i.status-yes){{ if .Config.freeleech }}:has(i:contains(\"(Free)\")){{ else }}{{ end }}"
selector: "tr[class^=\"toriadatok_\"]{{ if .Config.freeleech }}:has(i:contains(\"(Free)\")){{ else }}{{ end }}"
fields:
categorydesc:
selector: td[class^="catpic_"]
attribute: class
filters:
- name: replace
args: ["catpic_", ""]
selector: img[src^="pic/kategoria/"]
attribute: title
title:
selector: span.torrent-title
selector: a.preview
_id:
selector: tr[data-torrent-id]
attribute: data-torrent-id
selector: td.tori_infok
attribute: id
filters:
- name: regexp
args: (\d+)
details:
text: "details.php?id={{ .Result._id }}#adatlap"
download:
@@ -131,14 +142,14 @@ search:
selector: a[href*="imdb.com/title/tt"]
attribute: href
size:
selector: span.torrent-size
selector: td[id^="tsize_"]
date:
# 36 perce
# 13 órája és 59 perce
# 2 napja és 10 órája
# 1 hete és 1 napja
# 1 éve és 30 hete
selector: span.uploader
selector: td[id^="t_added_"] > span
filters:
- name: replace
args: ["és ", " "]
@@ -153,20 +164,14 @@ search:
- name: replace
args: ["éve", "year"]
- name: timeago
seeders:
selector: td:nth-child(5)
optional: true
default: 0
leechers:
selector: td:nth-child(6)
optional: true
default: 0
grabs:
selector: td:nth-child(7)
optional: true
default: 0
selector: td:nth-child(5)
seeders:
selector: td:nth-child(3)
leechers:
selector: td:nth-child(4)
genre:
selector: span.torrent-genre
selector: span[style="font-size:small;"]
description:
text: "{{ .Result.genre }}"
downloadvolumefactor:

View File

@@ -4,7 +4,7 @@ name: Bithorlo
description: "Bithorlo (BHO) is a HUNGARIAN Private Torrent Tracker for MOVIES / GENERAL"
language: hu-HU
type: private
encoding: UTF-8
encoding: ISO-8859-2
links:
- https://www.bithorlo.info/
@@ -15,40 +15,40 @@ caps:
- {id: 19, cat: Books, desc: "E-book/Hun"}
# Játék
- {id: 38, cat: Console, desc: "Játék/Consol"}
- {id: 37, cat: PC/Games, desc: "Játék/Rip"}
- {id: 15, cat: PC/Games, desc: "Játék/ISO"}
- {id: 37, cat: PC/Games, desc: "Játék/Rip"}
# Filmek
- {id: 2, cat: Movies/DVD, desc: "DVD/Eng"}
- {id: 51, cat: Movies/SD, desc: "Cam/Eng"}
- {id: 50, cat: Movies/SD, desc: "Cam/Hun"}
- {id: 2, cat: Movies/DVD, desc: "DVD/Eng"}
- {id: 1, cat: Movies/DVD, desc: "DVD/Hun"}
- {id: 42, cat: Movies/DVD, desc: "Dvd9/Eng"}
- {id: 41, cat: Movies/DVD, desc: "Dvd9/Hun"}
- {id: 33, cat: TV, desc: "Sorozat/Eng"}
- {id: 29, cat: Movies/HD, desc: "HD/Eng"}
- {id: 28, cat: Movies/HD, desc: "HD/Hun"}
- {id: 33, cat: TV, desc: "Sorozat/Eng"}
- {id: 5, cat: TV, desc: "Sorozat/Hun"}
- {id: 52, cat: TV/HD, desc: "Sorozat/Eng/HD"}
- {id: 53, cat: TV/HD, desc: "Sorozat/Hun/HD"}
- {id: 1, cat: Movies/DVD, desc: "DVD/Hun"}
- {id: 5, cat: TV, desc: "Sorozat/Hun"}
- {id: 4, cat: Movies/SD, desc: "Xvid/Eng"}
- {id: 3, cat: Movies/SD, desc: "Xvid/Hun"}
# Zene
- {id: 13, cat: Audio, desc: "Zene/Hun"}
- {id: 12, cat: Audio, desc: "Zene/Eng"}
- {id: 13, cat: Audio, desc: "Zene/Hun"}
# Egyéb
- {id: 21, cat: PC/Mobile-Other, desc: "Mobil"}
- {id: 20, cat: Other, desc: "Képek"}
- {id: 21, cat: PC/Mobile-Other, desc: "Mobil"}
# Program
- {id: 54, cat: PC/0day, desc: "Win/Program/ISO"}
- {id: 22, cat: PC/0day, desc: "Win/Program/ISO"}
- {id: 23, cat: PC/0day, desc: "Win/Program/Rip"}
# Felnőtt tartalom
- {id: 10, cat: XXX, desc: "XXX/Kép"}
- {id: 9, cat: XXX, desc: "XXX/Film"}
- {id: 10, cat: XXX, desc: "XXX/Kép"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
@@ -56,121 +56,100 @@ settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: useragent
type: text
label: User-Agent
- name: info_useragent
type: info_useragent
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sortBy
- name: sort
type: select
label: SortBy requested from site
default: 2
label: Sort requested from site
default: 4
options:
2: created
5: seeders
3: size
4: created
7: seeders
5: size
1: title
- name: orderBy
- name: type
type: select
label: OrderBy requested from site
default: 0
label: Order requested from site
default: desc
options:
0: desc
1: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Vacation mode is used to avoid deletion due to inactivity for 90 days. You can turn it on or off in the Profile menu, set the appropriate option and save your changes."
desc: desc
asc: asc
login:
# using cookie method because login page has embedded Google reCAPTCHA
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index/
selector: a[href="/logout/"]
path: browse.php
search:
paths:
# https://www.bithorlo.info/torrents/?action=search&categories[]=29&categories[]=4&search_text=&incldead=1&torrent_tags=
- path: torrents/
- path: browse.php
inputs:
action: search
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
search_text: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 0 active, 1 incldead, 2 onlydead, 3 freeleech, 5 waiting for seed, 6 multiple upload
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0 active, 1 incldead, 2 onlydead, 3 freeleech
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
sort: "{{ .Config.sortBy }}"
order_by: "{{ .Config.orderBy }}"
headers:
User-Agent: ["{{ .Config.useragent }}"]
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table#TorrentTable > tbody > tr
selector: tr[class^="browse"]
fields:
category:
selector: td.fixed-width-category > a
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: categories[]
args: cat
- name: trim # some torrents have an extra space
title:
selector: a.torrent-name
selector: a[href^="torrent.php?id="]
attribute: title
details:
selector: a.torrent-name
selector: a[href^="torrent.php?id="]
attribute: href
download:
selector: a[href^="/download/"]
selector: a[href^="download.php?id="]
attribute: href
poster:
selector: span.custom-popover
attribute: data-bs-content
selector: a[href^="torrent.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: \"(.+?)\"
args: ", '(.*)'"
size:
selector: td:nth-child(4)
grabs:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
date:
selector: span.bg-green
selector: "a[style=\"font-size: 8pt;cursor: pointer;\"][title]"
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
size:
selector: td.fixed-width-size > span
grabs:
selector: td.fixed-width-completed
seeders:
selector: td.fixed-width-seeders
leechers:
selector: td.fixed-width-leechers
description:
case:
img[src="./themes/Born/nemlatta.png"]: Unverified
"*": Verified
downloadvolumefactor:
case:
"span:contains(\"FREE\")": 0
img[title="Ingyenes letöltés"]: 0
"*": 1
uploadvolumefactor:
case:
"span:contains(\"2x\")": 2
"span:contains(\"3x\")": 3
"span:contains(\"4x\")": 4
"span:contains(\"5x\")": 5
"span:contains(\"6x\")": 6
"span:contains(\"7x\")": 7
"span:contains(\"8x\")": 8
"span:contains(\"9x\")": 9
"*": 1
selector: span:contains("Feltöltési szorzó")
filters:
- name: replace
args: ["Feltöltési szorzó × ", ""]
minimumratio:
text: 1.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# engine n/a

View File

@@ -58,7 +58,6 @@ login:
- selector: td.embedded:has(h2:contains("bejelentkezés"))
test:
path: browse.php
selector: a[href*="logout.php"]
search:
paths:

View File

@@ -1,82 +0,0 @@
---
id: bitmagnet
name: BitMagnet (Local DHT)
description: "BitMagnet is a self-hosted BitTorrent DHT search engine"
language: en-US
type: semi-private
encoding: UTF-8
links:
- http://127.0.0.1:3333/
- http://bitmagnet:3333/
caps:
categorymappings:
- {id: 2000, cat: Movies, desc: "movie"}
- {id: 2030, cat: Movies/SD, desc: "movie_sd"} # unverified
- {id: 2040, cat: Movies/HD, desc: "movie_hd"} # unverified
- {id: 2045, cat: Movies/UHD, desc: "movie_uhd"} # unverified
- {id: 2060, cat: Movies/3D, desc: "movie_3d"} # unverified
- {id: 3000, cat: Audio, desc: "music"}
- {id: 3030, cat: Audio/Audiobook, desc: "audiobook"}
- {id: 4000, cat: PC, desc: "software"}
- {id: 4050, cat: PC/Games, desc: "game"} # unverified
- {id: 5000, cat: TV, desc: "tv_show"}
- {id: 5030, cat: TV/SD, desc: "tv_show_sd"} # unverified
- {id: 5040, cat: TV/HD, desc: "tv_show_hd"} # unverified
- {id: 5045, cat: TV/UHD, desc: "tv_show_uhd"} # unverified
- {id: 6000, cat: XXX, desc: "xxx"}
- {id: 6070, cat: XXX/Other, desc: "xxx_other"} # unverified
- {id: 7000, cat: Books, desc: "book"} # unverified
- {id: 7020, cat: Books/EBook, desc: "ebook"}
- {id: 7030, cat: Books/Comics, desc: "comic"}
- {id: 8000, cat: Other, desc: "Unknown"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings: []
search:
paths:
- path: torznab/api
response:
type: xml
inputs:
t: "{{ .Query.Type }}"
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
limit: 100
rows:
selector: rss > channel > item
fields:
categorydesc:
selector: category
title:
selector: title
details:
text: /
date:
selector: pubDate
infohash:
selector: guid
size:
selector: size
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# torznab xml

View File

@@ -0,0 +1,119 @@
---
id: bitnova
name: BitNova
description: "BitNova is a POLISH Semi-Private Torrent Tracker for 0DAY / GENERAL"
language: pl-PL
type: semi-private
encoding: UTF-8
links:
- https://bitnova.info/
caps:
categorymappings:
- {id: 1, cat: PC, desc: "Programy"}
- {id: 2, cat: PC/0day, desc: "Programy dla Windows"}
- {id: 3, cat: PC, desc: "Programy dla Linux"}
- {id: 4, cat: PC/Mac, desc: "Programy dla Mac"}
- {id: 5, cat: TV/Anime, desc: "Anime"}
- {id: 6, cat: Books, desc: "eBooki"}
- {id: 8, cat: Movies, desc: "Dla dzieci"}
- {id: 9, cat: Movies, desc: "Filmy"}
- {id: 10, cat: Movies/SD, desc: "Filmy (S)VCD"}
- {id: 11, cat: Movies/SD, desc: "DivX/XviD"}
- {id: 12, cat: Movies/DVD, desc: "Filmy DVD"}
- {id: 13, cat: Movies/BluRay, desc: "Filmy HDDVD/BluRay"}
- {id: 14, cat: Movies/SD, desc: "Filmy RMVB"}
- {id: 15, cat: Movies/HD, desc: "Filmy x264"}
- {id: 342, cat: Movies/3D, desc: "Filmy 3D"}
- {id: 16, cat: Console, desc: "Gry"}
- {id: 17, cat: Console, desc: "Gry na konsole"}
- {id: 18, cat: PC/Games, desc: "Gry komputerowe"}
- {id: 19, cat: PC/Mobile-Other, desc: "GSM/PDA"}
- {id: 20, cat: PC/Mobile-Other, desc: "GSM/PDA Dodatki"}
- {id: 21, cat: PC/Mobile-Other, desc: "GSM/PDA Filmy"}
- {id: 22, cat: PC/Mobile-Other, desc: "GSM/PDA Gry"}
- {id: 23, cat: PC/Mobile-Other, desc: "GSM/PDA Programy"}
- {id: 24, cat: Audio, desc: "Muzyka"}
- {id: 25, cat: Audio/MP3, desc: "Muzyka Albumy"}
- {id: 26, cat: Audio/Video, desc: "Muzyka Teledyski/Koncerty"}
- {id: 27, cat: Other, desc: "Różne"}
- {id: 28, cat: TV/Sport, desc: "Sport"}
- {id: 29, cat: TV, desc: "TV"}
- {id: 30, cat: XXX, desc: "Erotyka"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
login:
path: login.php?act=login
method: post
inputs:
login: "{{ .Config.username }}"
pass: "{{ .Config.password }}"
remember: 1
error:
- selector: div#errmsg
test:
path: /
selector: a[href^="/login.php?act=logout"]
search:
paths:
- path: search
inputs:
q: "{{ if .Query.Keywords }}{{ .Query.Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
cid: 0
rows:
selector: table#searchRes > tbody > tr
fields:
category:
selector: a[href^="/torrenty/"]
attribute: href
filters:
- name: regexp
args: (\d+)-
title:
selector: a[href^="/torrent/"]
details:
selector: a[href^="/torrent/"]
attribute: href
download:
selector: a[href^="/torrent/"]
attribute: href
filters:
- name: replace
args: ["/torrent/", "/torrent/download/"]
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
grabs:
selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(1)
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
downloadvolumefactor:
text: 1
uploadvolumefactor:
text: 1
# engine v2.0

View File

@@ -0,0 +1,161 @@
---
id: bitofvalor
name: Bit Of Valor
description: "Bit Of Valor is a HUNGARIAN Private Tracker for MOVIES / TV"
language: hu-HU
type: private
encoding: ISO-8859-2
links:
- https://bitvalor.hu/
caps:
categorymappings:
- {id: 26, cat: Books, desc: "E-Book/ENG"}
- {id: 27, cat: Books, desc: "E-Book/HUN"}
- {id: 28, cat: PC/Games, desc: "Játék/ISO"}
- {id: 29, cat: PC/Games, desc: "Játék/RIP"}
- {id: 30, cat: Movies/SD, desc: "Cam/ENG"}
- {id: 31, cat: Movies/SD, desc: "Cam/HUN"}
- {id: 32, cat: Movies/HD, desc: "HD/ENG"}
- {id: 33, cat: Movies/HD, desc: "HD/HUN"}
- {id: 34, cat: Movies/DVD, desc: "Dvd9/HUN"}
- {id: 35, cat: Movies/DVD, desc: "DVD/ENG"}
- {id: 36, cat: Movies/DVD, desc: "DVD/HUN"}
- {id: 37, cat: TV, desc: "Sorozat/ENG"}
- {id: 38, cat: TV, desc: "Sorozat/HUN"}
- {id: 39, cat: Movies/SD, desc: "Xvid/ENG"}
- {id: 40, cat: Movies/SD, desc: "Xvid/HUN"}
- {id: 41, cat: Audio, desc: "Zene/ENG"}
- {id: 42, cat: Audio, desc: "Zene/HUN"}
- {id: 43, cat: Other, desc: "Képek"}
- {id: 44, cat: PC/Mobile-Other, desc: "Mobil"}
- {id: 45, cat: PC, desc: "Program/ISO/RIP"}
- {id: 46, cat: XXX/WEB-DL, desc: "XXX/Film"}
- {id: 47, cat: XXX/ImageSet, desc: "XXX/Kép"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
book-search: [q]
music-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search FreeLeech only
default: false
- name: sort
type: select
label: Sort requested from site
default: 4
options:
1: title
4: added
5: size
7: seeders
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrent oldalankén:</b> setting to <b>100</b> on your account profile.
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div.error
test:
path: /
selector: a[href^="logout.php"]
download:
selectors:
- selector: a[href^="download.php?id="]
attribute: href
search:
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0 active, 1 all, 2 deadonly, 3 freeleech, 4 seedless
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
# does not support imdbid search nor has imdbid link in results
rows:
selector: tr:has(a[onmouseover]):not(:has(td.outer))
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[onmouseover]
details:
selector: a[onmouseover]
attribute: href
poster:
selector: a[onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) "
download:
selector: a[onmouseover]
attribute: href
date:
selector: td:nth-child(4)
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
genre:
selector: i
filters:
- name: replace
args: ["\xA0", " "]
- name: validate
args: "Akció, Animációs, Kaland, Életrajzi, Vígjáték, Krimi, Dokumentum, Dráma, Családi, Fantasztikus, Film-noir, Bünügyi, Történelmi, Horror, Musical, Zenés, Misztikus, Hírek, Valóságshow, Romantikus, Sci-fi, Rövidfilm, Sport, Talkshow, Thriller, Háborús, Bemutató, XXX, Western, 60s, 70s, 80s, 90s, Alternative, Blues, Breaks, Classic, Country, Dance, Electronic, Folk, Funk, Hardcore, Hip.Hop, Haus, Metal, Pop, Pop.Rock, Rock, Soul, Techno, Disco, Trance, Live, Latin, Jazz"
description:
text: "{{ .Result.genre }}"
downloadvolumefactor:
case:
img[src="pic/free.png"]: 0
"*": 1
uploadvolumefactor:
text: 1
minimumseedtime:
# 4 days (as seconds = 4 x 24 x 60 x 60)
text: 345600
# Engine n/a

View File

@@ -1,166 +0,0 @@
---
id: bitpalace
name: Bitpalace
description: "Bitpalace is a Hungarian Private Torrent Tracker for MOVIES / TV / GENERAL"
language: hu-HU
type: private
encoding: UTF-8
links:
- https://bitpalace.cc/
caps:
categorymappings:
- {id: 8, cat: Movies/BluRay, desc: "BLUERAY ENG"}
- {id: 7, cat: Movies/BluRay, desc: "BLUERAY HUN"}
- {id: 15, cat: Movies/DVD, desc: "DVD-R ENG"}
- {id: 2, cat: Movies/DVD, desc: "DVD-R HUN"}
- {id: 9, cat: Books, desc: "Ebook ENG"}
- {id: 5, cat: Books, desc: "Ebook HUN"}
- {id: 40, cat: Other, desc: "EGYÉBB"}
- {id: 16, cat: Movies/HD, desc: "HD ENG"}
- {id: 1, cat: Movies/HD, desc: "HD HUN"}
- {id: 25, cat: TV/Anime, desc: "MESE ENG"}
- {id: 24, cat: TV/Anime, desc: "MESE HUN"}
- {id: 18, cat: PC/Games, desc: "PC game ISO"}
- {id: 21, cat: Console, desc: "PC game KONZOL"}
- {id: 17, cat: PC/Games, desc: "PC game RIP"}
- {id: 27, cat: PC/ISO, desc: "Program ISO"}
- {id: 26, cat: PC/Mobile-Other, desc: "Program MOBIL"}
- {id: 78, cat: PC/0day, desc: "Program RIP"}
- {id: 23, cat: TV/SD, desc: "Sor.DVD-R ENG"}
- {id: 22, cat: TV/SD, desc: "Sor.DVD-R HUN"}
- {id: 14, cat: TV/SD, desc: "Sor.XVID ENG"}
- {id: 4, cat: TV, desc: "Sorozat HUN"}
- {id: 13, cat: Movies/SD, desc: "XVID ENG"}
- {id: 3, cat: Movies/SD, desc: "XVID HUN"}
- {id: 12, cat: XXX/DVD, desc: "XXX DVD-R"}
- {id: 6, cat: XXX/x264, desc: "XXX HD"}
- {id: 10, cat: XXX/ImageSet, desc: "XXX/Képek"}
- {id: 11, cat: XXX/XviD, desc: "XXX XVID"}
- {id: 19, cat: Audio/Video, desc: "ZENE Klipp"}
- {id: 26, cat: Audio/MP3, desc: "ZENE MP3"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Filter 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: login
method: form
form: form[action="/login_check"]
inputs:
_username: "{{ .Config.username }}"
_password: "{{ .Config.password }}"
logout: ""
error:
- selector: h3[style="color:red"]
test:
path: my
selector: a[href="/logout"]
search:
paths:
- path: browse
keywordsfilters:
# the site uses % for wildcard
- name: re_replace
args: ["[^a-zA-Z0-9]+", "%"]
inputs:
$raw: "{{ range .Categories }}cat[]={{.}}&{{end}}"
search: "{{ .Keywords }}"
# 0 active, 1 incldead, 2 onlydead
incldead: 1
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
# does not support imdbid searches
rows:
selector: "table#torrenttable > tbody > tr:has(a[onclick]):not(:contains(\"Törölt\")){{ if .Config.freeleech }}:has(img[src$=\"/freeicon.png\"]){{ else }}{{ end }}"
fields:
categorydesc:
selector: img
attribute: alt
title:
selector: a[onclick]
remove: style
_id:
selector: a[onclick]
attribute: onclick
filters:
- name: regexp
args: (\d+)
details:
text: "details?id={{ .Result._id }}"
download:
text: "/raw/download?id={{ .Result._id }}&name={{ .Result.title }}.torrent"
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
description:
case:
img[src$="/yes.png"]: "Verified"
img[src$="/nincs.png"]: "Unverified"
poster:
selector: img[width="200"][height="250"]
attribute: src
date:
selector: td:nth-last-child(6)
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
size:
selector: td:nth-last-child(5)
grabs:
selector: td:nth-last-child(4)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
downloadvolumefactor:
case:
img[src$="/freeicon.png"]: 0
"*": 1
uploadvolumefactor:
case:
img[src$="/2xup.jpg"]: 2
"*": 1
minimumratio:
text: 1.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# engine n/a

View File

@@ -1,211 +0,0 @@
---
id: bitporn
name: BitPorn
description: "BitPorn is a HUNGARIAN Private Torrent Tracker for 3X"
language: hu-HU
type: private
encoding: UTF-8
links:
- https://bitporn.eu/
caps:
categorymappings:
- {id: 418, cat: XXX, desc: "Amateur"}
- {id: 410, cat: XXX, desc: "Anal"}
- {id: 414, cat: XXX, desc: "Animal"}
- {id: 415, cat: XXX, desc: "Asian"}
- {id: 416, cat: XXX, desc: "BBW"}
- {id: 417, cat: XXX, desc: "BDSM"}
- {id: 419, cat: XXX, desc: "Big Ass"}
- {id: 420, cat: XXX, desc: "Big Tits"}
- {id: 421, cat: XXX, desc: "Black"}
- {id: 447, cat: XXX, desc: "Cartoon"}
- {id: 448, cat: XXX, desc: "Casting"}
- {id: 422, cat: XXX, desc: "Classic"}
- {id: 434, cat: XXX, desc: "Collection"}
- {id: 423, cat: XXX, desc: "Creampie"}
- {id: 424, cat: XXX, desc: "Cumshot"}
- {id: 451, cat: XXX, desc: "Deepthroat"}
- {id: 455, cat: XXX, desc: "Extreme"}
- {id: 460, cat: XXX, desc: "Fansite"}
- {id: 454, cat: XXX, desc: "Family"}
- {id: 425, cat: XXX, desc: "Feature"}
- {id: 426, cat: XXX, desc: "Fetish"}
- {id: 457, cat: XXX, desc: "Fisting"}
- {id: 453, cat: XXX, desc: "Gangbang"}
- {id: 459, cat: XXX, desc: "Game"}
- {id: 427, cat: XXX, desc: "Gay / Bi"}
- {id: 412, cat: XXX, desc: "Hair"}
- {id: 411, cat: XXX, desc: "Hardcore"}
- {id: 456, cat: XXX, desc: "HiddenCam"}
- {id: 428, cat: XXX, desc: "Homemade"}
- {id: 429, cat: XXX, desc: "Interracial"}
- {id: 430, cat: XXX, desc: "Lesbian"}
- {id: 431, cat: XXX, desc: "Magyar"}
- {id: 432, cat: XXX, desc: "Masturbation"}
- {id: 433, cat: XXX, desc: "Mature"}
- {id: 435, cat: XXX, desc: "Milf"}
- {id: 436, cat: XXX, desc: "Old and Young"}
- {id: 437, cat: XXX, desc: "Parody"}
- {id: 449, cat: XXX, desc: "Pictures"}
- {id: 438, cat: XXX, desc: "Pissing"}
- {id: 439, cat: XXX, desc: "POV"}
- {id: 440, cat: XXX, desc: "Pregnant"}
- {id: 452, cat: XXX, desc: "Public"}
- {id: 441, cat: XXX, desc: "Shemale"}
- {id: 442, cat: XXX, desc: "Softcore"}
- {id: 443, cat: XXX, desc: "Squirt"}
- {id: 444, cat: XXX, desc: "Straight"}
- {id: 445, cat: XXX, desc: "Teen"}
- {id: 450, cat: XXX, desc: "Threesome"}
- {id: 446, cat: XXX, desc: "VR"}
- {id: 458, cat: XXX, desc: "Uncategorized"}
modes:
search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- 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
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Inactive accounts will be deleted based on the following rules:<ul><li>Elite-ranked or higher-ranked accounts are never deleted after parking (in the control panel).</li><li>Veteran-ranked or higher-ranked accounts are never deleted.</li><li>Parked accounts are deleted if users haven't logged in for more than 400 days.</li><li>Non-parked accounts are deleted if users haven't logged in for more than 150 days.</li><li>Accounts with both uploaded and downloaded quantities at 0 will be deleted if users haven't logged in for more than 100 consecutive days.</li></ul>"
login:
path: takelogin.php
method: post
inputs:
secret: ""
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("Bejelentkezés sikertelen!"))
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0 incldead, 1 active, 2 dead
incldead: 0
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
# 0 title, 1 descr, 3 uploader, 4 imdburl
search_area: 0
# 0 AND, 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
notnewword: 1
rows:
selector: table.torrents > tbody > tr:has(a[href^="details.php?id="])
fields:
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
title_default:
selector: a[href^="details.php?id="]
title:
selector: a[title][href^="details.php?id="]
attribute: title
optional: true
default: "{{ .Result.title_default }}"
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
poster:
selector: img[data-src]
attribute: data-src
date_elapsed:
# time type: time elapsed (default)
selector: td.rowfollow:nth-child(4) > span[title]
attribute: title
optional: true
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
date_added:
# time added
selector: td.rowfollow:nth-child(4):not(:has(span))
optional: true
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-ddHH:mm:ss zzz"
date:
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
size:
selector: td.rowfollow:nth-child(5)
seeders:
selector: td.rowfollow:nth-child(6)
leechers:
selector: td.rowfollow:nth-child(7)
grabs:
selector: td.rowfollow:nth-child(8)
downloadvolumefactor:
case:
img.pro_free: 0
img.pro_free2up: 0
img.pro_50pctdown: 0.5
img.pro_50pctdown2up: 0.5
img.pro_30pctdown: 0.3
"*": 1
uploadvolumefactor:
case:
img.pro_50pctdown2up: 2
img.pro_free2up: 2
img.pro_2up: 2
"*": 1
minimumratio:
text: 1.0
minimumseedtime:
# 48 hours (as seconds = 2 x 24 x 60 x 60)
text: 172800
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.8.5 2023-07-06

View File

@@ -33,7 +33,7 @@ caps:
settings:
- name: stripcyrillic
type: checkbox
label: Strip Cyrillic Letters
label: Strip Russian Letters
default: false
- name: addrussiantotitle
type: checkbox

View File

@@ -8,9 +8,14 @@ encoding: UTF-8
requestDelay: 2
links:
- https://bitsearch.to/
- https://bitsearch.mrunblock.life/
- https://bitsearch.nocensor.click/
legacylinks:
- https://bitsearch.nocensor.cloud/
- https://bitsearch.mrunblock.bond/
- https://bitsearch.nocensor.biz/
- https://bitsearch.nocensor.sbs/
- https://bitsearch.nocensor.world/
- https://bitsearch.nocensor.lol/
- https://bitsearch.mrunblock.guru/
caps:
categories:
@@ -36,7 +41,7 @@ caps:
"Other/Program": PC/0day
"Other/Sourcecode": PC
"Other/Source Code": PC
"Other/Video": Other
"Other/Video": TV
Softwares: PC/0day
"Softwares/Windows": PC/0day
TV: TV
@@ -51,10 +56,6 @@ caps:
book-search: [q]
settings:
- name: prefer_magnet_links
type: checkbox
label: Prefer Magnet Links
default: false
- name: sort
type: select
label: Sort requested from site
@@ -70,10 +71,6 @@ settings:
options:
desc: desc
asc: asc
- name: info_category_8000
type: info
label: About BitSearch Categories
default: BitSearch does not properly return categories in its search results for some releases.</br>To add to your Apps' Torznab indexer, you will need to include the 8000(Other) category.
search:
paths:
@@ -84,7 +81,6 @@ search:
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
limit: 100
page: 1
keywordsfilters:
- name: re_replace
@@ -97,19 +93,12 @@ search:
category:
selector: a.category
title:
selector: h5 a
selector: h5
details:
selector: h5 a
attribute: href
download_optional:
selector: a.dl-torrent
attribute: href
optional: true
download:
text: "{{ if .Config.prefer_magnet_links }}{{ else }}{{ .Result.download_optional }}{{ end }}"
optional: true
magnet:
selector: a[href^="magnet:?xt"]
selector: a.dl-torrent
attribute: href
infohash:
selector: a[href^="magnet:?xt"]
@@ -117,9 +106,8 @@ search:
filters:
- name: regexp
args: ([A-F|a-f|0-9]{40})
grabs_dot:
selector: div.stats div:has(img[alt="Download"]):contains(".")
optional: true
grabs:
selector: div.stats div:has(img[alt="Download"])
filters:
- name: replace
args: [".", ""]
@@ -127,41 +115,10 @@ search:
args: ["K", "00"]
- name: replace
args: ["M", "00000"]
grabs_nodot:
selector: div.stats div:has(img[alt="Download"]):not(:contains("."))
optional: true
filters:
- name: replace
args: ["K", "000"]
- name: replace
args: ["M", "000000"]
grabs:
text: "{{ if or .Result.grabs_dot .Result.grabs_nodot }}{{ or .Result.grabs_dot .Result.grabs_nodot }}{{ else }}0{{ end }}"
size:
selector: div.stats div:has(img[alt="Size"])
seeders_dot:
selector: div.stats div:has(img[alt="Seeder"]):contains(".")
optional: true
filters:
- name: replace
args: [".", ""]
- name: replace
args: ["K", "00"]
- name: replace
args: ["M", "00000"]
seeders_nodot:
selector: div.stats div:has(img[alt="Seeder"]):not(:contains("."))
optional: true
filters:
- name: replace
args: ["K", "000"]
- name: replace
args: ["M", "000000"]
seeders:
text: "{{ if or .Result.seeders_dot .Result.seeders_nodot }}{{ or .Result.seeders_dot .Result.seeders_nodot }}{{ else }}0{{ end }}"
leechers_dot:
selector: div.stats div:has(img[alt="Leecher"]):contains(".")
optional: true
selector: div.stats div:has(img[alt="Seeder"])
filters:
- name: replace
args: [".", ""]
@@ -169,16 +126,15 @@ search:
args: ["K", "00"]
- name: replace
args: ["M", "00000"]
leechers_nodot:
selector: div.stats div:has(img[alt="Leecher"]):not(:contains("."))
optional: true
leechers:
selector: div.stats div:has(img[alt="Leecher"])
filters:
- name: replace
args: ["K", "000"]
args: [".", ""]
- name: replace
args: ["M", "000000"]
leechers:
text: "{{ if or .Result.leechers_dot .Result.leechers_nodot }}{{ or .Result.leechers_dot .Result.leechers_nodot }}{{ else }}0{{ end }}"
args: ["K", "00"]
- name: replace
args: ["M", "00000"]
date:
selector: div.stats div:has(img[alt="Date"])
filters:

View File

@@ -0,0 +1,186 @@
---
id: bitsexy
name: BitSexy
description: "BitSexy is a Private Torrent Tracker for 3X"
language: en-US
type: private
encoding: UTF-8
links:
- https://bitsexy.org/
caps:
categorymappings:
- {id: 33, cat: XXX, desc: "Amateur"}
- {id: 19, cat: XXX, desc: "Anal"}
- {id: 16, cat: XXX, desc: "Anime"}
- {id: 17, cat: XXX, desc: "Asian"}
- {id: 26, cat: XXX, desc: "BBW"}
- {id: 22, cat: XXX, desc: "BDSM"}
- {id: 18, cat: XXX, desc: "Big Tits"}
- {id: 43, cat: XXX, desc: "Black"}
- {id: 46, cat: XXX, desc: "Classic"}
- {id: 41, cat: XXX, desc: "Creampie"}
- {id: 28, cat: XXX, desc: "DVD-R"}
- {id: 21, cat: XXX, desc: "Ebony"}
- {id: 20, cat: XXX, desc: "Extreme"}
- {id: 44, cat: XXX, desc: "Feature"}
- {id: 31, cat: XXX, desc: "Fetish"}
- {id: 35, cat: XXX, desc: "Foreign"}
- {id: 53, cat: XXX, desc: "Gay"}
- {id: 30, cat: XXX, desc: "Gonzo"}
- {id: 51, cat: XXX, desc: "Handjob"}
- {id: 36, cat: XXX, desc: "Hardcore"}
- {id: 24, cat: XXX, desc: "Interracial"}
- {id: 37, cat: XXX, desc: "Latina"}
- {id: 25, cat: XXX, desc: "Lesbian"}
- {id: 52, cat: XXX, desc: "Magazines"}
- {id: 49, cat: XXX, desc: "Masturbation"}
- {id: 23, cat: XXX, desc: "Mature"}
- {id: 40, cat: XXX, desc: "MILF"}
- {id: 38, cat: XXX, desc: "Oral"}
- {id: 42, cat: XXX, desc: "Orgy"}
- {id: 29, cat: XXX, desc: "Other"}
- {id: 39, cat: XXX, desc: "Packs"}
- {id: 27, cat: XXX, desc: "PC Games"}
- {id: 15, cat: XXX, desc: "Pics"}
- {id: 48, cat: XXX, desc: "POV"}
- {id: 50, cat: XXX, desc: "Public"}
- {id: 14, cat: XXX, desc: "Reality"}
- {id: 47, cat: XXX, desc: "Shemale"}
- {id: 45, cat: XXX, desc: "Softcore"}
- {id: 55, cat: XXX, desc: "Solo"}
- {id: 54, cat: XXX, desc: "Squirt"}
- {id: 32, cat: XXX, desc: "Teens"}
- {id: 34, cat: XXX, desc: "Virtual"}
modes:
search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- 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
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img.cimage
input: captcha
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table.main:contains("failed")
test:
path: my.php
selector: a[href$="logout.php"]
search:
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0 active, 1 incldead, 2 onlydead, 3 freeleech, 4 480p, 5 720p, 6 1080p, 7 4k
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
keywordsfilters:
- name: re_replace
args: ["(\\w+)", "+$1"] # prepend + to each word
rows:
selector: div.torrentrow:has(a[href^="download.php?torrent="])
filters:
- name: andmatch
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?torrent="]
attribute: href
poster:
selector: a[onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) width"
files:
selector: div.torrenttable:nth-last-child(7)
date_day:
# Today 02:40 PM
# Yesterday 09:10 AM
selector: div.torrenttable:nth-last-child(5):contains("day")
# auto adjusted by site account profile
optional: true
date_year:
# Jul 4 2019 08:04 AM
selector: div.torrenttable:nth-last-child(5):not(:contains("day"))
# auto adjusted by site account profile
optional: true
filters:
- name: dateparse
args: "MMM d yyyy hh:mm tt"
date:
text: "{{ if or .Result.date_day .Result.date_year }}{{ or .Result.date_day .Result.date_year }}{{ else }}now{{ end }}"
size:
selector: div.torrenttable:nth-last-child(4)
grabs:
selector: div.torrenttable:nth-last-child(3)
seeders:
selector: div.torrenttable:nth-last-child(2)
leechers:
selector: div.torrenttable:nth-last-child(1)
downloadvolumefactor:
case:
img[src$="/pic/freeleech.gif"]: 0
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 1.0
minimumseedtime:
# 1 days (as seconds = 1 x 24 x 60 x 60)
text: 86400
# TBdev

View File

@@ -176,6 +176,7 @@ search:
uploadvolumefactor:
text: 1
description:
optional: true
selector: font[color="#990000"]
minimumratio:
text: 1.0

View File

@@ -14,6 +14,7 @@ legacylinks:
caps:
categorymappings:
- {id: 56, cat: Movies, desc: "BTRG"}
- {id: 95, cat: Movies, desc: "BTRG HMAX"}
- {id: 57, cat: Movies, desc: "Yerli Dizi"}
- {id: 62, cat: Movies, desc: "Yab@ncı Dizi"}
- {id: 63, cat: Movies, desc: "Türkçe Film"}
@@ -28,14 +29,12 @@ caps:
- {id: 91, cat: TV, desc: "Prime Video"}
- {id: 93, cat: TV, desc: "Gain"}
- {id: 94, cat: TV, desc: "ATVP"}
- {id: 95, cat: Movies, desc: "HMAX"}
- {id: 98, cat: Movies, desc: "PUHUTV"}
- {id: 58, cat: Movies, desc: "Film"}
- {id: 72, cat: Movies, desc: "Belgesel"}
- {id: 60, cat: Movies/3D, desc: "3D"}
- {id: 76, cat: Movies/UHD, desc: "4K UHD"}
- {id: 80, cat: TV/Sport, desc: "Formula-1"}
- {id: 45, cat: Other, desc: "Eğitim/Prog"}
- {id: 45, cat: Other, desc: "Eğitim / Prog"}
- {id: 1, cat: Movies, desc: "Filmler"}
- {id: 14, cat: Movies/3D, desc: "3D Film"}
- {id: 77, cat: Movies/UHD, desc: "4K UHD"}
@@ -68,6 +67,7 @@ caps:
- {id: 88, cat: Console/Other, desc: "Oyun NEO-GEO"}
- {id: 89, cat: Console/Wii, desc: "Oyun Nintendo Wii"}
- {id: 6, cat: PC/0day, desc: "Program"}
- {id: 92, cat: PC/Mobile-Android, desc: "Android"}
- {id: 47, cat: Other, desc: "Resimler"}
- {id: 48, cat: TV, desc: "Televizyon"}
- {id: 49, cat: TV/HD, desc: "Tv HD"}
@@ -96,7 +96,7 @@ settings:
- name: info
type: info
label: Layout
default: "<ul><li>Only the English Classic profile is supported.</li><li>Make sure to set the <b>Torrent Listing (Listeleme Biçimi)</b> option in your profile to <b>Classic (Klasik)</b></li><li>And set the <b>Language (Dil)</b> to <b>English</b></li><li>Using the <i>Modern</i> theme will prevent results, and using <i>Turkish</i> will prevent upload dates.</li></ul>"
default: "<ol><li>Only the English Classic profile is supported.</li><li>Make sure to set the <b>Torrent Listing (Listeleme Biçimi)</b> option in your profile to <b>Classic (Klasik)</b></li><li>And set the <b>Language (Dil)</b> to <b>English</b></li><li>Using the <i>Modern</i> theme will prevent results, and using <i>Turkish</i> will prevent upload dates.</li></ol>"
- name: sort
type: select
label: Sort requested from site
@@ -112,10 +112,6 @@ settings:
options:
desc: desc
asc: asc
- name: info_results
type: info
label: Search results
default: "If you are getting the error <b>Found no results while trying to browse this tracker</b> then first access the site with your browser and check that you are not being forced to change your password because it has expired after 365 days."
login:
path: ?p=home&pid=1

View File

@@ -10,53 +10,21 @@ links:
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Фильмы Films"}
- {id: 2, cat: TV/Anime, desc: "Мультфильмы Cartoons"}
- {id: 3, cat: TV/Documentary, desc: "Документалистика Documentary"}
- {id: 4, cat: Audio, desc: "Шоу/Музыка Show/Music"}
- {id: 5, cat: TV/Sport, desc: "Спорт Sport"}
- {id: 6, cat: TV, desc: "Сериалы TV Series"}
- {id: 7, cat: XXX, desc: "Эротика Erotica"}
- {id: 8, cat: Other, desc: "Дэмо/Misc Demo/Misc"}
- {id: 1, cat: Movies, desc: "Films"}
- {id: 2, cat: TV/Anime, desc: "Cartoons"}
- {id: 3, cat: TV/Documentary, desc: "documentary"}
- {id: 4, cat: Audio, desc: "Show / Music"}
- {id: 5, cat: TV/Sport, desc: "Sport"}
- {id: 6, cat: TV, desc: "TV series"}
- {id: 7, cat: XXX, desc: "erotica"}
- {id: 8, cat: Other, desc: "Demo / Misc"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
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: 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
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
login:
path: takelogin.php
method: post
@@ -65,10 +33,8 @@ login:
password: "{{ .Config.password }}"
error:
- selector: div.error
message:
text: "Error during login. Its likely your username or password is incorrect."
test:
path: /
path: browse.php
selector: a[href="logout.php"]
search:
@@ -76,63 +42,47 @@ search:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
# search in title
search: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# search in description
dsearch: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}"
# 0 active, 1 incldead, 2 onlydead, 3 gold, 5 diamond, 4 without seeders
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
genre: "{{ .Query.Genre }}"
search: "{{ .Keywords }}"
# 0 active, 1 incldead, 2 onlydead 3 gold, 4 without seeders, 5 diamond
incldead: 1
# or, and
stype: and
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table[class="embedded"][cellspacing="0"][cellpadding="5"][width="100%"] > tbody#highlighted > tr:has(a[href^="details.php?id="])
selector: table[class="embedded"][cellspacing="0"][cellpadding="5"][width="100%"] > tbody > tr:has(a[href^="details.php?id="])
fields:
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
grabs:
selector: td:nth-child(7) > nobr > a, td:nth-child(7) > nobr > b
date:
selector: div#frame > div#cleft
remove: a
filters:
- name: append
args: " +03:00" # MSK
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
selector: a[href*="&snatched=1#snatched"]
size:
selector: td:nth-child(7)
remove: a
date:
selector: div#cleft > font
seeders:
selector: td:nth-child(5)
leechers:
selector: td:nth-child(6)
genre:
selector: div#cleft
poster:
selector: a.tname
attribute: onmouseover
filters:
- name: replace
args: ["Жанр:", ""]
description:
text: "{{ .Result.genre }}"
- name: regexp
args: src=([^\s]+)
downloadvolumefactor:
case:
img[src="pic/diamond.png"]: 0
@@ -144,4 +94,4 @@ search:
case:
img[src="pic/diamond.png"]: 2
"*": 1
# TBDev v2.1.12
# engine n/a

View File

@@ -1,126 +0,0 @@
---
id: blueroms
name: BlueRoms
description: "BlueRoms is a Public Torrent Tracker for ROMS"
language: en-US
type: public
encoding: UTF-8
links:
- https://www.blueroms.ws/
caps:
categorymappings:
- {id: "/3ds", cat: Console/3DS, desc: "3DS"}
- {id: "/arcade", cat: Console/Other, desc: "Arcade"}
- {id: "/dreamcast", cat: Console/Other, desc: "Dreamcast"}
- {id: "/nds", cat: Console/Other, desc: "DS"}
- {id: "/gba", cat: Console/Other, desc: "Game Boy Advance"}
- {id: "/gamecube", cat: Console/Other, desc: "GameCube"}
- {id: "/genesis", cat: Console/Other, desc: "Mega Drive - Genesis"}
- {id: "/neogeo", cat: Console/Other, desc: "Neo Geo"}
- {id: "/n64", cat: Console/NDS, desc: "Nintendo 64"}
- {id: "/switch", cat: Console/NDS, desc: "Nintendo Switch"}
- {id: "/ps1", cat: Console/PS3, desc: "PlayStation"}
- {id: "/ps2", cat: Console/PS3, desc: "PlayStation 2"}
- {id: "/ps3", cat: Console/PS3, desc: "PlayStation 3"}
- {id: "psp", cat: Console/PSP, desc: "PlayStation Portable"}
- {id: "/saturn", cat: Console/Other, desc: "Saturn"}
- {id: "/snes", cat: Console/NDS, desc: "Super Nintendo"}
- {id: "/wii", cat: Console/Wii, desc: "Wii"}
- {id: "/xbox", cat: Console/XBox, desc: "Xbox"}
modes:
search: [q]
settings:
- name: sort
type: select
label: Sort requested from site
default: date
options:
date: created
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
download:
selectors:
- selector: a[href^="magnet:?xt="]
attribute: href
search:
paths:
# https://www.blueroms.ws/search?page=1&q=&g=0&p=0&ord=desc&at=date
- path: search
allowEmptyInputs: true
inputs:
page: 1
q: "{{ .Keywords }}"
# genre: 0 all, 200 action, 207 adventure, etc
g: 0
# categories does not support multi selection so defaulting to all
p: 0
ord: "{{ .Config.type }}"
at: "{{ .Config.sort }}"
rows:
selector: table.table-striped > tbody > tr
fields:
category:
selector: td:nth-child(1) a
attribute: href
_platform:
selector: td:nth-child(1)
title:
selector: td:nth-child(2)
filters:
- name: append
args: " - {{ .Result._platform }}"
details:
selector: td:nth-child(2) a
attribute: href
download:
selector: td:nth-child(3) a
attribute: href
size:
selector: td:nth-child(4)
date_year:
selector: td:nth-child(5):not(:contains("-"))
optional: true
filters:
- name: dateparse
args: "yyyy"
date_month:
selector: td:nth-child(5):contains("-")
optional: true
filters:
- name: regexp
args: (\d{4}-\d{2})
- name: dateparse
args: "yyyy-MM"
date_day:
selector: td:nth-child(5):contains("-")
optional: true
filters:
- name: regexp
args: (\d{4}-\d{2}-\d{2})
- name: dateparse
args: "yyyy-MM-dd"
date:
text: "{{ if or .Result.date_year .Result.date_day .Result.date_month }}{{ or .Result.date_year .Result.date_day .Result.date_month }}{{ else }}now{{ end }}"
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -1,181 +0,0 @@
---
id: bluraytracker
name: BlurayTracker
description: "BlurayTracker is a CZECH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: cs-CZ
type: private
encoding: UTF-8
links:
- https://bluraytracker.cz/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "-----Filmy-----"}
- {id: 34, cat: Movies, desc: " |- Filmy CZ/SK Dabing"}
- {id: 33, cat: Movies, desc: " |- Filmy CZ/SK Titulky"}
- {id: 49, cat: Movies/HD, desc: " |- HD/FHD Filmy"}
- {id: 17, cat: Movies/UHD, desc: " |- 4k/UHD Filmy "}
- {id: 31, cat: Movies/BluRay, desc: " |- Bluray DB/BD/DVD"}
- {id: 51, cat: Movies/3D, desc: " |- 3D Filmy"}
- {id: 14, cat: Movies/SD, desc: " |- DivX"}
- {id: 45, cat: Movies/Other, desc: " |- Kreslené/Anime"}
- {id: 16, cat: Movies/SD, desc: " |- CAM/Kino"}
- {id: 40, cat: TV, desc: "-----TV-----"}
- {id: 32, cat: TV, desc: " |- Serialy CZ/SK/EN"}
- {id: 47, cat: TV, desc: " |- Serialy"}
- {id: 38, cat: TV/Documentary, desc: " |- Dokumenty / TV Reality"}
- {id: 35, cat: TV/Sport, desc: " |- Sport"}
- {id: 6, cat: PC, desc: "Aplikace/Programy"}
- {id: 18, cat: PC/0day, desc: " |- Programy PC"}
- {id: 19, cat: PC/Mac, desc: " |- Programy MacOS"}
- {id: 7, cat: Audio, desc: "-----Hudba-----"}
- {id: 39, cat: Audio/Audiobook, desc: " |- Mluvene Slovo"}
- {id: 21, cat: Audio, desc: " |- MP3/FLAC"}
- {id: 43, cat: Audio/Other, desc: " |- SoundTrack"}
- {id: 2, cat: PC/Games, desc: "--Hry--"}
- {id: 3, cat: Console/PS3, desc: " |- Sony PS"}
- {id: 4, cat: Console/Wii, desc: " |- Wii"}
- {id: 26, cat: Console/XBox, desc: " |- XboX"}
- {id: 27, cat: PC/Games, desc: " |- PC"}
- {id: 28, cat: Console/NDS, desc: " |- Nintendo"}
- {id: 42, cat: Books, desc: "Knihy A Časopisy"}
- {id: 36, cat: Other, desc: "Ostatní"}
- {id: 46, cat: XXX, desc: "XXX (18+)"}
# not listed
- {id: 41, cat: Movies, desc: "VIP Torrent"}
- {id: 48, cat: Movies, desc: " |- RLS"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Filter freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: added
options:
added: created
seeders: seeders
size: size
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: ?p=home&pid=1
method: form
form: form#sls_form
submitpath: ajax/login.php
inputs:
action: login
loginbox_membername: "{{ .Config.username }}"
loginbox_password: "{{ .Config.password }}"
loginbox_remember: true
error:
- selector: div.error
test:
path: ?p=home&pid=1
selector: div#member_info_bar
search:
paths:
- path: /
inputs:
p: torrents
pid: 32
$raw: "{{ range .Categories }}cid[]={{.}}&{{end}}"
keywords: "{{ .Keywords }}"
# name, description, both, uploader
search_type: name
"sortOptions[sortBy]": "{{ .Config.sort }}"
"sortOptions[sortOrder]": "{{ .Config.type }}"
# does not support imdbid search but has imdbid links in results.
error:
- selector: div.error:not(:contains("There are no results found."))
rows:
selector: "div.torrent-box[id^=\"torrent_\"]{{ if .Config.freeleech }}:has(img[src$=\"/torrent_free.png\"]){{ else }}{{ end }}"
fields:
category:
selector: a[href*="?p=torrents&pid=10&cid="]
attribute: href
filters:
- name: querystring
args: cid
title:
selector: a[href*="?p=torrents&pid=10&action=details&tid="]
details:
selector: a[href*="?p=torrents&pid=10&action=details&tid="]
attribute: href
download:
selector: a[href*="?p=torrents&pid=10&action=download&tid="]
attribute: href
magnet:
selector: a[href^="magnet:?xt="]
attribute: href
optional: true
poster:
selector: a[href*="data/torrents/torrent_images/"]
attribute: href
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
size:
selector: a[rel="torrent_size"]
grabs:
selector: a[rel="times_completed"]
seeders:
selector: a[rel="torrent_seeders"]
leechers:
selector: a[rel="torrent_leechers"]
date_day:
selector: div.torrentOwner:contains("day")
# auto adjusted by site account profile
optional: true
filters:
- name: regexp
args: "Uploaded (.+?) by"
- name: fuzzytime
date_year:
selector: div.torrentOwner:contains("-")
# auto adjusted by site account profile
optional: true
filters:
- name: regexp
args: "Uploaded (.+?) by"
- name: dateparse
args: "dd-MM-yyyy HH:mm"
date_unix:
selector: div.torrentOwner abbr
optional: true
attribute: data-time
date:
text: "{{ if or .Result.date_day .Result.date_year .Result.date_unix }}{{ or .Result.date_day .Result.date_year .Result.date_unix }}{{ else }}now{{ end }}"
downloadvolumefactor:
case:
img[src$="/torrent_free.png"]: 0
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 0.5
# TSUE 2.2

View File

@@ -29,15 +29,11 @@ settings:
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://blutopia.cc/\" target=\"_blank\">Blutopia</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
default: "Find or Generate a new API Token by accessing your <a href=\"https://blutopia.cc/\" target=\"_blank\">Blutopia</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
@@ -54,33 +50,28 @@ settings:
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Your membership requires that you stay active at Blutopia. To not get disabled, you are required to login to the site at least once every 30 days or be actively seeding at least 1 torrent."
login:
path: /api/torrents
method: get
inputs:
api_token: "{{ .Config.apikey }}"
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://github.com/HDInnovations/UNIT3D-Community-Edition/wiki/Torrent-API-(UNIT3D-v8.x.x)
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php#L476
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
- path: "/api/torrents/filter"
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
api_token: "{{ .Config.apikey }}"
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
@@ -104,15 +95,8 @@ search:
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
selector: name
details:
selector: details_link
download:
@@ -141,6 +125,8 @@ search:
args: [" & ", "_&_"]
description:
text: "{{ .Result.genre }}"
files:
selector: num_file
seeders:
selector: seeders
leechers:
@@ -157,12 +143,7 @@ search:
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
downloadvolumefactor:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
@@ -172,20 +153,16 @@ search:
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
uploadvolumefactor:
# api returns 0=false, 1=true
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
0: 1 # normal
1: 2 # double
# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 7 days (as seconds = 7 x 24 x 60 x 60)
# 7 day (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 8.3.4
# json UNIT3D 7.0.0b

View File

@@ -5,7 +5,6 @@ description: "BootyTape is a Semi-Private site for 3X"
language: en-US
type: semi-private
encoding: UTF-8
requestDelay: 3
links:
- https://ssl.bootytape.com/

View File

@@ -27,7 +27,6 @@ caps:
- {id: 14, cat: TV/Sport, desc: "HD"}
- {id: 7, cat: TV/Sport, desc: "Misc"}
- {id: 18, cat: TV/Sport, desc: "Instructional"}
- {id: 19, cat: TV/Documentary, desc: "Documentary"}
modes:
search: [q]

View File

@@ -0,0 +1,139 @@
---
id: broadcity
name: BroadCity
description: "BroadCity is a TURKISH Private Torrent Tracker for MOVIES and TV"
language: tr-TR
type: private
encoding: UTF-8
links:
- https://broadcity.in/ # site is forcing to https
legacylinks:
- http://broadcity.in/
caps:
categorymappings:
- {id: 1, cat: Movies/UHD, desc: "UHD"}
- {id: 2, cat: Movies/UHD, desc: "UHD - BluRay"}
- {id: 8, cat: Movies/UHD, desc: "UHD - TV"}
- {id: 6, cat: Movies/WEB-DL, desc: "UHD - WEB-DL"}
- {id: 16, cat: Movies/UHD, desc: "UHD - WEBRip"}
- {id: 31, cat: Movies/BluRay, desc: "BluRay Disk"}
- {id: 3, cat: Movies/HD, desc: "HD"}
- {id: 25, cat: Movies/3D, desc: "HD - 3D"}
- {id: 4, cat: Movies/HD, desc: "HD - BluRay"}
- {id: 7, cat: Movies/HD, desc: "HD - TV"}
- {id: 5, cat: Movies/WEB-DL, desc: "HD - WEB-DL"}
- {id: 14, cat: Movies/HD, desc: "HD - WEBRip"}
- {id: 40, cat: Movies/HD, desc: "PTer"}
- {id: 9, cat: Movies/SD, desc: "SD"}
- {id: 23, cat: Movies/SD, desc: "SD - BluRay"}
- {id: 10, cat: Movies/DVD, desc: "SD - DVD"}
- {id: 36, cat: Movies/SD, desc: "SD - DVDRip"}
- {id: 12, cat: Movies/SD, desc: "SD - TV"}
- {id: 13, cat: Movies/WEB-DL, desc: "SD - WEB-DL"}
- {id: 15, cat: Movies/SD, desc: "SD - WEBRip"}
- {id: 17, cat: TV, desc: "TV"}
- {id: 26, cat: TV/Other, desc: "TV - TV Program"}
- {id: 19, cat: TV, desc: "TV - Yabanci Dizi"}
- {id: 18, cat: TV, desc: "TV - Yerli Dizi"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-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><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
- name: freeleech
type: checkbox
label: Filter freeleech only
default: false
login:
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href*="/logout.php?logouthash="]
download:
before:
path: takethanks.php
method: post
inputs:
torrentid: "{{ .DownloadUri.Query.id }}"
selectors:
- selector: a[href*="download.php?id="]
attribute: href
search:
paths:
- path: browse.php
inputs:
# does not support multi categories so defaulting to ALL
do: search
keywords: "{{ .Keywords }}"
category: 0
search_type: t_name
include_dead_torrents: yes
rows:
selector: "table#sortabletable tbody tr:has(div[id^=\"port-target-\"]){{ if .Config.freeleech }}:has(img[src$=\"/freedownload.gif\"]){{ else }}{{ end }}"
fields:
category:
selector: a[href*="browse.php?category="]
attribute: href
filters:
- name: querystring
args: category
title:
selector: div[id^="port-target-"] a
details:
selector: div[id^="port-target-"] a
attribute: href
download:
selector: div[id^="port-target-"] a
attribute: href
poster:
selector: div[id^="port-content-"] img
attribute: src
date:
selector: td:nth-child(2)
filters:
- name: regexp
args: (\d{2}-\d{2}-\d{4} \d{2}:\d{2})
- name: append
args: " +03:00" # TRT
- name: dateparse
args: "dd-MM-yyyy HH:mm zzz"
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img[src$="/freedownload.gif"]: 0
img[src$="/silverdownload.gif"]: 0.5
"*": 1
uploadvolumefactor:
case:
img[src$="/x2.gif"]: 2
"*": 1
minimumratio:
text: 0.5
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# TS Special Edition v.7.5

View File

@@ -1,32 +1,27 @@
---
id: f1carreras-api
name: F1Carreras (API)
description: "F1Carreras is a Spanish Private Torrent Tracker for Motor Racing TV Releases"
language: es-MX
id: brsociety-api
name: BrSociety (API)
description: "BrSociety (SemeandoCC) is a BRAZILIAN Private Torrent Tracker for E-LEARNING"
language: pt-BR
type: private
encoding: UTF-8
links:
- https://f1carreras.xyz/
- https://brsociety.club/
caps:
categorymappings:
- {id: 1, cat: TV/Sport, desc: "Movies"}
- {id: 2, cat: TV/Sport, desc: "TV"}
- {id: 3, cat: TV/Sport, desc: "Formula 1"}
- {id: 4, cat: TV/Sport, desc: "IndyCar Series"}
- {id: 5, cat: TV/Sport, desc: "Formula 2"}
- {id: 6, cat: TV/Sport, desc: "Formula E"}
- {id: 7, cat: TV/Sport, desc: "MotoGP"}
- {id: 8, cat: TV/Sport, desc: "Nascar"}
- {id: 9, cat: TV/Sport, desc: "Formula 3"}
- {id: 10, cat: TV/Sport, desc: "DTM"}
- {id: 11, cat: TV/Sport, desc: "Rally"}
- {id: 12, cat: TV/Sport, desc: "WEC"}
- {id: 13, cat: TV/Sport, desc: "Other Series"}
- {id: 1, cat: Other, desc: "Cursos"}
- {id: 2, cat: Books/EBook, desc: "eBooks"}
- {id: 5, cat: Books/Mags, desc: "Revistas"}
- {id: 3, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 4, cat: Other, desc: "Arquivos de Auxilio"}
- {id: 6, cat: Other, desc: "Graduação"}
- {id: 7, cat: TV/Documentary, desc: "Documentários"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
tv-search: [q, season, ep]
book-search: [q]
settings:
- name: apikey
@@ -35,7 +30,7 @@ settings:
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://f1carreras.xyz/\" target=\"_blank\">F1Carreras</a> account <i>Settings</i> page and clicking on the <b>API Key</b> tab."
default: "Find or Generate a new API Token by accessing your <a href=\"https://brsociety.club/\" target=\"_blank\">BrSociety</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -60,48 +55,40 @@ settings:
login:
path: /api/torrents
method: get
inputs:
api_token: "{{ .Config.apikey }}"
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://github.com/HDInnovations/UNIT3D-Community-Edition/wiki/Torrent-API-(UNIT3D-v8.x.x)
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php#L476
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
- path: "/api/torrents/filter"
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
api_token: "{{ .Config.apikey }}"
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
# disabled due to not being properly mapped
# seasonNumber: "{{ .Query.Season }}"
# episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
- name: re_replace # S2024 to 2024 and S2024E97 to 2024 97
args: ["\\b(?:S(\\d{2,4}))(?:E(\\d{2,4}))?\\b", "$1 $2"]
- name: trim
rows:
selector: data
attribute: attributes
count:
selector: meta.total
fields:
category:
@@ -112,19 +99,11 @@ search:
selector: details_link
download:
selector: download_link
magnet:
selector: magnet_link
optional: true
infohash:
selector: info_hash
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
files:
selector: num_file
seeders:
@@ -154,14 +133,14 @@ search:
100%: 0 # freeleech
"*": 0 # catch errors
uploadvolumefactor:
# api returns False, True
# api returns 0=false, 1=true
selector: double_upload
case:
False: 1 # normal
True: 2 # double
0: 1 # normal
1: 2 # double
minimumratio:
text: 1.0
minimumseedtime:
# 1 day (as seconds = 1 x 24 x 60 x 60)
text: 86400
# json UNIT3D 7.2.5 (custom)
# 4 days (as seconds = 4 x 24 x 60 x 60)
text: 345600
# json UNIT3D 6.5.0 (custom)

View File

@@ -1,238 +0,0 @@
---
id: btarg
name: BTArg
description: "BTArg is an ARGENTINIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: es-AR
type: private
encoding: iso-8859-1
links:
- https://www.btarg.com.ar/
caps:
# use upload page when updating cats, browse.php uses 0a, 0b, etc for cats >10
categorymappings:
- {id: 01, cat: Movies, desc: "Cine Arg."}
- {id: 02, cat: Movies/Foreign, desc: "Cine Int."}
- {id: 03, cat: TV, desc: "TV Arg."}
- {id: 04, cat: TV/Foreign, desc: "TV Int."}
- {id: 05, cat: XXX, desc: "XXX"}
- {id: 06, cat: TV/Anime, desc: "Anime"}
- {id: 07, cat: TV/Sport, desc: "Deportes"}
- {id: 08, cat: Audio/Video, desc: "Video Clips"}
- {id: 09, cat: Audio, desc: "Musica Arg."}
- {id: 10, cat: Audio/Foreign, desc: "Musica Int."}
- {id: 11, cat: Movies/DVD, desc: "DVD-R"}
- {id: 12, cat: PC/Games, desc: "Juegos"}
- {id: 13, cat: PC/0day, desc: "Software Arg."}
- {id: 14, cat: PC/0day, desc: "Software Int."}
- {id: 15, cat: Other, desc: "Otros"}
- {id: 16, cat: Other, desc: "Subpacks"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: added
options:
added: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: DESC
options:
DESC: desc
ASC: asc
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Por página Torrents:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Those new accounts that do not register a transfer or have any movement in the forum after 4 weeks will be disabled."
login:
path: tracker/takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("fallado"))
test:
path: tracker/index.php
selector: a[href="logout.php"], a[href^="download.php/"]
search:
paths:
- path: tracker/browse.php
inputs:
$raw: "{{ range .Categories }}cat[]={{.}}&{{end}}"
keywords: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 0 title, 1 title+descr, 2 descr
type: "{{ if .Query.IMDBID }}2{{ else }}0{{ end }}"
# 0 active, 1 incldead, 2 dead
incldead: 0 # dead results don't have torrents
# 0 all, 1 free, 2 normal
inclfree: "{{ if .Config.freeleech }}1{{ else }}0{{ end }}"
sort: "{{ .Config.sort }}"
d: "{{ .Config.type }}"
list: 1
keywordsfilters:
- name: re_replace
args: ["(?i)(S(\\d{1,3}))(?![\\dE])", "Temporada"]
- name: re_replace
args: ["(\\w+)", "+$1"] # prepend + to each word
rows:
selector: table > tbody > tr:not(tr:first-child):not(tr.browse)
after: 1
fields:
categorydesc:
selector: a[href*="?cat="] img
attribute: title
title_default:
selector: a[href^="details.php?id="]
filters:
- name: re_replace
args: ["(?i)(Primera Temporada)", "S01"]
- name: re_replace
args: ["(?i)(Segunda Temporada)", "S02"]
- name: re_replace
args: ["(?i)(Tercera Temporada)", "S03"]
- name: re_replace
args: ["(?i)(Cuarta Temporada)", "S04"]
- name: re_replace
args: ["(?i)(Quinta Temporada)", "S05"]
- name: re_replace
args: ["(?i)(Sexta Temporada)", "S06"]
- name: re_replace
args: ["(?i)(Septima Temporada)", "S07"]
- name: re_replace
args: ["(?i)(Octava Temporada)", "S08"]
- name: re_replace
args: ["(?i)(Novena Temporada)", "S09"]
- name: re_replace
args: ["(?i)(Decima Temporada)", "S10"]
- name: re_replace
args: ["(?i)(Onceava Temporada)", "S11"]
- name: re_replace
args: ["(?i)(Decimosegunda Temporada)", "S12"]
- name: re_replace
args: ["(?i)Temporada (\\d{1,3})\\s*y\\s*(\\d{1,3})", "S$1-$2"]
- name: re_replace
args: ["(?i)Temporada (\\d{1,3})", "S$1"]
# move ARG tag to end
- name: re_replace
args: ["^(\\[ARG\\]) (.+?)$", "$2 $1"]
# move quality tags to end
- name: re_replace
args: ["^(\\[.+?\\]) (.+?)$", "$2 $1"]
title:
selector: a[title][href^="details.php?id="]
attribute: title
optional: true
default: "{{ .Result.title_default }}"
filters:
- name: re_replace
args: ["(?i)(Primera Temporada)", "S01"]
- name: re_replace
args: ["(?i)(Segunda Temporada)", "S02"]
- name: re_replace
args: ["(?i)(Tercera Temporada)", "S03"]
- name: re_replace
args: ["(?i)(Cuarta Temporada)", "S04"]
- name: re_replace
args: ["(?i)(Quinta Temporada)", "S05"]
- name: re_replace
args: ["(?i)(Sexta Temporada)", "S06"]
- name: re_replace
args: ["(?i)(Septima Temporada)", "S07"]
- name: re_replace
args: ["(?i)(Octava Temporada)", "S08"]
- name: re_replace
args: ["(?i)(Novena Temporada)", "S09"]
- name: re_replace
args: ["(?i)(Decima Temporada)", "S10"]
- name: re_replace
args: ["(?i)(Onceava Temporada)", "S11"]
- name: re_replace
args: ["(?i)(Decimosegunda Temporada)", "S12"]
- name: re_replace
args: ["(?i)Temporada (\\d{1,3})\\s*y\\s*(\\d{1,3})", "S$1-$2"]
- name: re_replace
args: ["(?i)Temporada (\\d{1,3})", "S$1"]
# move ARG tag to end
- name: re_replace
args: ["^(\\[ARG\\]) (.+?)$", "$2 $1"]
# move quality tags to end
- name: re_replace
args: ["^(\\[.+?\\]) (.+?)$", "$2 $1"]
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php/"]
attribute: href
date:
selector: td:nth-child(5)
remove: font
filters:
- name: append
args: " +00:00" # auto adjusted by site account profile
- name: dateparse
args: "yyyy-MM-dd zzz"
size:
selector: td:nth-child(3)
seeders:
selector: td:nth-child(8)
filters:
- name: regexp
args: "^(\\d+) \/"
leechers:
selector: td:nth-child(8)
filters:
- name: regexp
args: "\/ (\\d+)$"
grabs:
selector: td:nth-child(9)
filters:
- name: regexp
args: "\\\xA0(\\d+)\\\xA0"
downloadvolumefactor:
case:
"font[color=\"red\"]:contains(\"FREE!\")": 0
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 0.5
description_default:
selector: a[href^="details.php?id="]
description:
selector: a[title][href^="details.php?id="]
attribute: title
optional: true
default: "{{ .Result.description_default }}"
# engine tbd

View File

@@ -0,0 +1,89 @@
---
id: btdigg
name: BTDigg
description: "BTDigg is a Public BitTorrent DHT search engine."
language: en-US
type: public
encoding: UTF-8
links:
- https://btdig.com/
legacylinks:
- http://btdiggwzoyrwwbiv.onion.ly/
- https://btdiggwzoyrwwbiv.onion.ly/
- https://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion.ws/ # redirects to spam
- https://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion.pet/ # not found
- https://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.onion.ly/ # 504 gateway timeout
- https://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.tor2web.to/ # 504 gateway timeout
- https://btdigggink2pdqzqrik3blmqemsbntpzwxottujilcdjfz56jumzfsyd.tor2web.link/ # Origin is unreachable Error code 523
caps:
categories:
Other: Other
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: info_8000
type: info
label: About BTDigg Categories
default: BTDigg does not return categories in its search results.</br>To add to your Apps' Torznab indexer, replace all categories with 8000(Other).
- name: sort
type: select
label: Sort requested from site
default: 0
options:
0: relevance
2: created
3: size
search:
# https://btdig.com/search?q=test&order=2
# only 10 results per page
paths:
- path: search
inputs:
q: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
# 0 relevance 2 age 3 size 4 files
order: "{{ .Config.sort }}"
rows:
selector: div.one_result
filters:
- name: andmatch
fields:
category:
text: Other
title:
selector: div.torrent_name a
details:
selector: div.torrent_name a
attribute: href
download:
selector: a[href^="magnet:?xt="]
attribute: href
date:
selector: span.torrent_age
filters:
- name: replace
args: ["found ", ""]
files:
selector: span.torrent_files
optional: true
default: 1
size:
selector: span.torrent_size
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# dhtcrawler2

View File

@@ -1,76 +0,0 @@
---
id: btdirectory
name: BTdirectory
description: "BTdirectory (BT目录) is a Public DHT Crawler"
language: en-US
type: public
encoding: UTF-8
# current domain at https://cursor.vip/btmulu then follow links to the final search-movie link
links:
- https://btmulu.work/
- https://www.btmulu.digital/
caps:
categorymappings:
- {id: Other, cat: Other, desc: Other}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: info_category_8000
type: info_category_8000
search:
paths:
# https://www.btmulu.digital/search-create.html
# https://btmulu.work/search.html?name=the+boys+s04e08
- path: "{{ if .Keywords }}search.html{{ else }}search-create.html{{ end }}"
inputs:
name: "{{ re_replace .Keywords \"[\\s]+\" \"+\" }}"
rows:
selector: article.item
filters:
- name: andmatch
fields:
category:
text: Other
title:
selector: h4
remove: span
details:
selector: a[href^="/hash/"]
attribute: href
infohash:
selector: article.item
attribute: data-key
date:
selector: p
filters:
- name: regexp
args: (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})
files:
selector: p
filters:
- name: regexp
args: "File Count(\\d+)"
size:
selector: p
filters:
- name: regexp
args: "Size(\\d+\\.?\\d+ [K|M|G]B)"
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -34,8 +34,6 @@ settings:
0: relevance
1: created
2: size
- name: info_flaresolverr
type: info_flaresolverr
search:
paths:
@@ -43,6 +41,10 @@ search:
- path: search.php
inputs:
q: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
# does not support multi cats so defaulting to all
c: ""
# 1 Chinese, 2 Japanese, 3 Korean
l: ""
o: "{{ if .Keywords }}{{ .Config.sort }}{{ else }}1{{ end }}"
rows:
@@ -61,7 +63,7 @@ search:
- name: replace
args: ["Video", "TV"]
title:
selector: a.smashTitle > script:contains("decodeURIComponent")
selector: a.smashTitle > script
filters:
- name: urldecode
- name: replace
@@ -72,7 +74,6 @@ search:
args: ["<b style='color:#ea644a'>", ""]
- name: replace
args: ["</b>", ""]
- name: htmldecode
details:
selector: a.smashTitle
attribute: href

View File

@@ -39,16 +39,14 @@ settings:
type: checkbox
label: Search freeleech only
default: false
- name: info_flaresolverr
type: info_flaresolverr
- name: flaresolverr
type: info
label: FlareSolverr
default: This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href="https://github.com/Jackett/Jackett#configuring-flaresolverr" target="_blank">FlareSolverr</a> to access it.
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "Cherish your user account. Inactive accounts would be deleted based on the following rules:<ol><li>Extreme User or above would never be deleted.</li><li>Veteran User or above would never be deleted if parked (at User CP).</li><li>Parked accounts would be deleted if users have not logged in for more than 365 days in a row.</li><li>Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.</li><li>Accounts with both uploaded and downloaded amount being 0 would be deleted if users have not logged in for more than 30 days in a row.</li></ol>"
login:
path: login.php

View File

@@ -7,8 +7,16 @@ type: public
encoding: UTF-8
# use https://tellme.pw/btsow to find the new domain
links:
- https://btsow.motorcycles/
- https://btsow.hair/
legacylinks:
- https://btsow.surf/
- https://btsow.com/
- https://btsow.cam/
- https://btsow.digital/
- https://btsow.shop/
- https://btsow.us/
- https://btsow.one/
- https://btsow.rest/
- https://btsow.bar/
- https://btsow.click/
- https://btsow.cfd/
@@ -18,12 +26,6 @@ legacylinks:
- https://btsow.beauty/
- https://btsow.mom/
- https://btsow.boats/
- https://btsow.hair/
- https://btsow.bond/
- https://btsow.skin/
- https://btsow.makeup/
- https://btsow.homes/
- https://btsow.yachts/
caps:
categories:
@@ -37,8 +39,10 @@ caps:
book-search: [q]
settings:
- name: info_category_8000
type: info_category_8000
- name: info_8000
type: info
label: About BTSOW Categories
default: BTSOW does not return categories in its search results.</br>To add to your Apps' Torznab indexer, replace all categories with 8000(Other).
download:
selectors:
@@ -49,10 +53,6 @@ search:
paths:
- path: "search/{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
headers:
# site blocks Jackett's User-Agents, so slightly alter it here (e.g. Safari/537.36 > Safari/537.35)
User-Agent: ["Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.35"]
rows:
selector: div.row:has(a[href*="/detail/hash/"])

View File

@@ -0,0 +1,126 @@
---
id: bulltorrent
name: BullTorrent
description: "BullTorrent (formerly TOROS) is a Public torrent index"
language: en-US
type: public
encoding: UTF-8
links:
- https://www.bulltorrent.com/
legacylinks:
- https://toros.nocensor.space/
- https://toros.nocensor.work/
- https://www.toros.co/
- https://toros.nocensor.biz/
- https://toros.nocensor.lol/
- https://toros.mrunblock.guru/
- https://toros.mrunblock.life/ # Gateway time-out Error code 504
caps:
categorymappings:
- {id: 1, cat: Movies, desc: Movies}
- {id: 2, cat: Audio, desc: Music}
- {id: 3, cat: TV, desc: Television}
- {id: 4, cat: PC/Games, desc: Games}
- {id: 5, cat: PC, desc: Software}
- {id: 6, cat: TV/Anime, desc: Anime}
- {id: 7, cat: XXX, desc: Adult}
- {id: 8, cat: Books, desc: Ebooks}
- {id: 9, cat: TV/Anime, desc: Animation}
- {id: 10, cat: Other, desc: Other}
- {id: 0, cat: Other, desc: TBC}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- 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
download:
selectors:
- selector: a[href^="magnet:?xt="]
attribute: href
search:
paths:
# https://www.bulltorrent.com/all/torrents/2022.html?v=&i=100&sort=added&o=desc
- path: "{{ if .Keywords }}all/torrents/{{ .Keywords }}.html?v=&i=100&sort={{ .Config.sort }}&o={{ .Config.type }}{{ else }}trending.html{{ end }}"
keywordsfilters:
- name: re_replace
args: ["[\\s]+", "-"]
- name: tolower
rows:
selector: table.table-responsive tr:has(a[href^="/torrent/"])
filters:
- name: andmatch
fields:
category:
selector: td:nth-child(1)
attribute: class
filters:
- name: regexp
args: (\d+)
title:
selector: a[href^="/torrent/"]
details:
selector: a[href^="/torrent/"]
attribute: href
download:
selector: a[href^="/torrent/"]
attribute: href
date_day:
selector: td:nth-child(2):contains("day"), td:nth-child(2):contains("Hoy"), td:nth-child(2):contains("Ayer")
optional: true
filters:
- name: replace
args: ["Hoy", "Today"]
- name: replace
args: ["Ayer", "Yesterday"]
- name: fuzzytime
date_ago:
selector: td:nth-child(2):contains("ago")
optional: true
filters:
- name: timeago
date_year:
selector: td:nth-child(2):not(:contains("ago")):not(:contains("day")):not(:contains("Hoy")):not(:contains("Ayer"))
optional: true
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "d MMM zzz"
date:
text: "{{ if or .Result.date_year .Result.date_ago .Result.date_day }}{{ or .Result.date_year .Result.date_ago .Result.date_day }}{{ else }}now{{ end }}"
size:
selector: td:nth-child(3)
seeders:
selector: td:nth-child(4)
leechers:
selector: td:nth-child(5)
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -7,15 +7,13 @@ type: private
encoding: UTF-8
links:
- https://bwtorrents.tv/
- https://www.bwtorrents.life/
- https://www.bwtorrents.pro/
- https://bwtorrents.co/
- https://bwtorrents.cc/
legacylinks:
- https://bwtorrents.fun/
- https://bwtorrents.xyz/
- https://bwtorrents.us/
- https://bwtorrents.live/
- https://bwtorrents.co/
caps:
categorymappings:
@@ -125,8 +123,6 @@ caps:
- {id: 217, cat: Movies, desc: "Tamil-Movies | Remuxes BluRay"}
- {id: 218, cat: TV, desc: "TV-Ishara TV"}
- {id: 219, cat: TV, desc: "TV-Bengali Tv"}
- {id: 220, cat: TV, desc: "TV-Shemaroo Umang"}
- {id: 221, cat: TV, desc: "TV-JioTv"}
modes:
search: [q]
@@ -146,12 +142,6 @@ settings:
type: checkbox
label: Search freeleech only
default: false
- name: info_flaresolverr
type: info_flaresolverr
- name: info_activity
type: info
label: Account Inactivity
default: "Account activity:<ol><li>Zero activity accounts (0 bytes download and 0 bytes upload) are automatically deleted after 30 days</li><li>Inactive accounts under VIP and without parked are automatically deleted after 40 days.</li></ol>"
login:
path: takelogin.php
@@ -180,8 +170,6 @@ search:
rows:
selector: table[width="1200"] > tbody > tr:has(a[href^="download.php/"])
filters:
- name: andmatch
fields:
category:

Some files were not shown because too many files have changed in this diff Show More