mirror of
https://github.com/UrloMythus/UnHided.git
synced 2026-04-11 11:50:51 +00:00
Add files via upload
This commit is contained in:
50
mediaflow_proxy/speedtest/providers/all_debrid.py
Normal file
50
mediaflow_proxy/speedtest/providers/all_debrid.py
Normal file
@@ -0,0 +1,50 @@
|
||||
import random
|
||||
from typing import Dict, Tuple, Optional
|
||||
|
||||
from mediaflow_proxy.configs import settings
|
||||
from mediaflow_proxy.speedtest.models import ServerInfo, UserInfo
|
||||
from mediaflow_proxy.speedtest.providers.base import BaseSpeedTestProvider, SpeedTestProviderConfig
|
||||
from mediaflow_proxy.utils.http_utils import request_with_retry
|
||||
|
||||
|
||||
class SpeedTestError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class AllDebridSpeedTest(BaseSpeedTestProvider):
|
||||
"""AllDebrid speed test provider implementation."""
|
||||
|
||||
def __init__(self, api_key: str):
|
||||
self.api_key = api_key
|
||||
self.servers: Dict[str, ServerInfo] = {}
|
||||
|
||||
async def get_test_urls(self) -> Tuple[Dict[str, str], Optional[UserInfo]]:
|
||||
response = await request_with_retry(
|
||||
"GET",
|
||||
"https://alldebrid.com/internalapi/v4/speedtest",
|
||||
headers={"User-Agent": settings.user_agent},
|
||||
params={"agent": "service", "version": "1.0-363869a7", "apikey": self.api_key},
|
||||
)
|
||||
|
||||
if response.status_code != 200:
|
||||
raise SpeedTestError("Failed to fetch AllDebrid servers")
|
||||
|
||||
data = response.json()
|
||||
if data["status"] != "success":
|
||||
raise SpeedTestError("AllDebrid API returned error")
|
||||
|
||||
# Create UserInfo
|
||||
user_info = UserInfo(ip=data["data"]["ip"], isp=data["data"]["isp"], country=data["data"]["country"])
|
||||
|
||||
# Store server info
|
||||
self.servers = {server["name"]: ServerInfo(**server) for server in data["data"]["servers"]}
|
||||
|
||||
# Generate URLs with random number
|
||||
random_number = f"{random.uniform(1, 2):.24f}".replace(".", "")
|
||||
urls = {name: f"{server.url}/speedtest/{random_number}" for name, server in self.servers.items()}
|
||||
|
||||
return urls, user_info
|
||||
|
||||
async def get_config(self) -> SpeedTestProviderConfig:
|
||||
urls, _ = await self.get_test_urls()
|
||||
return SpeedTestProviderConfig(test_duration=10, test_urls=urls)
|
||||
24
mediaflow_proxy/speedtest/providers/base.py
Normal file
24
mediaflow_proxy/speedtest/providers/base.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Dict, Tuple, Optional
|
||||
from pydantic import BaseModel
|
||||
|
||||
from mediaflow_proxy.speedtest.models import UserInfo
|
||||
|
||||
|
||||
class SpeedTestProviderConfig(BaseModel):
|
||||
test_duration: int = 10 # seconds
|
||||
test_urls: Dict[str, str]
|
||||
|
||||
|
||||
class BaseSpeedTestProvider(ABC):
|
||||
"""Base class for speed test providers."""
|
||||
|
||||
@abstractmethod
|
||||
async def get_test_urls(self) -> Tuple[Dict[str, str], Optional[UserInfo]]:
|
||||
"""Get list of test URLs for the provider and optional user info."""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def get_config(self) -> SpeedTestProviderConfig:
|
||||
"""Get provider-specific configuration."""
|
||||
pass
|
||||
32
mediaflow_proxy/speedtest/providers/real_debrid.py
Normal file
32
mediaflow_proxy/speedtest/providers/real_debrid.py
Normal file
@@ -0,0 +1,32 @@
|
||||
from typing import Dict, Tuple, Optional
|
||||
import random
|
||||
|
||||
from mediaflow_proxy.speedtest.models import UserInfo
|
||||
from mediaflow_proxy.speedtest.providers.base import BaseSpeedTestProvider, SpeedTestProviderConfig
|
||||
|
||||
|
||||
class RealDebridSpeedTest(BaseSpeedTestProvider):
|
||||
"""RealDebrid speed test provider implementation."""
|
||||
|
||||
async def get_test_urls(self) -> Tuple[Dict[str, str], Optional[UserInfo]]:
|
||||
urls = {
|
||||
"AMS": "https://45.download.real-debrid.com/speedtest/testDefault.rar/",
|
||||
"RBX": "https://rbx.download.real-debrid.com/speedtest/test.rar/",
|
||||
"LON1": "https://lon1.download.real-debrid.com/speedtest/test.rar/",
|
||||
"HKG1": "https://hkg1.download.real-debrid.com/speedtest/test.rar/",
|
||||
"SGP1": "https://sgp1.download.real-debrid.com/speedtest/test.rar/",
|
||||
"SGPO1": "https://sgpo1.download.real-debrid.com/speedtest/test.rar/",
|
||||
"TYO1": "https://tyo1.download.real-debrid.com/speedtest/test.rar/",
|
||||
"LAX1": "https://lax1.download.real-debrid.com/speedtest/test.rar/",
|
||||
"TLV1": "https://tlv1.download.real-debrid.com/speedtest/test.rar/",
|
||||
"MUM1": "https://mum1.download.real-debrid.com/speedtest/test.rar/",
|
||||
"JKT1": "https://jkt1.download.real-debrid.com/speedtest/test.rar/",
|
||||
"Cloudflare": "https://45.download.real-debrid.cloud/speedtest/testCloudflare.rar/",
|
||||
}
|
||||
# Add random number to prevent caching
|
||||
urls = {location: f"{base_url}{random.uniform(0, 1):.16f}" for location, base_url in urls.items()}
|
||||
return urls, None
|
||||
|
||||
async def get_config(self) -> SpeedTestProviderConfig:
|
||||
urls, _ = await self.get_test_urls()
|
||||
return SpeedTestProviderConfig(test_duration=10, test_urls=urls)
|
||||
Reference in New Issue
Block a user