Files
MammaMia/Src/API/extractors/deltabit.py
T
2026-01-20 16:02:48 +01:00

94 lines
3.4 KiB
Python

from fake_headers import Headers
import Src.Utilities.config as config
from bs4 import BeautifulSoup,SoupStrainer
import re
import time
import logging
from Src.Utilities.config import setup_logging
from Src.Utilities.eval import eval_solver
level = config.LEVEL
logger = setup_logging(level)
Icon = config.Icon
Name = config.Name
random_headers = Headers()
async def deltabit(page_url,client,streams,site_name,proxies,ForwardProxy,language,extractor):
"""Extract Deltabit URL."""
#Set up some headers
headers = random_headers.generate()
headers2 = random_headers.generate()
#Get the redirected link, so the actual deltabit link.
page_url_response = await client.get(ForwardProxy + page_url,headers={**headers, 'Range': 'bytes=0-0'}, proxies=proxies)
page_url = page_url_response.url
logger.info(f"Page_URl is {page_url}")
#Change the referer and user agent of the generated headers
headers2['referer'] = 'https://safego.cc/'
headers2['user-agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36'
#Request to the deltabit link
response = await client.get(ForwardProxy + page_url, headers = headers2, allow_redirects = True, proxies = proxies)
page_url = response.url
#Often deltabit redirects to another deltabit link. We need the redirected link to put it in the headers.
origin = page_url.split('/')[2]
headers['origin'] = f'https://{origin}'
headers['referer'] = page_url
headers['user-agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36'
#We check the page for the data such as hash and fname.
soup = BeautifulSoup(response.text, 'lxml', parse_only=SoupStrainer('input'))
data = {}
for input in soup:
name = input.get('name')
value = input.get('value')
data[name] = value
if extractor == 'Deltabit':
imhuman = ''
elif extractor == 'Turbovid':
imhuman = 'Proceed+to+video'
data['imhuman'] = imhuman
data['referer']= page_url
#We need to wait 2.5/5 seconds or the request will fail
if extractor == 'Deltabit':
time.sleep(2.5)
elif extractor == 'Turbovid':
time.sleep(5)
fname = data['fname']
#Request to the deltabit link
response = await client.post(ForwardProxy + page_url, data = data, headers = headers, proxies = proxies)
if extractor == 'Deltabit':
link = re.findall(r'sources:\s*\["([^"]+)"', response.text, re.DOTALL)
if link:
link = link[0]
elif extractor == 'Turbovid':
link = await eval_solver(response.text,proxies, ForwardProxy, client)
if not link:
i = 0
if not i >= 3:
link,fname = await deltabit(page_url,client,streams,site_name,proxies,ForwardProxy,language,extractor)
i +=1
if link:
streams['streams'].append({'name': f"{Name}{language}",'title': f'{Icon}{site_name}\n▶️ {extractor}\n{fname}', 'url': link, 'behaviorHints': {'bingeGroup': f'{site_name.lower()}'}})
return streams
#Testing
async def test_deltabit():
from curl_cffi.requests import AsyncSession
async with AsyncSession() as client:
results = await deltabit("https://turbovid.me/squc5gdzptgw",client,{'streams': []},'Deltabit', {},"","",'Turbovid')
print(results)
if __name__ == "__main__":
import asyncio
asyncio.run(test_deltabit())
# https://loadm.cam/#cfnqx