File size: 4,169 Bytes
01d9265 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
import aiohttp
import asyncio
from RTN import parse
from comet.utils.general import is_video
from comet.utils.logger import logger
class DebridLink:
def __init__(self, session: aiohttp.ClientSession, debrid_api_key: str):
session.headers["Authorization"] = f"Bearer {debrid_api_key}"
self.session = session
self.proxy = None
self.api_url = "https://debrid-link.com/api/v2"
async def check_premium(self):
try:
check_premium = await self.session.get(f"{self.api_url}/account/infos")
check_premium = await check_premium.text()
if '"accountType":1' in check_premium:
return True
except Exception as e:
logger.warning(
f"Exception while checking premium status on Debrid-Link: {e}"
)
return False
async def get_instant(self, chunk: list):
try:
get_instant = await self.session.get(
f"{self.api_url}/seedbox/cached?url={','.join(chunk)}"
)
return await get_instant.json()
except Exception as e:
logger.warning(
f"Exception while checking hashes instant availability on Debrid-Link: {e}"
)
async def get_files(
self, torrent_hashes: list, type: str, season: str, episode: str, kitsu: bool
):
chunk_size = 250
chunks = [
torrent_hashes[i : i + chunk_size]
for i in range(0, len(torrent_hashes), chunk_size)
]
tasks = []
for chunk in chunks:
tasks.append(self.get_instant(chunk))
responses = await asyncio.gather(*tasks)
availability = [
response for response in responses if response and response.get("success")
]
files = {}
if type == "series":
for result in availability:
for hash, torrent_data in result["value"].items():
for file in torrent_data["files"]:
filename = file["name"]
if not is_video(filename):
continue
if "sample" in filename:
continue
filename_parsed = parse(filename)
if episode not in filename_parsed.episodes:
continue
if kitsu:
if filename_parsed.seasons:
continue
else:
if season not in filename_parsed.seasons:
continue
files[hash] = {
"index": torrent_data["files"].index(file),
"title": filename,
"size": file["size"],
}
break
else:
for result in availability:
for hash, torrent_data in result["value"].items():
for file in torrent_data["files"]:
filename = file["name"]
if not is_video(filename):
continue
if "sample" in filename:
continue
files[hash] = {
"index": torrent_data["files"].index(file),
"title": filename,
"size": file["size"],
}
break
return files
async def generate_download_link(self, hash: str, index: str):
try:
add_torrent = await self.session.post(
f"{self.api_url}/seedbox/add", data={"url": hash, "async": True}
)
add_torrent = await add_torrent.json()
return add_torrent["value"]["files"][int(index)]["downloadUrl"]
except Exception as e:
logger.warning(
f"Exception while getting download link from Debrid-Link for {hash}|{index}: {e}"
)
|