151 lines
5.0 KiB
Python
151 lines
5.0 KiB
Python
from Src.Utilities.info import is_movie
|
|
from bs4 import BeautifulSoup,SoupStrainer
|
|
import re
|
|
import Src.Utilities.config as config
|
|
from fake_headers import Headers
|
|
from Src.Utilities.loadenv import load_env
|
|
import json, random
|
|
from Src.Utilities.info import get_info_imdb,get_info_tmdb
|
|
import urllib.parse
|
|
from Src.Utilities.convert import get_IMDB_id_from_TMDb_id
|
|
from Src.API.extractors.supervideo import supervideo
|
|
import logging
|
|
from Src.Utilities.config import setup_logging
|
|
level = config.LEVEL
|
|
logger = setup_logging(level)
|
|
|
|
env_vars = load_env()
|
|
GS_PROXY = config.GS_PROXY
|
|
proxies = {}
|
|
if GS_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
|
|
}
|
|
GS_ForwardProxy = config.GS_ForwardProxy
|
|
if GS_ForwardProxy == "1":
|
|
ForwardProxy = env_vars.get('ForwardProxy')
|
|
else:
|
|
ForwardProxy = ""
|
|
#Get domain
|
|
GS_DOMAIN = config.GS_DOMAIN
|
|
random_headers = Headers()
|
|
|
|
async def search_imdb(clean_id,client):
|
|
try:
|
|
headers = random_headers.generate()
|
|
response = await client.get(ForwardProxy + f'{GS_DOMAIN}/?story={clean_id}&do=search&subaction=search', allow_redirects=True, headers = headers, proxies = proxies)
|
|
if response.status_code != 200:
|
|
logger.warning(f"Guardaserie Failed to fetch search results: {response.status_code}")
|
|
soup = BeautifulSoup(response.text,'lxml',parse_only=SoupStrainer('div',class_="mlnh-2"))
|
|
div_mlnh2 = soup.select_one('div.mlnh-2:nth-of-type(2)')
|
|
a_tag = div_mlnh2.find('h2').find('a')
|
|
href = a_tag['href']
|
|
return href
|
|
except Exception as e:
|
|
logger.warning(f'GS {e}')
|
|
return None
|
|
'''
|
|
async def search(showname,date,client):
|
|
try:
|
|
headers = random_headers.generate()
|
|
showname = urllib.parse.quote(showname)
|
|
response = await client.get(ForwardProxy + f'{GS_DOMAIN}/?story={showname}&do=search&subaction=search', allow_redirects=True, impersonate = "chrome124", headers = headers, proxies = proxies)
|
|
if response.status_code != 200:
|
|
logger.warning(f"Guardaserie Failed to fetch search results: {response.status_code}")
|
|
soup = BeautifulSoup(response.text,'lxml',parse_only=SoupStrainer('div'))
|
|
div_mlnew = soup.find_all('div', class_='mlnew')
|
|
for mlnew in div_mlnew:
|
|
div_date = mlnew.find('div', class_='mlnh-3 hdn').text
|
|
div_date = div_date[:4]
|
|
if div_date == date:
|
|
a_tag = mlnew.find('div', class_='mlnh-2').find('h2').find('a')
|
|
href = a_tag['href']
|
|
return href
|
|
|
|
except Exception as e:
|
|
return None
|
|
'''
|
|
|
|
|
|
async def player_url(page_url, season, episode,client):
|
|
try:
|
|
headers = random_headers.generate()
|
|
response = await client.get(ForwardProxy + page_url, allow_redirects=True, headers = headers, proxies = proxies)
|
|
soup = BeautifulSoup(response.text,'lxml',parse_only=SoupStrainer('a'))
|
|
a_tag = soup.find('a', id = f"serie-{season}_{episode}")
|
|
href = a_tag['data-link']
|
|
return href
|
|
except Exception as e:
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
async def guardaserie(streams,id,client):
|
|
try:
|
|
general = await is_movie(id)
|
|
ismovie = general[0]
|
|
clean_id = general[1]
|
|
if ismovie == 1:
|
|
return streams
|
|
if ismovie == 0:
|
|
season = general[2]
|
|
episode = general[3]
|
|
type = "Guardaserie"
|
|
page_url = await search_imdb(clean_id,client)
|
|
supervideo_link =await player_url(page_url,season,episode,client)
|
|
if supervideo_link:
|
|
streams = await supervideo(supervideo_link, client, streams,"Guardaserie",proxies, ForwardProxy)
|
|
return streams
|
|
else:
|
|
logger.warning(" GS Couldn't find iframe source")
|
|
return streams
|
|
except Exception as e:
|
|
logger.warning(f"MammaMia: Guardaserie Failed{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 = "tt10919420:1:1" # This is an example ID format tt0460649
|
|
results = await guardaserie({'streams': []},test_id, client)
|
|
print(results)
|
|
|
|
if __name__ == "__main__":
|
|
import asyncio
|
|
asyncio.run(test_script())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
if "tt" not in clean_id:
|
|
clean_id = await get_IMDB_id_from_TMDb_id(clean_id,client)
|
|
print(clean_id)
|
|
'''
|
|
'''
|
|
if "tt" in id:
|
|
showname,date = await get_info_imdb(clean_id,ismovie,type,client)
|
|
else:
|
|
showname,date = get_info_tmdb(clean_id,ismovie,type)
|
|
showname = showname.replace("'"," ")
|
|
if "Guru" in showname:
|
|
showname = showname.split("-")[0]
|
|
'''
|
|
'''
|
|
page_url = await search(showname,date,client)
|
|
''' |