From 1a9fd38d9eae980d74caab2aaa13ef92e578a860 Mon Sep 17 00:00:00 2001 From: SiskoUrso <91812199+SiskoUrso@users.noreply.github.com> Date: Tue, 10 Sep 2024 02:05:03 -0500 Subject: [PATCH 1/3] Added new tracker PSS --- README.md | 2 +- data/example-config.py | 9 ++- src/trackers/PSS.py | 179 +++++++++++++++++++++++++++++++++++++++++ upload.py | 5 +- 4 files changed, 190 insertions(+), 5 deletions(-) create mode 100644 src/trackers/PSS.py diff --git a/README.md b/README.md index 1a1b9b00f..d14f5b179 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ A simple tool to take the work out of uploading. - Can re-use existing torrents instead of hashing new - Generates proper name for your upload using Mediainfo/BDInfo and TMDb/IMDb conforming to site rules - Checks for existing releases already on site - - Uploads to PTP/BLU/BHD/Aither/THR/STC/R4E(limited)/STT/HP/ACM/LCD/LST/NBL/ANT/FL/HUNO/RF/SN/RTF/OTW/FNP/CBR/UTP/HDB/AL/SHRI/OE/TL/BHDTV/HDT/JPTV/LT/MTV/PTER/TDC/TTG/UTP + - Uploads to PTP/BLU/BHD/Aither/THR/STC/PSS/R4E(limited)/STT/HP/ACM/LCD/LST/NBL/ANT/FL/HUNO/RF/SN/RTF/OTW/FNP/CBR/UTP/HDB/AL/SHRI/OE/TL/BHDTV/HDT/JPTV/LT/MTV/PTER/TDC/TTG/UTP - Adds to your client with fast resume, seeding instantly (rtorrent/qbittorrent/deluge/watch folder) - ALL WITH MINIMAL INPUT! - Currently works with .mkv/.mp4/Blu-ray/DVD/HD-DVDs diff --git a/data/example-config.py b/data/example-config.py index 0043aad12..27d938271 100644 --- a/data/example-config.py +++ b/data/example-config.py @@ -36,9 +36,9 @@ "TRACKERS": { # Which trackers do you want to upload to? - # Available tracker: BLU, BHD, AITHER, STC, STT, SN, THR, R4E, HP, ACM, PTP, LCD, LST, PTER, NBL, ANT, MTV, CBR, RTF, HUNO, BHDTV, LT, PTER, TL, TDC, HDT, OE, RF, OTW, FNP, UTP, AL, HDB + # Available tracker: BLU, BHD, AITHER, STC, STT, SN, THR, R4E, HP, ACM, PTP, LCD, LST, PTER, NBL, ANT, MTV, CBR, RTF, HUNO, BHDTV, LT, PTER, TL, TDC, HDT, OE, RF, OTW, FNP, UTP, AL, HDB, PSS # Remove the trackers from the default_trackers list that are not used, to save being asked everytime - "default_trackers": "BLU, BHD, AITHER, STC, STT, SN, THR, R4E, HP, ACM, PTP, LCD, LST, PTER, NBL, ANT, MTV, CBR, RTF, HUNO, BHDTV, LT, PTER, TL, TDC, HDT, OE, RF, OTW, FNP, UTP, AL, HDB", + "default_trackers": "BLU, BHD, AITHER, STC, STT, SN, THR, R4E, HP, ACM, PTP, LCD, LST, PTER, NBL, ANT, MTV, CBR, RTF, HUNO, BHDTV, LT, PTER, TL, TDC, HDT, OE, RF, OTW, FNP, UTP, AL, HDB, PSS", "BLU": { "useAPI": False, # Set to True if using BLU @@ -235,6 +235,11 @@ "announce_url": "https://shareisland.org/announce/customannounceurl", # "anon" : "False" }, + "PSS" : { + "api_key" : "PSS api key", + "announce_url" : "https://privatesilverscreen.cc/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/" diff --git a/src/trackers/PSS.py b/src/trackers/PSS.py new file mode 100644 index 000000000..4ca9f9fe8 --- /dev/null +++ b/src/trackers/PSS.py @@ -0,0 +1,179 @@ +# -*- coding: utf-8 -*- +# import discord +import asyncio +import requests +import platform +from str2bool import str2bool + +from src.trackers.COMMON import COMMON +from src.console import console + + +class PSS(): + """ + Edit for Tracker: + Edit BASE.torrent with announce and source + Check for duplicates + Set type/category IDs + Upload + """ + + ############################################################### + ######## EDIT ME ######## noqa E266 + ############################################################### + + # ALSO EDIT CLASS NAME ABOVE + + def __init__(self, config): + self.config = config + self.tracker = 'PSS' + self.source_flag = 'PSS' + self.upload_url = 'https://privatesilverscreen.cc/api/torrents/upload' + self.search_url = 'https://privatesilverscreen.cc/api/torrents/filter' + self.signature = '\n[center][url=https://privatesilverscreen.cc/pages/1]Please Seed[/url][/center]' + self.banned_groups = ['4K4U', 'AROMA', 'd3g', 'edge2020', 'EMBER', 'EVO', 'FGT', 'NeXus', 'ION10', 'iVy', 'Judas', 'LAMA', 'MeGusta', 'nikt0', 'OEPlus', 'OFT', 'OsC', 'PYC', + 'QxR', 'Ralphy', 'RARBG', 'RetroPeeps', 'SAMPA', 'Sicario', 'Silence', 'STUTTERSHIT', 'Tigole', 'TSP', 'TSPxL','Will1869', 'x0r', 'YIFY', 'core', 'ZMNT', + 'msd', 'nikt0', 'aXXo', 'BRrip', 'CM8', 'CrEwSaDe', 'DNL', 'FaNGDiNG0', 'FRDS', 'HD2DVD', 'HDTime', 'Leffe', 'mHD', 'mSD', 'nHD', 'nSD', 'NhaNc3', 'PRODJi', + 'RDN', 'SANTi', 'ViSION', 'WAF', 'YTS', 'FROZEN', 'UTR', 'Grym', 'GrymLegacy', 'CK4', 'ProRes', 'MezRips', 'GalaxyRG', 'RCDiVX', 'LycanHD'] + 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', + 'ENCODE': '3', + 'WEBDL': '4', + 'WEBRIP': '5', + 'HDTV': '6', + }.get(type, '0') + return type_id + + async def get_res_id(self, resolution): + resolution_id = { + '4320p': '1', + '2160p': '2', + '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 ###### noqa E266 + ############################################################### + + 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(str2bool(str(self.config['TRACKERS'][self.tracker].get('anon', "False")))) is False: + anon = 0 + else: + anon = 1 + + if meta['bdinfo'] is not 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) is 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'] is False: + response = requests.post(url=self.upload_url, files=files, data=data, headers=headers, params=params) + try: + console.print(response.json()) + except Exception: + console.print("It may have uploaded, go check") + return + else: + console.print("[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 Exception: + 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 diff --git a/upload.py b/upload.py index 249e257b7..d3984f5f3 100644 --- a/upload.py +++ b/upload.py @@ -39,6 +39,7 @@ from src.trackers.UTP import UTP from src.trackers.AL import AL from src.trackers.SHRI import SHRI +from src.trackers.PSS import PSS import json from pathlib import Path import asyncio @@ -247,12 +248,12 @@ async def do_the_thing(base_dir): ####### Upload to Trackers ####### # noqa #F266 #################################### common = COMMON(config=config) - api_trackers = ['BLU', 'AITHER', 'STC', 'R4E', 'STT', 'RF', 'ACM', 'LCD', 'HUNO', 'SN', 'LT', 'NBL', 'ANT', 'JPTV', 'TDC', 'OE', 'BHDTV', 'RTF', 'OTW', 'FNP', 'CBR', 'UTP', 'AL', 'SHRI', 'LST', 'BHD', 'TL'] + api_trackers = ['BLU', 'AITHER', 'STC', 'R4E', 'STT', 'RF', 'ACM', 'LCD', 'HUNO', 'SN', 'LT', 'NBL', 'ANT', 'JPTV', 'TDC', 'OE', 'BHDTV', 'RTF', 'OTW', 'FNP', 'CBR', 'UTP', 'AL', 'SHRI', 'LST', 'BHD', 'TL', 'PSS'] 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, 'OTW': OTW, 'FNP': FNP, 'CBR': CBR, 'UTP': UTP, 'AL': AL, 'SHRI': SHRI} + 'TL': TL, 'TDC': TDC, 'HDT': HDT, 'MTV': MTV, 'OE': OE, 'BHDTV': BHDTV, 'RTF': RTF, 'OTW': OTW, 'FNP': FNP, 'CBR': CBR, 'UTP': UTP, 'AL': AL, 'SHRI': SHRI, 'PSS': PSS} tracker_capabilities = { 'LST': {'mod_q': True, 'draft': True}, From 8a798cb281e2b6c3b3c1ed0cec825a75a113e759 Mon Sep 17 00:00:00 2001 From: SiskoUrso <91812199+SiskoUrso@users.noreply.github.com> Date: Tue, 10 Sep 2024 11:39:30 -0500 Subject: [PATCH 2/3] added "'8640p':'10'," back to resolution_id --- src/trackers/PSS.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/trackers/PSS.py b/src/trackers/PSS.py index 4ca9f9fe8..01401b2b4 100644 --- a/src/trackers/PSS.py +++ b/src/trackers/PSS.py @@ -57,6 +57,7 @@ async def get_type_id(self, type): async def get_res_id(self, resolution): resolution_id = { + '8640p':'10', '4320p': '1', '2160p': '2', '1080p': '3', From 2cff2eac0cb7150f77b355cd427668bd94265bd7 Mon Sep 17 00:00:00 2001 From: Audionut Date: Wed, 11 Sep 2024 17:49:48 +1000 Subject: [PATCH 3/3] Lint --- README.md | 2 +- data/example-config.py | 6 +++--- src/trackers/PSS.py | 16 +++------------- 3 files changed, 7 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index d14f5b179..544a57612 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ A simple tool to take the work out of uploading. - Can re-use existing torrents instead of hashing new - Generates proper name for your upload using Mediainfo/BDInfo and TMDb/IMDb conforming to site rules - Checks for existing releases already on site - - Uploads to PTP/BLU/BHD/Aither/THR/STC/PSS/R4E(limited)/STT/HP/ACM/LCD/LST/NBL/ANT/FL/HUNO/RF/SN/RTF/OTW/FNP/CBR/UTP/HDB/AL/SHRI/OE/TL/BHDTV/HDT/JPTV/LT/MTV/PTER/TDC/TTG/UTP + - Uploads to PTP/BLU/BHD/Aither/THR/STC/R4E(limited)/STT/HP/ACM/LCD/LST/NBL/ANT/FL/HUNO/RF/SN/RTF/OTW/FNP/CBR/UTP/HDB/AL/SHRI/OE/TL/BHDTV/HDT/JPTV/LT/MTV/PTER/TDC/TTG/UTP/PSS - Adds to your client with fast resume, seeding instantly (rtorrent/qbittorrent/deluge/watch folder) - ALL WITH MINIMAL INPUT! - Currently works with .mkv/.mp4/Blu-ray/DVD/HD-DVDs diff --git a/data/example-config.py b/data/example-config.py index 27d938271..1f92cfb66 100644 --- a/data/example-config.py +++ b/data/example-config.py @@ -235,9 +235,9 @@ "announce_url": "https://shareisland.org/announce/customannounceurl", # "anon" : "False" }, - "PSS" : { - "api_key" : "PSS api key", - "announce_url" : "https://privatesilverscreen.cc/announce/customannounceurl", + "PSS": { + "api_key": "PSS api key", + "announce_url": "https://privatesilverscreen.cc/announce/customannounceurl", # "anon" : False }, "MANUAL": { diff --git a/src/trackers/PSS.py b/src/trackers/PSS.py index 01401b2b4..b19a594ae 100644 --- a/src/trackers/PSS.py +++ b/src/trackers/PSS.py @@ -18,12 +18,6 @@ class PSS(): Upload """ - ############################################################### - ######## EDIT ME ######## noqa E266 - ############################################################### - - # ALSO EDIT CLASS NAME ABOVE - def __init__(self, config): self.config = config self.tracker = 'PSS' @@ -32,7 +26,7 @@ def __init__(self, config): self.search_url = 'https://privatesilverscreen.cc/api/torrents/filter' self.signature = '\n[center][url=https://privatesilverscreen.cc/pages/1]Please Seed[/url][/center]' self.banned_groups = ['4K4U', 'AROMA', 'd3g', 'edge2020', 'EMBER', 'EVO', 'FGT', 'NeXus', 'ION10', 'iVy', 'Judas', 'LAMA', 'MeGusta', 'nikt0', 'OEPlus', 'OFT', 'OsC', 'PYC', - 'QxR', 'Ralphy', 'RARBG', 'RetroPeeps', 'SAMPA', 'Sicario', 'Silence', 'STUTTERSHIT', 'Tigole', 'TSP', 'TSPxL','Will1869', 'x0r', 'YIFY', 'core', 'ZMNT', + 'QxR', 'Ralphy', 'RARBG', 'RetroPeeps', 'SAMPA', 'Sicario', 'Silence', 'STUTTERSHIT', 'Tigole', 'TSP', 'TSPxL', 'Will1869', 'x0r', 'YIFY', 'core', 'ZMNT', 'msd', 'nikt0', 'aXXo', 'BRrip', 'CM8', 'CrEwSaDe', 'DNL', 'FaNGDiNG0', 'FRDS', 'HD2DVD', 'HDTime', 'Leffe', 'mHD', 'mSD', 'nHD', 'nSD', 'NhaNc3', 'PRODJi', 'RDN', 'SANTi', 'ViSION', 'WAF', 'YTS', 'FROZEN', 'UTR', 'Grym', 'GrymLegacy', 'CK4', 'ProRes', 'MezRips', 'GalaxyRG', 'RCDiVX', 'LycanHD'] pass @@ -51,13 +45,13 @@ async def get_type_id(self, type): 'ENCODE': '3', 'WEBDL': '4', 'WEBRIP': '5', - 'HDTV': '6', + 'HDTV': '6', }.get(type, '0') return type_id async def get_res_id(self, resolution): resolution_id = { - '8640p':'10', + '8640p': '10', '4320p': '1', '2160p': '2', '1080p': '3', @@ -70,10 +64,6 @@ async def get_res_id(self, resolution): }.get(resolution, '10') return resolution_id - ############################################################### - ###### STOP HERE UNLESS EXTRA MODIFICATION IS NEEDED ###### noqa E266 - ############################################################### - async def upload(self, meta): common = COMMON(config=self.config) await common.edit_torrent(meta, self.tracker, self.source_flag)