03-ago: [videoclub] unrestrict de enlaces RealDebrid en descarga al NAS (pi_bot)
This commit is contained in:
@@ -78,3 +78,6 @@ NAS_PORT=5000
|
|||||||
NAS_USER=
|
NAS_USER=
|
||||||
NAS_PASS=
|
NAS_PASS=
|
||||||
NAS_HTTPS=0
|
NAS_HTTPS=0
|
||||||
|
|
||||||
|
# Token RealDebrid (opcional): desrestrict de enlaces /d/ antes de anadir al NAS
|
||||||
|
TORRENTIO_RD_TOKEN=
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ def _load_env(path):
|
|||||||
ENV = _load_env(os.path.join(BASE, ".env"))
|
ENV = _load_env(os.path.join(BASE, ".env"))
|
||||||
# Respaldo: si no hay credenciales NAS aqui, probar el .env de videoclub/
|
# Respaldo: si no hay credenciales NAS aqui, probar el .env de videoclub/
|
||||||
_VIDEOCLUB_ENV = _load_env(os.path.join(BASE, "..", "videoclub", ".env"))
|
_VIDEOCLUB_ENV = _load_env(os.path.join(BASE, "..", "videoclub", ".env"))
|
||||||
for _k in ("NAS_HOST", "NAS_PORT", "NAS_USER", "NAS_PASS", "NAS_HTTPS"):
|
for _k in ("NAS_HOST", "NAS_PORT", "NAS_USER", "NAS_PASS", "NAS_HTTPS",
|
||||||
|
"TORRENTIO_RD_TOKEN"):
|
||||||
if not ENV.get(_k):
|
if not ENV.get(_k):
|
||||||
ENV[_k] = _VIDEOCLUB_ENV.get(_k, "")
|
ENV[_k] = _VIDEOCLUB_ENV.get(_k, "")
|
||||||
NAS_HOST = os.getenv("NAS_HOST", ENV.get("NAS_HOST", "192.168.50.31")).strip().rstrip("/")
|
NAS_HOST = os.getenv("NAS_HOST", ENV.get("NAS_HOST", "192.168.50.31")).strip().rstrip("/")
|
||||||
@@ -41,10 +42,36 @@ NAS_PORT = os.getenv("NAS_PORT", ENV.get("NAS_PORT", "5000")).strip()
|
|||||||
NAS_USER = os.getenv("NAS_USER", ENV.get("NAS_USER", "")).strip()
|
NAS_USER = os.getenv("NAS_USER", ENV.get("NAS_USER", "")).strip()
|
||||||
NAS_PASS = os.getenv("NAS_PASS", ENV.get("NAS_PASS", "")).strip()
|
NAS_PASS = os.getenv("NAS_PASS", ENV.get("NAS_PASS", "")).strip()
|
||||||
NAS_HTTPS = os.getenv("NAS_HTTPS", ENV.get("NAS_HTTPS", "0")).strip() == "1"
|
NAS_HTTPS = os.getenv("NAS_HTTPS", ENV.get("NAS_HTTPS", "0")).strip() == "1"
|
||||||
|
RD_TOKEN = os.getenv("TORRENTIO_RD_TOKEN", ENV.get("TORRENTIO_RD_TOKEN", "")).strip()
|
||||||
|
|
||||||
BASE_URL = f"{'https' if NAS_HTTPS else 'http'}://{NAS_HOST}:{NAS_PORT}"
|
BASE_URL = f"{'https' if NAS_HTTPS else 'http'}://{NAS_HOST}:{NAS_PORT}"
|
||||||
|
|
||||||
|
|
||||||
|
def unrestrict_rd(uri):
|
||||||
|
"""Convierte un enlace real-debrid.com/d/XXX en el enlace directo descargable.
|
||||||
|
Si el enlace no es de RealDebrid, lo devuelve tal cual."""
|
||||||
|
if "real-debrid.com/" not in uri:
|
||||||
|
return uri
|
||||||
|
if not RD_TOKEN:
|
||||||
|
print("[RD] Falta TORRENTIO_RD_TOKEN en .env")
|
||||||
|
return uri
|
||||||
|
try:
|
||||||
|
data = urllib.parse.urlencode({"link": uri}).encode()
|
||||||
|
req = urllib.request.Request(
|
||||||
|
"https://api.real-debrid.com/rest/1.0/unrestrict/link",
|
||||||
|
data=data, headers={"Authorization": f"Bearer {RD_TOKEN}"})
|
||||||
|
with urllib.request.urlopen(req, timeout=30) as r:
|
||||||
|
d = json.loads(r.read().decode("utf-8"))
|
||||||
|
directo = d.get("download")
|
||||||
|
if directo:
|
||||||
|
print(f"[RD] Desrestrict OK: {directo[:80]}")
|
||||||
|
return directo
|
||||||
|
print(f"[RD] No devolvio enlace directo: {d.get('error', d)}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[RD] Error desrestrict: {e}")
|
||||||
|
return uri
|
||||||
|
|
||||||
|
|
||||||
def _api(path, params, session=None):
|
def _api(path, params, session=None):
|
||||||
data = urllib.parse.urlencode(params).encode()
|
data = urllib.parse.urlencode(params).encode()
|
||||||
headers = {"Content-Type": "application/x-www-form-urlencoded"}
|
headers = {"Content-Type": "application/x-www-form-urlencoded"}
|
||||||
@@ -80,7 +107,9 @@ def login():
|
|||||||
|
|
||||||
|
|
||||||
def add_torrent(uri, session=None):
|
def add_torrent(uri, session=None):
|
||||||
"""Anade una URI (http/magnet/.torrent) a Download Station."""
|
"""Anade una URI (http/magnet/.torrent) a Download Station.
|
||||||
|
Si es enlace de RealDebrid, primero se desrestricta a enlace directo."""
|
||||||
|
uri = unrestrict_rd(uri)
|
||||||
if not session:
|
if not session:
|
||||||
session = login()
|
session = login()
|
||||||
if not session:
|
if not session:
|
||||||
|
|||||||
Reference in New Issue
Block a user