From 7d15ba6ba5df33204759acaf0a658e499ffb2d70 Mon Sep 17 00:00:00 2001 From: Urlo30 <91965455+UrloMythus@users.noreply.github.com> Date: Sat, 17 Aug 2024 13:58:42 +0200 Subject: [PATCH] Update streamingcommunity.py Fixed deleted lines --- streamingcommunity.py | 185 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) diff --git a/streamingcommunity.py b/streamingcommunity.py index 17de0db..decd288 100644 --- a/streamingcommunity.py +++ b/streamingcommunity.py @@ -1,3 +1,188 @@ +from tmdbv3api import TMDb, Movie, TV +import requests +import logging +from bs4 import BeautifulSoup,SoupStrainer +from datetime import datetime +import dateparser +from convert import get_TMDb_id_from_IMDb_id +from info import get_info_tmdb, is_movie, get_info_imdb +import config +import json +import re +from urllib.parse import urlparse, parse_qs + +#Get domain +SC_DOMAIN= config.SC_DOMAIN +SC_FAST_SEARCH = config.SC_FAST_SEARCH + +headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.10; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', + 'Accept-Language': 'en-US,en;q=0.5' +} + +#GET VERSION OF STREAMING COMMUNITY: +def get_version(): + #Extract the version from the main page of the site + + + try: + base_url = f'https://streamingcommunity.{SC_DOMAIN}/richiedi-un-titolo' + response = requests.get(base_url, headers=headers) + #Soup the response + soup = BeautifulSoup(response.text, "lxml") + + # Extract version + version = json.loads(soup.find("div", {"id": "app"}).get("data-page"))['version'] + return version + except: + print("Couldn't find the version") + version = "65e52dcf34d64173542cd2dc6b8bb75b" + return version + +def search(query,date,ismovie): + #Do a request to get the ID of serie/move and it's slug in the URL + response = requests.get(query).json() + for item in response['data']: + tid = item['id'] + slug = item['slug'] + type = item['type'] + if type == "tv": + type = 0 + elif type == "movie": + type = 1 + if type == ismovie: + #Added a Check to see if the result is what it is supposed to be + if SC_FAST_SEARCH == "0": + if ismovie == 0: + seasons_count = item['seasons_count'] + #Do not ask me why but somewhy streaming community call the first air date the last air date + first_air_date = item['last_air_date'] + if first_air_date: + first_air_year = first_air_date.split("-")[0] + if first_air_year == date: + return tid,slug + else: + response = requests.get ( f'https://streamingcommunity.boston/titles/{tid}-{slug}') + pattern = r']*class="features"[^>]*>.*?]*>(.*?)<\/span>' + match = re.search(pattern, response.text) + print(match.group(1).split("-")[0]) + first_air_year = match.group(1).split("-")[0] + date = int(date) + first_air_year = int(first_air_year) + if first_air_year == date: + return tid,slug + elif ismovie == 1: + return tid,slug + elif SC_FAST_SEARCH == "1": + return tid,slug + else: + print("Couldn't find anything") + + +def get_film(tid,version): + headers = { + 'user-agent': "Mozilla/5.0 (Windows NT 10.10; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537", + 'x-inertia': 'true', + #Version of streaming community + 'x-inertia-version': version + } + #Access the iframe + url = f'https://streamingcommunity.{SC_DOMAIN}/iframe/{tid}' + response = requests.get(url, headers=headers) + iframe = BeautifulSoup(response.text, 'lxml') + #Get the link of iframe + iframe = iframe.find('iframe').get("src") + #Get the ID containted in the src of iframe + vixid = iframe.split("/embed/")[1].split("?")[0] + parsed_url = urlparse(iframe) + query_params = parse_qs(parsed_url.query) + #Get real token and expires by looking at the page in the iframe, vixcloud/embed + resp = requests.get(iframe, headers = headers) + soup= BeautifulSoup(resp.text, "lxml") + script = soup.find("body").find("script").text + token = re.search(r"'token':\s*'(\w+)'", script).group(1) + expires = re.search(r"'expires':\s*'(\d+)'", script).group(1) + quality = re.search(r'"quality":(\d+)', script).group(1) + #Example url https://vixcloud.co/playlist/231315?b=1&token=bce060eec3dc9d1965a5d258dc78c964&expires=1728995040&rendition=1080p + url = f'https://vixcloud.co/playlist/{vixid}?token={token}&expires={expires}' + if 'canPlayFHD' in query_params: + canPlayFHD = 'h=1' + url += "&h=1" + if 'b' in query_params: + b = 'b=1' + url += "&b=1" + url720 = f'https://vixcloud.co/playlist/{vixid}' + return url,url720,quality, + +def get_season_episode_id(tid,slug,season,episode,version): + #Set some basic headers for the request + headers = { + 'user-agent': "Mozilla/5.0 (Windows NT 10.10; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3", + 'x-inertia': 'true', + #Version of streaming community + 'x-inertia-version': version + } + #Get episode ID + response = requests.get(f'https://streamingcommunity.{SC_DOMAIN}/titles/{tid}-{slug}/stagione-{season}', headers=headers) + # Print the json got + json_response = response.json().get('props', {}).get('loadedSeason', {}).get('episodes', []) + for dict_episode in json_response: + if dict_episode['number'] == episode: + return dict_episode['id'] + +def get_episode_link(episode_id,tid,version): + #The parameters for the request + params = { + 'episode_id': episode_id, + 'next_episode': '1' + } + #Let's try to get the link from iframe source + # Make a request to get iframe source + response = requests.get(f"https://streamingcommunity.{SC_DOMAIN}/iframe/{tid}", params=params) + + # Parse response with BeautifulSoup to get iframe source + soup = BeautifulSoup(response.text, "lxml") + iframe = soup.find("iframe").get("src") + vixid = iframe.split("/embed/")[1].split("?")[0] + headers = { + 'user-agent': "Mozilla/5.0 (Windows NT 10.10; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537", + 'x-inertia': 'true', + #Version of streaming community + 'x-inertia-version': version + } + parsed_url = urlparse(iframe) + query_params = parse_qs(parsed_url.query) + #Get real token and expires by looking at the page in the iframe, vixcloud/embed + resp = requests.get(iframe, headers = headers) + soup= BeautifulSoup(resp.text, "lxml") + script = soup.find("body").find("script").text + token = re.search(r"'token':\s*'(\w+)'", script).group(1) + expires = re.search(r"'expires':\s*'(\d+)'", script).group(1) + quality = re.search(r'"quality":(\d+)', script).group(1) + #Example url https://vixcloud.co/playlist/231315?b=1&token=bce060eec3dc9d1965a5d258dc78c964&expires=1728995040&rendition=1080p + url = f'https://vixcloud.co/playlist/{vixid}?token={token}&expires={expires}' + if 'canPlayFHD' in query_params: + canPlayFHD = 'h=1' + url += "&h=1" + if 'b' in query_params: + b = 'b=1' + url += "&b=1" + url720 = f'https://vixcloud.co/playlist/{vixid}' + return url,url720,quality + + +def streaming_community(imdb): + try: + general = is_movie(imdb) + ismovie = general[0] + imdb_id = general[1] + type = "StreamingCommunity" + if ismovie == 0 : + season = int(general[2]) + episode = int(general[3]) + #Check if fast search is enabled or disabled + if SC_FAST_SEARCH == "1": + if "tt" in imdb: #Get showname showname = get_info_imdb(imdb_id,ismovie,type) date = None