MammaMia 2.2.0

This commit is contained in:
UrloMythus
2026-05-15 21:53:13 +02:00 Unverified
parent 5d8f1249fe
commit 0f3f144874
21 changed files with 410 additions and 155 deletions
+1 -1
View File
@@ -255,7 +255,7 @@ async def cb01(streams,id,MFP,MFP_CREDENTIALS,client):
async def test_animeworld(): async def test_animeworld():
from curl_cffi.requests import AsyncSession from curl_cffi.requests import AsyncSession
async with AsyncSession() as client: async with AsyncSession() as client:
test_id = "tt12324366:2:2" # This is an example ID format test_id = "tt11378946" # This is an example ID format
MFP = "0" MFP = "0"
results = await cb01({'streams': []},test_id,MFP,['test','test'],client) results = await cb01({'streams': []},test_id,MFP,['test','test'],client)
print(results) print(results)
+1 -1
View File
@@ -66,7 +66,7 @@ async def deltabit(page_url,client,streams,site_name,proxies,ForwardProxy,langua
if link: if link:
link = link[0] link = link[0]
elif extractor == 'Turbovid': elif extractor == 'Turbovid':
link = await eval_solver(response.text,proxies, ForwardProxy, client) link = await eval_solver(response.text,proxies, ForwardProxy, client,r'sources:\s*\["([^"]+)"')
if not link: if not link:
i = 0 i = 0
if not i >= 3: if not i >= 3:
+1 -1
View File
@@ -25,7 +25,7 @@ async def mixdrop(url,client,MFP,MFP_CREDENTIALS,streams,site_name,proxies,Forwa
else: else:
headers = {"accept-language": "en-US,en;q=0.5"} headers = {"accept-language": "en-US,en;q=0.5"}
url = await eval_solver(url, proxies , ForwardProxy, client) url = await eval_solver(url, proxies , ForwardProxy, client,r'MDCore.wurl ?= ?"(.*?)"')
if url: if url:
url = "https:" + url url = "https:" + url
logger.info(f"{site_name} on Mixdrop found results for the current ID") logger.info(f"{site_name} on Mixdrop found results for the current ID")
+35
View File
@@ -0,0 +1,35 @@
import Src.Utilities.config as config
from Src.Utilities.eval import eval_solver
import logging
from Src.Utilities.config import setup_logging
level = config.LEVEL
logger = setup_logging(level)
Icon = config.Icon
Name = config.Name
async def streamhg(link,client,streams, site_name, proxies,ForwardProxy):
link = 'https://audinifer.com/e/' + link.split('/e/')[1]
url = await eval_solver(link,proxies, ForwardProxy, client,r'"hls2":"([^"]+)"')
if url:
streams['streams'].append({'name': f"{Name}",'title': f'{Icon}{site_name}\n▶️ StreamHG', 'url': url, 'behaviorHints': {'bingeGroup': f'{site_name.lower()}'}})
logger.info(f"{site_name} on StreamHG found results for the current ID")
status = True
else:
status = False
return streams,status
async def test_streamhg():
from curl_cffi.requests import AsyncSession
async with AsyncSession() as client:
results = await streamhg("https://dhcplay.com/e/zctlgpn3zoll",client,{'streams': []}, "StreamHG", {},"")
print(results)
if __name__ == "__main__":
import asyncio
asyncio.run(test_streamhg())
+1 -1
View File
@@ -11,7 +11,7 @@ Name = config.Name
async def supervideo(supervideo_link,client,streams, site_name, proxies,ForwardProxy): async def supervideo(supervideo_link,client,streams, site_name, proxies,ForwardProxy):
url = await eval_solver(supervideo_link,proxies, ForwardProxy, client) url = await eval_solver(supervideo_link,proxies, ForwardProxy, client,r'file:"(.*?)"')
if url: if url:
streams['streams'].append({'name': f"{Name}",'title': f'{Icon}{site_name}\n▶️ Supervideo', 'url': url, 'behaviorHints': {'bingeGroup': f'{site_name.lower()}'}}) streams['streams'].append({'name': f"{Name}",'title': f'{Icon}{site_name}\n▶️ Supervideo', 'url': url, 'behaviorHints': {'bingeGroup': f'{site_name.lower()}'}})
logger.info(f"{site_name} on SuperVideo found results for the current ID") logger.info(f"{site_name} on SuperVideo found results for the current ID")
+15 -1
View File
@@ -5,7 +5,8 @@ import logging
import Src.Utilities.config as config import Src.Utilities.config as config
from Src.Utilities.config import setup_logging from Src.Utilities.config import setup_logging
from Src.Utilities.loadenv import load_env from Src.Utilities.loadenv import load_env
from fake_headers import Headers
random_headers = Headers()
UT_PROXY = config.UT_PROXY UT_PROXY = config.UT_PROXY
UT_ForwardProxy = config.UT_ForwardProxy UT_ForwardProxy = config.UT_ForwardProxy
level = config.LEVEL level = config.LEVEL
@@ -31,6 +32,8 @@ else:
ForwardProxy = "" ForwardProxy = ""
url = 'https://uprot.net/msf/r4hcq47tarq8' url = 'https://uprot.net/msf/r4hcq47tarq8'
headers = { headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
@@ -118,8 +121,14 @@ async def bypass_uprot(client,link):
if 'msfi' not in link: if 'msfi' not in link:
if 'msf' in link: if 'msf' in link:
link = link.replace('msf','mse') link = link.replace('msf','mse')
headers = random_headers.generate()
headers['Origin'] = url.split('msf')[0]
headers['Referer'] = url
response = await client.get(ForwardProxy + link, headers=headers, impersonate = 'chrome', proxies = proxies) response = await client.get(ForwardProxy + link, headers=headers, impersonate = 'chrome', proxies = proxies)
if response.status_code != 403:
max_stream = await find_link(response.text,client) max_stream = await find_link(response.text,client)
else:
logger.info("Uprot blocked the request: 403")
else: else:
if 'mse' in link: if 'mse' in link:
link = link.replace('mse','msf') link = link.replace('mse','msf')
@@ -131,7 +140,12 @@ async def bypass_uprot(client,link):
cookies = json.loads(parts[0].replace("'", '"')) cookies = json.loads(parts[0].replace("'", '"'))
data = json.loads(parts[1].replace("'", '"')) data = json.loads(parts[1].replace("'", '"'))
response = await client.post(ForwardProxy + link, cookies=cookies, headers=headers, data =data, impersonate = 'chrome', proxies = proxies) response = await client.post(ForwardProxy + link, cookies=cookies, headers=headers, data =data, impersonate = 'chrome', proxies = proxies)
if response.status_code != 403:
max_stream = await get_maxstream_link(response.text,client) max_stream = await get_maxstream_link(response.text,client)
if response.status_code == 403:
max_stream = False
return max_stream return max_stream
except Exception as e: except Exception as e:
+2 -2
View File
@@ -1,2 +1,2 @@
{'PHPSESSID': 'bm1qtf1pe0dnr4u4nhvofitk8u', 'captcha': 'ca5612d51c9bbc60f8d76051693d3315'} {}
{'captcha': '853'} {}
+77
View File
@@ -0,0 +1,77 @@
import Src.Utilities.config as config
Icon = config.Icon
Name = config.Name
import re
from fake_headers import Headers
random_headers = Headers()
import logging
from Src.Utilities.config import setup_logging
level = config.LEVEL
logger = setup_logging(level)
import base64
from bs4 import BeautifulSoup,SoupStrainer
VD_DOMAIN = config.VD_DOMAIN
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:150.0) Gecko/20100101 Firefox/150.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.9',
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
'Sec-GPC': '1',
'Alt-Used': 'v.vidxgo.co',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'Sec-Fetch-Dest': 'iframe',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'none',
'DNT': '1',
'Referer': 'https://altadefinizione.you/',
'Sec-Fetch-Storage-Access': 'none',
'-': '-',
'Priority': 'u=0, i',
}
async def vidxgo(link,client,streams,proxies,ForwardProxy):
#headers = random_headers.generate()
response = await client.get(link, allow_redirects=True, headers = headers)
soup = BeautifulSoup(response.text,'lxml',parse_only=SoupStrainer('script'))
scripts = soup.find_all('script')
text = scripts[5]
match = re.search(r"var .+'(.*)',d=atob\('(.*)'",text.text)
if match:
key = match.group(1)
base64_text = match.group(2)
decoded = base64.b64decode(base64_text)
u = bytearray(len(decoded))
for i in range(len(decoded)):
u[i] = decoded[i] ^ ord(key[i % len(key)])
decrypted_code = u.decode('utf-8')
match = re.search(r'currentSrc.+"(https:[^";]+)',decrypted_code)
if match:
url = match.group(1).replace("\\","")
streams['streams'].append({'name': f"{Name}",'title': f'{Icon}Vidxgo\n ▶️ Vidxgo', 'url': url, 'behaviorHints': {'proxyHeaders': {"request": {"User-Agent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',"Accept": "*/*", "Accept-Language":"en-US,en;q=0.9","Referer":VD_DOMAIN+"/","Origin":VD_DOMAIN,"Sec-GPC": "1","Connection": "keep-alive","Sec-Fetch-Dest":"empty","Sec-Fetch-Mode":"cors","Sec-Fetch-Site":"cross-site","DNT": "1","Priority":"u=0"}}, 'notWebReady': True, 'bingeGroup': f'vidxgo'}})
logger.info(f"Vidxgo found results for the current ID")
return streams
#Testing
async def test_vidxgo():
from curl_cffi.requests import AsyncSession
async with AsyncSession() as client:
results = await vidsrc("https://v.vidxgo.co/tt34437972/1/1",client,{'streams': []}, "Vidxgo", {})
print(results)
if __name__ == "__main__":
import asyncio
asyncio.run(test_vidxgo())
# XOR decryption
+1 -1
View File
@@ -44,7 +44,7 @@ async def new_domain(url,data,headers,proxies,ForwardProxy,client):
response = await client.post(ForwardProxy + f'{url}/wp-admin/admin-ajax.php', data = data, headers = headers, proxies = proxies) response = await client.post(ForwardProxy + f'{url}/wp-admin/admin-ajax.php', data = data, headers = headers, proxies = proxies)
if response.status_code != 200: if response.status_code != 200:
logger.warning(f"Guardaflix Failed to fetch search results: {response.status_code}") logger.warning(f"Guardaflix Failed to fetch search results: {response.status_code}")
result = update_site(client,['guardaplay','Guardaflix']) result = await update_site(client,['guardaplay','Guardaflix'])
return response.text return response.text
async def get_player(page_link,MFP, MFP_CREDENTIALS,client, headers,streams): async def get_player(page_link,MFP, MFP_CREDENTIALS,client, headers,streams):
+15 -11
View File
@@ -4,7 +4,8 @@ import re
import Src.Utilities.config as config import Src.Utilities.config as config
from fake_headers import Headers from fake_headers import Headers
from Src.Utilities.loadenv import load_env from Src.Utilities.loadenv import load_env
from Src.API.extractors.supervideo import supervideo from Src.API.extractors.streamhg import streamhg
from Src.API.extractors.mixdrop import mixdrop
import json, random import json, random
import logging import logging
from Src.Utilities.config import setup_logging from Src.Utilities.config import setup_logging
@@ -41,24 +42,27 @@ async def search(clean_id,client):
logger.warning(f"GuardaHD Failed to fetch search results: {response.status_code}") logger.warning(f"GuardaHD Failed to fetch search results: {response.status_code}")
soup = BeautifulSoup(response.text,'lxml',parse_only=SoupStrainer('li')) soup = BeautifulSoup(response.text,'lxml',parse_only=SoupStrainer('li'))
li_tags = soup.find_all('li') li_tags = soup.find_all('li')
results = {}
for tag in li_tags: for tag in li_tags:
if tag.get('data-link'): if tag.get('data-link') and (('mixdrop') in tag.text or ('streamhg') in tag.text):
if 'supervideo' in tag.get('data-link'): results[tag.text.strip()] = 'https:' + tag['data-link']
href = 'https:' + tag['data-link'] return results
return href
return href
async def guardahd(streams,id,client): async def guardahd(streams,id,client,MFP,MFP_CREDENTIALS):
try: try:
general = await is_movie(id) general = await is_movie(id)
ismovie = general[0] ismovie = general[0]
clean_id = general[1] clean_id = general[1]
if ismovie == 0: if ismovie == 0:
return streams return streams
supervideo_link = await search(clean_id,client) results = await search(clean_id,client)
streams = await supervideo(supervideo_link, client,streams,"GuardaHD",proxies, ForwardProxy) status = False
if 'streamhg' in results:
streams,status = await streamhg(results['streamhg'], client,streams,"GuardaHD",proxies, ForwardProxy)
if 'mixdrop' in results and not status:
streams,status = await mixdrop(results['mixdrop'],client,MFP,MFP_CREDENTIALS,streams,"GuardaHD",proxies,ForwardProxy,'')
return streams return streams
except Exception as e: except Exception as e:
logger.warning(f"MammaMia: GuardaHD Failed {e}") logger.warning(f"MammaMia: GuardaHD Failed {e}")
@@ -68,8 +72,8 @@ async def test_script():
from curl_cffi.requests import AsyncSession from curl_cffi.requests import AsyncSession
async with AsyncSession() as client: async with AsyncSession() as client:
# Replace with actual id, for example 'anime_id:episode' format # Replace with actual id, for example 'anime_id:episode' format
test_id = "tt7181546" # This is an example ID format test_id = "tt16426418" # This is an example ID format
results = await guardahd({'streams': []},test_id, client) results = await guardahd({'streams': []},test_id, client,'0','')
print(results) print(results)
if __name__ == "__main__": if __name__ == "__main__":
+1 -1
View File
@@ -117,7 +117,7 @@ async def test_script():
from curl_cffi.requests import AsyncSession from curl_cffi.requests import AsyncSession
async with AsyncSession() as client: async with AsyncSession() as client:
# Replace with actual id, for example 'anime_id:episode' format # Replace with actual id, for example 'anime_id:episode' format
test_id = "tt12324366:2:2" # This is an example ID format tt0460649 test_id = "tt33318655:2:5" # This is an example ID format tt0460649
results = await guardaserie({'streams': []},test_id, client) results = await guardaserie({'streams': []},test_id, client)
print(results) print(results)
@@ -7,10 +7,18 @@ import json, random
import re import re
from Src.Utilities.eval import eval_solver from Src.Utilities.eval import eval_solver
import urllib.parse import urllib.parse
from Src.API.extractors.maxstream import maxstream
from Src.API.extractors.uprot import bypass_uprot
OST_DOMAIN = config.OST_DOMAIN OST_DOMAIN = config.OST_DOMAIN
OST_PROXY = config.OST_PROXY OST_PROXY = config.OST_PROXY
env_vars = load_env() env_vars = load_env()
proxies = {} proxies = {}
random_headers = Headers()
import logging
from Src.Utilities.config import setup_logging
level = config.LEVEL
logger = setup_logging(level)
if OST_PROXY == "1": if OST_PROXY == "1":
PROXY_CREDENTIALS = env_vars.get('PROXY_CREDENTIALS') PROXY_CREDENTIALS = env_vars.get('PROXY_CREDENTIALS')
proxy_list = json.loads(PROXY_CREDENTIALS) proxy_list = json.loads(PROXY_CREDENTIALS)
@@ -27,25 +35,12 @@ if OST_ForwardProxy == "1":
ForwardProxy = env_vars.get('ForwardProxy') ForwardProxy = env_vars.get('ForwardProxy')
else: else:
ForwardProxy = "" ForwardProxy = ""
headers = { Name = config.Name
'User-Agent': 'Mozilla/5.0 (Linux; Android 12) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.71 Mobile Safari/537.36', Icon = config.Icon
'Accept': '*/*',
'Accept-Language': 'en-US,en;q=0.5',
# 'Accept-Encoding': 'gzip, deflate, br, zstd',
'X-Requested-With': 'XMLHttpRequest',
'DNT': '1',
'Sec-GPC': '1',
'Connection': 'keep-alive',
'Referer': f'https://onlineserietv.{OST_DOMAIN}/',
# 'Cookie': 'player_opt=fx',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
}
async def search(showname,date,client,ismovie,episode,season): async def search(showname,date,client,ismovie,episode,season):
headers = random_headers.generate()
headers['Referer'] = f'{OST_DOMAIN}/'
cookies = { cookies = {
'player_opt': 'fx', 'player_opt': 'fx',
} }
@@ -57,64 +52,69 @@ async def search(showname,date,client,ismovie,episode,season):
'origin_id': '50141', 'origin_id': '50141',
'searchwp_live_search_client_nonce': 'undefined', 'searchwp_live_search_client_nonce': 'undefined',
} }
response = await client.get(ForwardProxy + f"https://onlineserietv.{OST_DOMAIN}/wp-admin/admin-ajax.php?s={urllib.parse.quote(showname)}&action=searchwp_live_search&swpengine=default&swpquery={urllib.parse.quote(showname)}&origin_id=50141&searchwp_live_search_client_nonce=undefined", headers=headers, cookies=cookies, impersonate = "chrome124", proxies = proxies) response = await client.get(ForwardProxy + f"{OST_DOMAIN}/wp-admin/admin-ajax.php?s={urllib.parse.quote(showname)}&action=searchwp_live_search&swpengine=default&swpquery={urllib.parse.quote(showname)}&origin_id=50141&searchwp_live_search_client_nonce=undefined", headers=headers, cookies=cookies, impersonate = "chrome", proxies = proxies)
if response.status_code != 200: if response.status_code != 200:
print("IP Blocked by OnlineserieTV",response) logger.info("IP Blocked by OnlineserieTV",response)
soup = BeautifulSoup(response.text, 'lxml', parse_only=SoupStrainer('a')) soup = BeautifulSoup(response.text, 'lxml', parse_only=SoupStrainer('a'))
a_tags_with_href = soup.find_all("a", href=True) a_tags_with_href = soup.find_all("a", href=True)
for a_tag in a_tags_with_href: for a_tag in a_tags_with_href:
href = a_tag.get("href") href = a_tag.get("href")
if ismovie == 1: if ismovie == 1:
if "film" in href: if "film" in href:
response = await client.get(ForwardProxy + href, headers=headers, impersonate = "chrome124", proxies = proxies) response = await client.get(ForwardProxy + href, headers=headers, impersonate = "chrome", proxies = proxies)
if response.status_code != 200: if response.status_code != 200:
print("IP Blocked by OnlineserieTV",response) logger.info("IP Blocked by OnlineserieTV",response)
year_match = re.search(r'Anno: <i>(\d{4})</i>', response.text) year_match = re.search(r'Anno: <i>(\d{4})</i>', response.text)
year = year_match.group(1) if year_match else None year = year_match.group(1) if year_match else None
if year == date: if year == date:
pattern = r'https://uprot\.net/fxf/[^\s"<>]+' pattern = r'https://uprot\.net/msf/[^\s"<>]+'
match = re.search(pattern, response.text) match = re.search(pattern, response.text)
if match: if match:
name = a_tag.text.replace("\t","").replace("\n","") name = a_tag.text.replace("\t","").replace("\n","")
flexy_link = match.group() maxstream_link = match.group()
return flexy_link,name return maxstream_link,name
else: else:
print("No flexy link found.") logger.info("No Maxstream link found.")
else: else:
continue continue
elif ismovie == 0: elif ismovie == 0:
if "serietv" in href: if "serietv" in href:
response = await client.get(ForwardProxy + href, headers=headers, impersonate = "chrome124", proxies = proxies) response = await client.get(ForwardProxy + href, headers=headers, impersonate = "chrome", proxies = proxies)
if response.status_code != 200: if response.status_code != 200:
print("IP Blocked by OnlineserieTV",response) logger.info("IP Blocked by OnlineserieTV",response)
year_match = re.search(r'Anno: <i>(\d{4})</i>', response.text) year_match = re.search(r'Anno: <i>(\d{4})</i>', response.text)
year = year_match.group(1) if year_match else None year = year_match.group(1) if year_match else None
if year == date: if year == date:
season = season.zfill(2) season = season.zfill(2)
episode = episode.zfill(2) episode = episode.zfill(2)
if season == "0000000000000": pattern = rf'{season}x{episode}.*?<a href=[\'"](https://uprot\.net/msf/[^\'"]+)'
print(True,season,episode) match = re.search(pattern, response.text, re.DOTALL)
#pattern = rf'{season}x{episode}.*?<a href=[\'"](https://uprot\.net/fxf/[^\'"]+)|0{episode}.*?<a href=[\'"](https://uprot\.net/fxf/[^\'"]+)' if not match:
pattern = rf'0{episode}.*?<a href=[\'"](https://uprot\.net/fxf/[^\'"]+)' pattern = rf'0{episode}.*?<a href=[\'"](https://uprot\.net/msf/[^\'"]+)'
match1 = re.findall(pattern, response.text)
match = re.search(pattern, response.text)
print(match)
else:
pattern = rf'{season}x{episode}.*?<a href=[\'"](https://uprot\.net/fxf/[^\'"]+)'
match = re.search(pattern, response.text, re.DOTALL) match = re.search(pattern, response.text, re.DOTALL)
if match: if match:
name = a_tag.text.replace("\t","").replace("\n","") name = a_tag.text.replace("\t","").replace("\n","")
flexy_link = match.group(1) maxstream_link = match.group(1)
print(match,flexy_link) return maxstream_link,name
return flexy_link,name
else: else:
print("No flexy link found.") logger.info("No maxstream link found.")
else: else:
continue continue
return None,None
async def get_maxstream(uprot_link,streams,language,client):
maxstream_link = await bypass_uprot(client,uprot_link)
if maxstream_link:
streams = await maxstream(maxstream_link,client,streams,'OnlineSerieTV',language,proxies,ForwardProxy)
else:
if maxstream_link == False:
return streams
else:
streams['streams'].append({'name': f"{Name}",'title': f'{Icon}OnlineSerieTV\n▶️ Please do the captcha at /uprot in order to be able to play this content! \n Remember to refresh the sources!\nIf you recently did the captcha then dont worry, just refresh the sources', 'url': 'https://github.com/UrloMythus/MammaMia', 'behaviorHints': { 'bingeGroup': 'cb01'}})
return streams
async def onlineserietv(streams,id,client):
async def onlineserietv(id,client):
try: try:
general = await is_movie(id) general = await is_movie(id)
ismovie = general[0] ismovie = general[0]
@@ -131,22 +131,21 @@ async def onlineserietv(id,client):
else: else:
showname,date = get_info_tmdb(clean_id,ismovie,type) showname,date = get_info_tmdb(clean_id,ismovie,type)
showname = showname.replace("'"," ") showname = showname.replace("'"," ")
flexy_link,name = await search(showname,date,client,ismovie,episode,season) uprot_link,name = await search(showname,date,client,ismovie,episode,season)
flexy_link = flexy_link.replace("fxf","fxe") if uprot_link != None:
real_url = await client.head(ForwardProxy + flexy_link, headers=headers, impersonate = "chrome124", proxies = proxies) streams = await get_maxstream(uprot_link,streams,'',client)
real_url = real_url.url return streams
final_url = await eval_solver(real_url,proxies, ForwardProxy, client)
return final_url,name
except Exception as e: except Exception as e:
print("MammaMia: Onlineserietv Failed",e) logger.info("MammaMia: Onlineserietv Failed")
return None,None logger.info(e)
return streams
async def test_animeworld(): async def test_animeworld():
from curl_cffi.requests import AsyncSession from curl_cffi.requests import AsyncSession
async with AsyncSession() as client: async with AsyncSession() as client:
test_id = "tt0206516:2:1" # This is an example ID format test_id = "tt16426418" # This is an example ID format
results = await onlineserietv(test_id, client) results = await onlineserietv({'streams': []},test_id, client)
print(results) print(results)
if __name__ == "__main__": if __name__ == "__main__":
+65
View File
@@ -0,0 +1,65 @@
from Src.Utilities.info import is_movie
import Src.Utilities.config as config
from Src.Utilities.loadenv import load_env
from Src.API.extractors.vidxgo import vidxgo
import json, random
import logging
from Src.Utilities.config import setup_logging
level = config.LEVEL
logger = setup_logging(level)
env_vars = load_env()
VD_PROXY = config.VD_PROXY
proxies = {}
if VD_PROXY == "1":
PROXY_CREDENTIALS = env_vars.get('PROXY_CREDENTIALS')
proxy_list = json.loads(PROXY_CREDENTIALS)
proxy = random.choice(proxy_list)
if proxy == "":
proxies = {}
else:
proxies = {
"http": proxy,
"https": proxy
}
VD_ForwardProxy = config.GH_ForwardProxy
if VD_ForwardProxy == "1":
ForwardProxy = env_vars.get('ForwardProxy')
else:
ForwardProxy = ""
VD_DOMAIN = config.VD_DOMAIN
async def vidxgoalta(streams,id,client):
try:
general = await is_movie(id)
ismovie = general[0]
clean_id = general[1]
type = "Vidxgo"
if "tmdb" in id:
clean_id = await get_IMDB_id_from_TMDb_id(clean_id,client)
if ismovie == 0 :
season = str(general[2])
episode = str(general[3])
link = f'{VD_DOMAIN}/{clean_id}/{season}/{episode}'
elif ismovie == 1:
link = f'{VD_DOMAIN}/{clean_id}'
streams = await vidxgo(link,client,streams,proxies,ForwardProxy)
return streams
except Exception as e:
logger.info("Vidxgo failed due to ")
logger.info(e)
return streams
async def test_script():
from curl_cffi.requests import AsyncSession
async with AsyncSession() as client:
# Replace with actual id, for example 'anime_id:episode' format
test_id = "tt7181546" # This is an example ID format
results = await vidxgoalta({'streams': []},test_id, client)
print(results)
if __name__ == "__main__":
import asyncio
asyncio.run(test_script())
+8 -1
View File
@@ -17,6 +17,8 @@ GF_DOMAIN = SITE['Guardaflix']['url']
GO_DOMAIN = SITE['Guardoserie']['url'] GO_DOMAIN = SITE['Guardoserie']['url']
RT_DOMAIN = SITE['Realtime']['url'] RT_DOMAIN = SITE['Realtime']['url']
TI_DOMAIN = SITE['Toonitalia']['url'] TI_DOMAIN = SITE['Toonitalia']['url']
OST_DOMAIN = SITE['OnlineSerieTV']['url']
VD_DOMAIN = SITE['Vidxgo']['url']
SC = SITE['StreamingCommunity']['enabled'] SC = SITE['StreamingCommunity']['enabled']
AW = SITE['AnimeWorld']['enabled'] AW = SITE['AnimeWorld']['enabled']
CB = SITE['CB01']['enabled'] CB = SITE['CB01']['enabled']
@@ -27,6 +29,8 @@ GF = SITE['Guardaflix']['enabled']
GO = SITE['Guardoserie']['enabled'] GO = SITE['Guardoserie']['enabled']
RT = SITE['Realtime']['enabled'] RT = SITE['Realtime']['enabled']
TI = SITE['Toonitalia']['enabled'] TI = SITE['Toonitalia']['enabled']
OST = SITE['OnlineSerieTV']['enabled']
VD = SITE['Vidxgo']['enabled']
SC_ForwardProxy = SITE['StreamingCommunity']["SC_ForwardProxy"] SC_ForwardProxy = SITE['StreamingCommunity']["SC_ForwardProxy"]
GS_ForwardProxy = SITE['Guardaserie']["GS_ForwardProxy"] GS_ForwardProxy = SITE['Guardaserie']["GS_ForwardProxy"]
GH_ForwardProxy = SITE['GuardaHD']["GH_ForwardProxy"] GH_ForwardProxy = SITE['GuardaHD']["GH_ForwardProxy"]
@@ -38,8 +42,9 @@ ES_ForwardProxy = SITE['Eurostreaming']['ES_ForwardProxy']
GF_ForwardProxy = SITE['Guardaflix']['GF_ForwardProxy'] GF_ForwardProxy = SITE['Guardaflix']['GF_ForwardProxy']
GO_ForwardProxy = SITE['Guardoserie']['GO_ForwardProxy'] GO_ForwardProxy = SITE['Guardoserie']['GO_ForwardProxy']
RT_ForwardProxy = SITE['Realtime']['RT_ForwardProxy'] RT_ForwardProxy = SITE['Realtime']['RT_ForwardProxy']
OST_ForwardProxy = SITE['OnlineSerieTV']['OST_ForwardProxy']
TI_ForwardProxy = SITE['Toonitalia']['TI_ForwardProxy'] TI_ForwardProxy = SITE['Toonitalia']['TI_ForwardProxy']
VD_ForwardProxy = SITE['Vidxgo']['VD_ForwardProxy']
GS_PROXY = SITE['Guardaserie']["GS_PROXY"] GS_PROXY = SITE['Guardaserie']["GS_PROXY"]
GH_PROXY = SITE['GuardaHD']["GH_PROXY"] GH_PROXY = SITE['GuardaHD']["GH_PROXY"]
CB_PROXY = SITE['CB01']["CB_PROXY"] CB_PROXY = SITE['CB01']["CB_PROXY"]
@@ -52,6 +57,8 @@ GF_PROXY = SITE['Guardaflix']['GF_PROXY']
GO_PROXY = SITE['Guardoserie']['GO_PROXY'] GO_PROXY = SITE['Guardoserie']['GO_PROXY']
RT_PROXY = SITE['Realtime']['RT_PROXY'] RT_PROXY = SITE['Realtime']['RT_PROXY']
TI_PROXY = SITE['Toonitalia']['TI_PROXY'] TI_PROXY = SITE['Toonitalia']['TI_PROXY']
OST_PROXY = SITE['OnlineSerieTV']['OST_PROXY']
VD_PROXY = SITE['Vidxgo']['VD_PROXY']
#Captcha #Captcha
CAPTCHA = config['Captcha'] CAPTCHA = config['Captcha']
UT_ForwardProxy = CAPTCHA['Uprot']['UT_ForwardProxy'] UT_ForwardProxy = CAPTCHA['Uprot']['UT_ForwardProxy']
+3 -1
View File
@@ -458,5 +458,7 @@ provider_map = {
"GO": "GUARDOSERIE", "GO": "GUARDOSERIE",
"RT": "REALTIME", "RT": "REALTIME",
"TI": "TOONITALIA", "TI": "TOONITALIA",
"GF": "GUARDAFLIX" "GF": "GUARDAFLIX",
"OST": "ONLINESERIETV",
"VD": "VIDXGO"
} }
+1 -8
View File
@@ -141,7 +141,7 @@ class UnpackingError(Exception):
random_headers = Headers() random_headers = Headers()
async def eval_solver(stream_link,proxies, ForwardProxy, client): async def eval_solver(stream_link,proxies, ForwardProxy, client,pattern):
try: try:
headers = random_headers.generate() headers = random_headers.generate()
headers["User-Agent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36" headers["User-Agent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36"
@@ -157,13 +157,6 @@ async def eval_solver(stream_link,proxies, ForwardProxy, client):
for i in script_all: for i in script_all:
if detect(i.text): if detect(i.text):
unpacked_code = unpack(i.text) unpacked_code = unpack(i.text)
if "xdrop" in stream_link:
pattern = r'MDCore.wurl ?= ?"(.*?)"'
elif 'turbovid' in stream_link:
pattern = r'sources:\s*\["([^"]+)"'
else:
pattern = r'file:"(.*?)"'
match = re.search(pattern, unpacked_code) match = re.search(pattern, unpacked_code)
if match: if match:
m3u8_url = match.group(1) m3u8_url = match.group(1)
+1
View File
@@ -22,6 +22,7 @@ async def build_mfp(MFP_CREDENTIALS,url,host,client):
MFP_url = MFP_CREDENTIALS[0] MFP_url = MFP_CREDENTIALS[0]
MFP_password = MFP_CREDENTIALS[1] MFP_password = MFP_CREDENTIALS[1]
url_mfp = f'{MFP_url}/extractor/video?api_password={MFP_password}&d={url}&host={host}&redirect_stream=false' url_mfp = f'{MFP_url}/extractor/video?api_password={MFP_password}&d={url}&host={host}&redirect_stream=false'
print(url_mfp)
#To build pieces together #To build pieces together
url_mfp = await transform_mfp(url_mfp,client) url_mfp = await transform_mfp(url_mfp,client)
return url_mfp return url_mfp
+19 -7
View File
@@ -9,7 +9,7 @@
"enabled": "1" "enabled": "1"
}, },
"CB01": { "CB01": {
"url": "https://cb01.uno", "url": "https://cb01uno.click",
"CB_PROXY": "0", "CB_PROXY": "0",
"CB_ForwardProxy": "0", "CB_ForwardProxy": "0",
"MX_ForwardProxy": "0", "MX_ForwardProxy": "0",
@@ -17,7 +17,7 @@
"enabled": "1" "enabled": "1"
}, },
"Guardaserie": { "Guardaserie": {
"url": "https://guardaserietv.asia", "url": "https://guarda-serie.click",
"enabled": "1", "enabled": "1",
"GS_ForwardProxy": "0", "GS_ForwardProxy": "0",
"GS_PROXY": "0" "GS_PROXY": "0"
@@ -29,19 +29,19 @@
"GH_PROXY": "0" "GH_PROXY": "0"
}, },
"Eurostreaming": { "Eurostreaming": {
"url": "https://eurostreamings.life", "url": "https://eurostream.ing",
"enabled": "1", "enabled": "1",
"ES_ForwardProxy": "0", "ES_ForwardProxy": "0",
"ES_PROXY": "0" "ES_PROXY": "0"
}, },
"Guardaflix": { "Guardaflix": {
"url": "https://guardaplay.blog", "url": "https://guardaplay.live",
"enabled": "1", "enabled": "1",
"GF_ForwardProxy": "0", "GF_ForwardProxy": "0",
"GF_PROXY": "0" "GF_PROXY": "0"
}, },
"Guardoserie": { "Guardoserie": {
"url": "https://guardoserie.blog", "url": "https://guardoserie.run",
"enabled": "1", "enabled": "1",
"GO_ForwardProxy": "0", "GO_ForwardProxy": "0",
"GO_PROXY": "0" "GO_PROXY": "0"
@@ -63,6 +63,18 @@
"enabled": "1", "enabled": "1",
"TI_ForwardProxy": "0", "TI_ForwardProxy": "0",
"TI_PROXY": "0" "TI_PROXY": "0"
},
"OnlineSerieTV": {
"url": "https://onlineserietv.lol",
"enabled": "1",
"OST_ForwardProxy": "0",
"OST_PROXY": "0"
},
"Vidxgo": {
"url": "https://v.vidxgo.co",
"enabled": "1",
"VD_ForwardProxy": "0",
"VD_PROXY": "0"
} }
}, },
"Captcha": { "Captcha": {
@@ -72,11 +84,11 @@
} }
}, },
"General": { "General": {
"load_env": "1", "load_env": "0",
"HOST": "0.0.0.0", "HOST": "0.0.0.0",
"PORT": 8080, "PORT": 8080,
"Name": "MammaMia", "Name": "MammaMia",
"Icon": "🍕", "Icon": "\ud83c\udf55",
"level": "info", "level": "info",
"Global_Proxy": "0" "Global_Proxy": "0"
} }
+26 -4
View File
@@ -14,6 +14,8 @@ from Src.API.animeworld import animeworld
from Src.API.guardaflix import guardaflix from Src.API.guardaflix import guardaflix
from Src.API.guardoserie import guardoserie from Src.API.guardoserie import guardoserie
from Src.API.eurostreaming import eurostreaming from Src.API.eurostreaming import eurostreaming
from Src.API.onlineserietv import onlineserietv
from Src.API.vidxgoalta import vidxgoalta
from Src.API.toonitalia import toonitalia from Src.API.toonitalia import toonitalia
from Src.API.realtime import search_catalog as realtime from Src.API.realtime import search_catalog as realtime
from Src.API.realtime import meta_catalog as meta_catalog_realtime from Src.API.realtime import meta_catalog as meta_catalog_realtime
@@ -56,6 +58,8 @@ GF = config.GF
GO = config.GO GO = config.GO
RT = config.RT RT = config.RT
TI = config.TI TI = config.TI
OST = config.OST
VD = config.VD
HOST = config.HOST HOST = config.HOST
PORT = int(config.PORT) PORT = int(config.PORT)
if env_vars.get('PORT_ENV'): if env_vars.get('PORT_ENV'):
@@ -309,7 +313,7 @@ async def addon_stream(request: Request,config, type, id,):
if provider_maps['GUARDASERIE'] == "1" and GS == "1": if provider_maps['GUARDASERIE'] == "1" and GS == "1":
streams = await guardaserie(streams,id,client) streams = await guardaserie(streams,id,client)
if provider_maps['GUARDAHD'] == "1" and GHD == "1": if provider_maps['GUARDAHD'] == "1" and GHD == "1":
streams = await guardahd(streams,id,client) streams = await guardahd(streams,id,client,MFP,MFP_CREDENTIALS)
if provider_maps['EUROSTREAMING'] == "1" and ES == "1": if provider_maps['EUROSTREAMING'] == "1" and ES == "1":
streams = await eurostreaming(streams,id,client,MFP,MFP_CREDENTIALS) streams = await eurostreaming(streams,id,client,MFP,MFP_CREDENTIALS)
if provider_maps['GUARDAFLIX'] == "1" and GF == "1": if provider_maps['GUARDAFLIX'] == "1" and GF == "1":
@@ -320,6 +324,10 @@ async def addon_stream(request: Request,config, type, id,):
streams = await streams_realtime(streams,id,client) streams = await streams_realtime(streams,id,client)
if provider_maps['TOONITALIA'] == '1' and TI == '1': if provider_maps['TOONITALIA'] == '1' and TI == '1':
streams = await toonitalia(streams,id,client,MFP,MFP_CREDENTIALS) streams = await toonitalia(streams,id,client,MFP,MFP_CREDENTIALS)
if provider_maps['ONLINESERIETV'] == '1' and OST == '1':
streams = await onlineserietv(streams,id,client)
if provider_maps['VIDXGO'] == '1' and VD == '1':
streams = await vidxgoalta(streams,id,client)
return respond_with(streams) return respond_with(streams)
if not streams['streams']: if not streams['streams']:
raise HTTPException(status_code=404) raise HTTPException(status_code=404)
@@ -330,7 +338,12 @@ async def addon_stream(request: Request,config, type, id,):
async def uprot(request: Request): async def uprot(request: Request):
async with AsyncSession(proxies = proxies) as client: async with AsyncSession(proxies = proxies) as client:
image, cookies = await get_uprot_numbers(client) image, cookies = await get_uprot_numbers(client)
response = static.TemplateResponse('uprot.html',{'request':request,"image_url": image}) context = {
'request': request,
'image_url': image
}
response = static.TemplateResponse('uprot.html',context=context)
if cookies: if cookies:
response.set_cookie(key='PHPSESSID', value=cookies.get('PHPSESSID'),httponly=True) response.set_cookie(key='PHPSESSID', value=cookies.get('PHPSESSID'),httponly=True)
@@ -343,14 +356,23 @@ async def execute_uprot(request: Request,user_input = Form(...),PHPSESSID: str =
} }
status = await generate_uprot_txt(user_input,cookies,client) status = await generate_uprot_txt(user_input,cookies,client)
if status == True: if status == True:
return static.TemplateResponse('uprot.html',{'request':request,"image_url": 'https://tinyurl.com/doneokdone'}) context = {
'request': request,
'image_url': 'https://tinyurl.com/doneokdone'
}
return static.TemplateResponse('uprot.html',context=context)
elif status == False: elif status == False:
return static.TemplateResponse('uprot.html',{'request':request,"image_url": 'https://tinyurl.com/tryagaindumb'}) context = {
'request': request,
'image_url': 'https://tinyurl.com/tryagaindumb'
}
return static.TemplateResponse('uprot.html',context=context)
@app.get('/update') @app.get('/update')
async def update(request: Request): async def update(request: Request):
async with AsyncSession(proxies = proxies) as client: async with AsyncSession(proxies = proxies) as client:
result = await update_all_sites(client) result = await update_all_sites(client)
print(result)
if result: if result:
return JSONResponse(content={"message": "200"}) return JSONResponse(content={"message": "200"})
if not result: if not result:
+14 -2
View File
@@ -180,7 +180,7 @@ CONFIGURE = """
<img src="https://creazilla-store.fra1.digitaloceanspaces.com/emojis/49647/pizza-emoji-clipart-md.png" alt="Logo"> <img src="https://creazilla-store.fra1.digitaloceanspaces.com/emojis/49647/pizza-emoji-clipart-md.png" alt="Logo">
</div> </div>
<h1 class="name">Mamma Mia</h1> <h1 class="name">Mamma Mia</h1>
<h2 class="version">v2.1.0</h2> <h2 class="version">v2.2.0</h2>
<div id="additionalText"> <div id="additionalText">
<h2>This addon provides Movie, Series, Anime, and Live TV HTTPS Streams.<br> https://github.com/UrloMythus/MammaMia/</h2> <h2>This addon provides Movie, Series, Anime, and Live TV HTTPS Streams.<br> https://github.com/UrloMythus/MammaMia/</h2>
</div> </div>
@@ -219,6 +219,16 @@ CONFIGURE = """
<input type="checkbox" id="cb01"> CB01 🕵️‍♂️ <input type="checkbox" id="cb01"> CB01 🕵️‍♂️
</label> </label>
</div> </div>
<div class="provider-group">
<label for="onlineserietv" class="provider-label">
<input type="checkbox" id="onlineserietv"> OnlineSerieTV
</label>
</div>
<div class="provider-group">
<label for="vidxgo" class="provider-label">
<input type="checkbox" id="vidxgo"> Vidxgo
</label>
</div>
<div class="provider-group"> <div class="provider-group">
<label for="streamingcommunity" class="provider-label"> <label for="streamingcommunity" class="provider-label">
<input type="checkbox" id="streamingcommunity"> StreamingCommunity 🕵️‍♂️ <input type="checkbox" id="streamingcommunity"> StreamingCommunity 🕵️‍♂️
@@ -232,7 +242,7 @@ CONFIGURE = """
</div> </div>
<div class="provider-group"> <div class="provider-group">
<label for="realtime" class="provider-label"> <label for="realtime" class="provider-label">
<input type="checkbox" id="toonitalia"> Toonitalia <input type="checkbox" id="toonitalia"> Toonitalia 🕵️‍♂️
</label> </label>
</div> </div>
<div class="provider-group"> <div class="provider-group">
@@ -287,6 +297,8 @@ CONFIGURE = """
"eurostreaming": "ES", "eurostreaming": "ES",
"realtime": "RT", "realtime": "RT",
"toonitalia": "TI", "toonitalia": "TI",
"onlineserietv": "OST",
"vidxgo": "VD",
"streamingcommunity_mfp": "SC_MFP", "streamingcommunity_mfp": "SC_MFP",
"mediaflowproxy": "MFP" "mediaflowproxy": "MFP"
}; };
+14 -2
View File
@@ -180,7 +180,7 @@ HTML = """
<img src="https://creazilla-store.fra1.digitaloceanspaces.com/emojis/49647/pizza-emoji-clipart-md.png" alt="Logo"> <img src="https://creazilla-store.fra1.digitaloceanspaces.com/emojis/49647/pizza-emoji-clipart-md.png" alt="Logo">
</div> </div>
<h1 class="name">Mamma Mia</h1> <h1 class="name">Mamma Mia</h1>
<h2 class="version">v2.1.0</h2> <h2 class="version">v2.2.0</h2>
<div id="additionalText"> <div id="additionalText">
<h2>This addon provides Movie, Series, Anime, and Live TV HTTPS Streams.<br> https://github.com/UrloMythus/MammaMia/</h2> <h2>This addon provides Movie, Series, Anime, and Live TV HTTPS Streams.<br> https://github.com/UrloMythus/MammaMia/</h2>
</div> </div>
@@ -219,6 +219,16 @@ HTML = """
<input type="checkbox" id="cb01"> CB01 🕵️‍♂️ <input type="checkbox" id="cb01"> CB01 🕵️‍♂️
</label> </label>
</div> </div>
<div class="provider-group">
<label for="onlineserietv" class="provider-label">
<input type="checkbox" id="onlineserietv"> OnlineSerieTV
</label>
</div>
<div class="provider-group">
<label for="vidxgo" class="provider-label">
<input type="checkbox" id="vidxgo"> Vidxgo
</label>
</div>
<div class="provider-group"> <div class="provider-group">
<label for="streamingcommunity" class="provider-label"> <label for="streamingcommunity" class="provider-label">
<input type="checkbox" id="streamingcommunity"> StreamingCommunity 🕵️‍♂️ <input type="checkbox" id="streamingcommunity"> StreamingCommunity 🕵️‍♂️
@@ -232,7 +242,7 @@ HTML = """
</div> </div>
<div class="provider-group"> <div class="provider-group">
<label for="realtime" class="provider-label"> <label for="realtime" class="provider-label">
<input type="checkbox" id="toonitalia"> Toonitalia <input type="checkbox" id="toonitalia"> Toonitalia 🕵️‍♂️
</label> </label>
</div> </div>
<div class="provider-group"> <div class="provider-group">
@@ -287,6 +297,8 @@ HTML = """
"eurostreaming": "ES", "eurostreaming": "ES",
"realtime": "RT", "realtime": "RT",
"toonitalia": "TI", "toonitalia": "TI",
"onlineserietv": "OST",
"vidxgo": "VD",
"streamingcommunity_mfp": "SC_MFP", "streamingcommunity_mfp": "SC_MFP",
"mediaflowproxy": "MFP" "mediaflowproxy": "MFP"
}; };