From 5bbee03adb2177f38e9f5221465ef1a4d5bf4e4e Mon Sep 17 00:00:00 2001 From: UrloMythus Date: Fri, 3 Jan 2025 11:08:24 +0100 Subject: [PATCH] Fix for SC --- Src/Utilities/m3u8.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/Src/Utilities/m3u8.py b/Src/Utilities/m3u8.py index 1919165..5a269b5 100644 --- a/Src/Utilities/m3u8.py +++ b/Src/Utilities/m3u8.py @@ -1,5 +1,5 @@ from urllib.parse import urlparse, parse_qs,unquote,quote -from fastapi import APIRouter, HTTPException, Response +from fastapi import APIRouter, HTTPException, Response, Request from curl_cffi.requests import AsyncSession router = APIRouter() @@ -25,16 +25,27 @@ async def clone_m3u8(d: str = None): @router.api_route("/vixcloud/manifest.m3u8", methods=["GET", "HEAD"]) -async def clone2_m3u8(d:str,token:str,expires:str,h:str = None, b:str = None): +async def clone2_m3u8(d:str,token:str,expires:str,h:str = None, b:str = None, request: Request = None): try: m3u8 = f'{d}?token={token}&expires={expires}' if h: m3u8 = m3u8 + f'&h={h}' if b: m3u8 = m3u8 + f'&b={b}' - + forwarded_proto = request.headers.get("x-forwarded-proto") + scheme = forwarded_proto if forwarded_proto else request.url.scheme + instance_url = f"{scheme}://{request.url.netloc}" m3u8_content = await fetch_m3u8(m3u8) - return Response(content=m3u8_content, media_type='application/vnd.apple.mpegurl') + modified_playlist = m3u8_content.replace("https://vixcloud.co/playlist/", f"{instance_url}/clony/") + + return Response(content=modified_playlist, media_type='application/vnd.apple.mpegurl') except Exception as e: print(f"Failed to fetch M3U8 file: {e}") - raise HTTPException(status_code=404, detail="M3U8 content not found") \ No newline at end of file + raise HTTPException(status_code=404, detail="M3U8 content not found") + +@router.api_route("/clony/{segment:path}", methods=["GET", "HEAD"]) +async def clony_m3u8(segment: str, request: Request): + base_url = "https://vixcloud.co/playlist/" + full_url = f"{base_url}{segment}?{request.query_params}" + m3u8_content = await fetch_m3u8(full_url) + return Response(content=m3u8_content, media_type='application/vnd.apple.mpegurl')