mirror of
https://github.com/Jackett/Jackett.git
synced 2025-12-17 12:16:05 +01:00
Compare commits
2 Commits
v0.22.1036
...
cardigann-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dc3e068066 | ||
|
|
f59cc953ec |
9
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
9
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -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
|
||||
|
||||
35
.github/ISSUE_TEMPLATE/docs_request.yml
vendored
35
.github/ISSUE_TEMPLATE/docs_request.yml
vendored
@@ -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
|
||||
4
.github/ISSUE_TEMPLATE/indexer-request.yml
vendored
4
.github/ISSUE_TEMPLATE/indexer-request.yml
vendored
@@ -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:
|
||||
|
||||
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -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
|
||||
13
.github/workflows/codeql-analysis.yml
vendored
13
.github/workflows/codeql-analysis.yml
vendored
@@ -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
|
||||
|
||||
51
.github/workflows/issuebot.yml
vendored
51
.github/workflows/issuebot.yml
vendored
@@ -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
|
||||
@@ -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();
|
||||
})();
|
||||
4
.github/workflows/winget.yml
vendored
4
.github/workflows/winget.yml
vendored
@@ -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 }}
|
||||
|
||||
@@ -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**.
|
||||
|
||||
@@ -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)'
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
6
nuget.config
Normal 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>
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<LangVersion>9</LangVersion>
|
||||
<LangVersion>8</LangVersion>
|
||||
<NoWarn />
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningsAsErrors />
|
||||
|
||||
@@ -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>
|
||||
@@ -378,11 +378,3 @@ input#searchquery {
|
||||
.tagify .tagify__tag-text {
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
#searchResults .indexers .error{
|
||||
color: Tomato;
|
||||
}
|
||||
|
||||
#searchResults .indexers .no-results{
|
||||
color: Grey;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -372,12 +372,3 @@ input#searchquery {
|
||||
.tagify .tagify__tag-text {
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
#searchResults .indexers .error{
|
||||
color: Tomato;
|
||||
}
|
||||
|
||||
#searchResults .indexers .no-results{
|
||||
color: Grey;
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -144,7 +144,6 @@ login:
|
||||
remove: table
|
||||
test:
|
||||
path: torrents-search.php
|
||||
selector: a[href="account-logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>User’s 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
|
||||
|
||||
@@ -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)
|
||||
111
src/Jackett.Common/Definitions/acgsou.yml
Normal file
111
src/Jackett.Common/Definitions/acgsou.yml
Normal 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
|
||||
184
src/Jackett.Common/Definitions/acidlounge.yml
Normal file
184
src/Jackett.Common/Definitions/acidlounge.yml
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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: ""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
145
src/Jackett.Common/Definitions/anime-free.yml
Normal file
145
src/Jackett.Common/Definitions/anime-free.yml
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
177
src/Jackett.Common/Definitions/animetracker.yml
Normal file
177
src/Jackett.Common/Definitions/animetracker.yml
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -124,7 +124,6 @@ login:
|
||||
args: ["');", ""]
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
download:
|
||||
before:
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 }}"
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -51,7 +51,6 @@ login:
|
||||
- selector: table:contains("An error has occured!")
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href*="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
133
src/Jackett.Common/Definitions/beyond-hd.yml
Normal file
133
src/Jackett.Common/Definitions/beyond-hd.yml
Normal 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)
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -58,7 +58,6 @@ login:
|
||||
- selector: td.embedded:has(h2:contains("bejelentkezés"))
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href*="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
|
||||
@@ -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
|
||||
119
src/Jackett.Common/Definitions/bitnova.yml
Normal file
119
src/Jackett.Common/Definitions/bitnova.yml
Normal 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
|
||||
161
src/Jackett.Common/Definitions/bitofvalor.yml
Normal file
161
src/Jackett.Common/Definitions/bitofvalor.yml
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -33,7 +33,7 @@ caps:
|
||||
settings:
|
||||
- name: stripcyrillic
|
||||
type: checkbox
|
||||
label: Strip Cyrillic Letters
|
||||
label: Strip Russian Letters
|
||||
default: false
|
||||
- name: addrussiantotitle
|
||||
type: checkbox
|
||||
|
||||
@@ -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:
|
||||
|
||||
186
src/Jackett.Common/Definitions/bitsexy.yml
Normal file
186
src/Jackett.Common/Definitions/bitsexy.yml
Normal 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
|
||||
@@ -176,6 +176,7 @@ search:
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
description:
|
||||
optional: true
|
||||
selector: font[color="#990000"]
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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/
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
139
src/Jackett.Common/Definitions/broadcity.yml
Normal file
139
src/Jackett.Common/Definitions/broadcity.yml
Normal 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
|
||||
@@ -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)
|
||||
@@ -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
|
||||
89
src/Jackett.Common/Definitions/btdigg.yml
Normal file
89
src/Jackett.Common/Definitions/btdigg.yml
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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/"])
|
||||
|
||||
|
||||
126
src/Jackett.Common/Definitions/bulltorrent.yml
Normal file
126
src/Jackett.Common/Definitions/bulltorrent.yml
Normal 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
|
||||
@@ -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
Reference in New Issue
Block a user