59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
import re
|
|
import random
|
|
import time
|
|
|
|
from fake_useragent import UserAgent
|
|
import requests
|
|
from .Provider import Provider
|
|
class Doodstream(Provider):
|
|
|
|
def __init__(self):
|
|
self.RANDOM_USER_AGENT = UserAgent().random
|
|
|
|
def GetLink(self, embededLink: str, DEFAULT_REQUEST_TIMEOUT: int) -> str:
|
|
headers = {
|
|
'User-Agent': self.RANDOM_USER_AGENT,
|
|
'Referer': 'https://dood.li/'
|
|
}
|
|
|
|
def extract_data(pattern, content):
|
|
match = re.search(pattern, content)
|
|
return match.group(1) if match else None
|
|
|
|
def generate_random_string(length=10):
|
|
characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
|
return ''.join(random.choice(characters) for _ in range(length))
|
|
|
|
response = requests.get(
|
|
embededLink,
|
|
headers=headers,
|
|
timeout=DEFAULT_REQUEST_TIMEOUT,
|
|
verify=False
|
|
)
|
|
response.raise_for_status()
|
|
|
|
pass_md5_pattern = r"\$\.get\('([^']*\/pass_md5\/[^']*)'"
|
|
pass_md5_url = extract_data(pass_md5_pattern, response.text)
|
|
if not pass_md5_url:
|
|
raise ValueError(
|
|
f'pass_md5 URL not found using {embededLink}.')
|
|
|
|
full_md5_url = f"https://dood.li{pass_md5_url}"
|
|
|
|
token_pattern = r"token=([a-zA-Z0-9]+)"
|
|
token = extract_data(token_pattern, response.text)
|
|
if not token:
|
|
raise ValueError(f'Token not found using {embededLink}.')
|
|
|
|
md5_response = requests.get(
|
|
full_md5_url, headers=headers, timeout=DEFAULT_REQUEST_TIMEOUT, verify=False)
|
|
md5_response.raise_for_status()
|
|
video_base_url = md5_response.text.strip()
|
|
|
|
random_string = generate_random_string(10)
|
|
expiry = int(time.time())
|
|
|
|
direct_link = f"{video_base_url}{random_string}?token={token}&expiry={expiry}"
|
|
# print(direct_link)
|
|
|
|
return direct_link |