fix: change click and load package name

This commit is contained in:
2025-12-10 13:36:33 +01:00
parent 5f300d9e7b
commit 10fb8e88ce

View File

@@ -9,6 +9,7 @@ Implements the Click'n'Load protocol:
import argparse
import base64
import html
import json
import re
import sys
@@ -24,6 +25,87 @@ def log(msg):
print(f"[CNL] {msg}", flush=True)
def fetch_package_name(url):
"""Fetch package name from source page by extracting <h2> tag (like JDownloader)."""
if not url or not url.startswith("http"):
return None
try:
log(f"Fetching package name from {url}")
req = urllib.request.Request(
url,
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}
)
with urllib.request.urlopen(req, timeout=10) as resp:
content = resp.read().decode("utf-8", errors="ignore")
# Extract <h2> content like JDownloader does
match = re.search(r'<h2[^>]*>([^<]+)<', content)
if match:
name = html.unescape(match.group(1)).strip()
log(f"Extracted package name: {name}")
return name
log("No <h2> tag found on page")
return None
except Exception as e:
log(f"Failed to fetch package name: {e}")
return None
def extract_package_name_from_links(links):
"""Extract package name from common prefix of link filenames."""
if not links:
return None
# Extract filenames from URLs
filenames = []
for link in links:
parsed = urllib.parse.urlparse(link)
path = urllib.parse.unquote(parsed.path)
filename = path.split("/")[-1] if path else ""
# Remove extension
if "." in filename:
filename = filename.rsplit(".", 1)[0]
if filename:
filenames.append(filename)
if not filenames:
return None
if len(filenames) == 1:
# Single file - use its name
name = filenames[0]
log(f"Single file, using name: {name}")
return name
# Find common prefix among all filenames
prefix = filenames[0]
for filename in filenames[1:]:
while prefix and not filename.startswith(prefix):
# Remove last character or segment
if "." in prefix:
prefix = prefix.rsplit(".", 1)[0]
elif "-" in prefix:
prefix = prefix.rsplit("-", 1)[0]
elif "_" in prefix:
prefix = prefix.rsplit("_", 1)[0]
else:
prefix = prefix[:-1]
# Clean up trailing separators
prefix = prefix.rstrip(".-_ ")
if prefix and len(prefix) >= 3:
log(f"Common prefix from {len(filenames)} files: {prefix}")
return prefix
# Fallback: use first filename
name = filenames[0]
log(f"No common prefix, using first filename: {name}")
return name
class ClickNLoadHandler(BaseHTTPRequestHandler):
pyload_url = None
pyload_user = None
@@ -66,12 +148,22 @@ class ClickNLoadHandler(BaseHTTPRequestHandler):
crypted = params.get("crypted", [""])[0]
source = params.get("source", ["Click'n'Load"])[0]
log(f"Received addcrypted2: source={source}, jk_len={len(jk)}, crypted_len={len(crypted)}")
# Get actual page URL from Referer header
referer = self.headers.get("Referer", "")
log(f"Received addcrypted2: source={source}, referer={referer}")
log(f" jk_len={len(jk)}, crypted_len={len(crypted)}")
try:
links = self.decrypt_links(jk, crypted)
if links:
self.add_to_pyload(links, source)
# Try to get package name: referer page -> link filenames -> source
package_name = (
fetch_package_name(referer) or
extract_package_name_from_links(links) or
source
)
self.add_to_pyload(links, package_name)
self.send_response(200)
self.send_cors_headers()
self.end_headers()