Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding FNP (FearNoPeer) Tracker #278

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions data/example-config.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,11 @@
"announce_url" : "https://reelflix.xyz/announce/customannounceurl",
# "anon" : False
},
"FNP" :{
"api_key" : "FNP api key",
"announce_url" : "https://fearnopeer.com/announce/customannounceurl",
# "anon" : "False"
},
"MANUAL" : {
# Uncomment and replace link with filebrowser (https://github.com/filebrowser/filebrowser) link to the Upload-Assistant directory, this will link to your filebrowser instead of uploading to uguu.se
# "filebrowser" : "https://domain.tld/filebrowser/files/Upload-Assistant/"
Expand Down
183 changes: 183 additions & 0 deletions src/trackers/FNP.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# -*- coding: utf-8 -*-
# import discord
import asyncio
import requests
import distutils.util
import os
import platform

from src.trackers.COMMON import COMMON
from src.console import console


class FNP():
"""
Edit for Tracker:
Edit BASE.torrent with announce and source
Check for duplicates
Set type/category IDs
Upload
"""

###############################################################
######## EDIT ME ########
###############################################################

# ALSO EDIT CLASS NAME ABOVE

def __init__(self, config):
self.config = config
self.tracker = 'FNP'
self.source_flag = 'FnP'
self.upload_url = 'https://fearnopeer.com/api/torrents/upload'
self.search_url = 'https://fearnopeer.com/api/torrents/filter'
self.signature = 'This torrent was downloaded from FearNoPeer.'
self.banned_groups = [""]
pass

async def get_cat_id(self, category_name):
category_id = {
'MOVIE': '1',
'TV': '2',
}.get(category_name, '0')
return category_id

async def get_type_id(self, type):
type_id = {
'DISC': '1',
'REMUX': '2',
'WEBDL': '4',
'WEBRIP': '5',
'HDTV': '6',
'ENCODE': '3'
}.get(type, '0')
return type_id

async def get_res_id(self, resolution):
resolution_id = {
'8640p':'10',
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image
Only the following video resolutions are supported by this PT, should we map 480i and 480p to the same resolution id, or map it to 10 or other?

Will get the following error if 480i is not mapped

No dupes found
{'success': False, 'message': 'Validation Error.', 'data': {'resolution_id': ['The selected resolution id is invalid.']}}
Adding to qbit
Adding and rechecking torrent

'4320p': '1',
'2160p': '2',
'1440p' : '3',
'1080p': '3',
'1080i':'4',
'720p': '5',
'576p': '6',
'576i': '7',
'480p': '8',
'480i': '9'
}.get(resolution, '10')
return resolution_id

###############################################################
###### STOP HERE UNLESS EXTRA MODIFICATION IS NEEDED ######
###############################################################

async def upload(self, meta):
common = COMMON(config=self.config)
await common.edit_torrent(meta, self.tracker, self.source_flag)
cat_id = await self.get_cat_id(meta['category'])
type_id = await self.get_type_id(meta['type'])
resolution_id = await self.get_res_id(meta['resolution'])
await common.unit3d_edit_desc(meta, self.tracker, self.signature)
region_id = await common.unit3d_region_ids(meta.get('region'))
distributor_id = await common.unit3d_distributor_ids(meta.get('distributor'))
if meta['anon'] == 0 and bool(distutils.util.strtobool(str(self.config['TRACKERS'][self.tracker].get('anon', "False")))) == False:
anon = 0
else:
anon = 1

if meta['bdinfo'] != None:
mi_dump = None
bd_dump = open(f"{meta['base_dir']}/tmp/{meta['uuid']}/BD_SUMMARY_00.txt", 'r', encoding='utf-8').read()
else:
mi_dump = open(f"{meta['base_dir']}/tmp/{meta['uuid']}/MEDIAINFO.txt", 'r', encoding='utf-8').read()
bd_dump = None
desc = open(f"{meta['base_dir']}/tmp/{meta['uuid']}/[{self.tracker}]DESCRIPTION.txt", 'r').read()
open_torrent = open(f"{meta['base_dir']}/tmp/{meta['uuid']}/[{self.tracker}]{meta['clean_name']}.torrent", 'rb')
files = {'torrent': open_torrent}
data = {
'name' : meta['name'],
'description' : desc,
'mediainfo' : mi_dump,
'bdinfo' : bd_dump,
'category_id' : cat_id,
'type_id' : type_id,
'resolution_id' : resolution_id,
'tmdb' : meta['tmdb'],
'imdb' : meta['imdb_id'].replace('tt', ''),
'tvdb' : meta['tvdb_id'],
'mal' : meta['mal_id'],
'igdb' : 0,
'anonymous' : anon,
'stream' : meta['stream'],
'sd' : meta['sd'],
'keywords' : meta['keywords'],
'personal_release' : int(meta.get('personalrelease', False)),
'internal' : 0,
'featured' : 0,
'free' : 0,
'doubleup' : 0,
'sticky' : 0,
}
# Internal
if self.config['TRACKERS'][self.tracker].get('internal', False) == True:
if meta['tag'] != "" and (meta['tag'][1:] in self.config['TRACKERS'][self.tracker].get('internal_groups', [])):
data['internal'] = 1

if region_id != 0:
data['region_id'] = region_id
if distributor_id != 0:
data['distributor_id'] = distributor_id
if meta.get('category') == "TV":
data['season_number'] = meta.get('season_int', '0')
data['episode_number'] = meta.get('episode_int', '0')
headers = {
'User-Agent': f'Upload Assistant/2.1 ({platform.system()} {platform.release()})'
}
params = {
'api_token' : self.config['TRACKERS'][self.tracker]['api_key'].strip()
}

if meta['debug'] == False:
response = requests.post(url=self.upload_url, files=files, data=data, headers=headers, params=params)
try:
console.print(response.json())
except:
console.print("It may have uploaded, go check")
return
else:
console.print(f"[cyan]Request Data:")
console.print(data)
open_torrent.close()





async def search_existing(self, meta):
dupes = []
console.print("[yellow]Searching for existing torrents on site...")
params = {
'api_token' : self.config['TRACKERS'][self.tracker]['api_key'].strip(),
'tmdbId' : meta['tmdb'],
'categories[]' : await self.get_cat_id(meta['category']),
'types[]' : await self.get_type_id(meta['type']),
'resolutions[]' : await self.get_res_id(meta['resolution']),
'name' : ""
}
if meta.get('edition', "") != "":
params['name'] = params['name'] + f" {meta['edition']}"
try:
response = requests.get(url=self.search_url, params=params)
response = response.json()
for each in response['data']:
result = [each][0]['attributes']['name']
# difference = SequenceMatcher(None, meta['clean_name'], result).ratio()
# if difference >= 0.05:
dupes.append(result)
except:
console.print('[bold red]Unable to search for existing torrents on site. Either the site is down or your API key is incorrect')
await asyncio.sleep(5)

return dupes
5 changes: 3 additions & 2 deletions upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
from src.trackers.OE import OE
from src.trackers.BHDTV import BHDTV
from src.trackers.RTF import RTF
from src.trackers.FNP import FNP
import json
from pathlib import Path
import asyncio
Expand Down Expand Up @@ -246,12 +247,12 @@ async def do_the_thing(base_dir):
####### Upload to Trackers #######
####################################
common = COMMON(config=config)
api_trackers = ['BLU', 'AITHER', 'STC', 'R4E', 'STT', 'RF', 'ACM','LCD','LST','HUNO', 'SN', 'LT', 'NBL', 'ANT', 'JPTV', 'TDC', 'OE', 'BHDTV', 'RTF']
api_trackers = ['BLU', 'AITHER', 'STC', 'R4E', 'STT', 'RF', 'ACM','LCD','LST','HUNO', 'SN', 'LT', 'NBL', 'ANT', 'JPTV', 'TDC', 'OE', 'BHDTV', 'RTF', 'FNP']
http_trackers = ['HDB', 'TTG', 'FL', 'PTER', 'HDT', 'MTV']
tracker_class_map = {
'BLU' : BLU, 'BHD': BHD, 'AITHER' : AITHER, 'STC' : STC, 'R4E' : R4E, 'THR' : THR, 'STT' : STT, 'HP' : HP, 'PTP' : PTP, 'RF' : RF, 'SN' : SN,
'ACM' : ACM, 'HDB' : HDB, 'LCD': LCD, 'TTG' : TTG, 'LST' : LST, 'HUNO': HUNO, 'FL' : FL, 'LT' : LT, 'NBL' : NBL, 'ANT' : ANT, 'PTER': PTER, 'JPTV' : JPTV,
'TL' : TL, 'TDC' : TDC, 'HDT' : HDT, 'MTV': MTV, 'OE': OE, 'BHDTV': BHDTV, 'RTF':RTF}
'TL' : TL, 'TDC' : TDC, 'HDT' : HDT, 'MTV': MTV, 'OE': OE, 'BHDTV': BHDTV, 'RTF': RTF, 'FNP': FNP}

for tracker in trackers:
if meta['name'].endswith('DUPE?'):
Expand Down