From bd922afde2f4217f331a8857303051d6f7d0d249 Mon Sep 17 00:00:00 2001 From: Lovi <62809003+Lovi-0@users.noreply.github.com> Date: Sun, 27 Apr 2025 19:33:13 +0200 Subject: [PATCH] Bump v3.0.1 --- StreamingCommunity/Api/Site/1337xx/site.py | 5 +- .../Api/Site/cb01new/__init__.py | 71 ---------------- StreamingCommunity/Api/Site/cb01new/film.py | 62 -------------- StreamingCommunity/Api/Site/cb01new/site.py | 81 ------------------- StreamingCommunity/Upload/version.py | 2 +- StreamingCommunity/Util/config_json.py | 24 +++--- setup.py | 2 +- 7 files changed, 17 insertions(+), 230 deletions(-) delete mode 100644 StreamingCommunity/Api/Site/cb01new/__init__.py delete mode 100644 StreamingCommunity/Api/Site/cb01new/film.py delete mode 100644 StreamingCommunity/Api/Site/cb01new/site.py diff --git a/StreamingCommunity/Api/Site/1337xx/site.py b/StreamingCommunity/Api/Site/1337xx/site.py index e589d69..b1891aa 100644 --- a/StreamingCommunity/Api/Site/1337xx/site.py +++ b/StreamingCommunity/Api/Site/1337xx/site.py @@ -58,7 +58,7 @@ def title_search(query: str) -> int: # Create soup and find table soup = BeautifulSoup(response.text, "html.parser") - for tr in soup.find_all('tr'): + for i, tr in enumerate(soup.find_all('tr')): try: title_info = { @@ -72,6 +72,9 @@ def title_search(query: str) -> int: } media_search_manager.add_media(title_info) + if i == 20: + break + except Exception as e: print(f"Error parsing a film entry: {e}") diff --git a/StreamingCommunity/Api/Site/cb01new/__init__.py b/StreamingCommunity/Api/Site/cb01new/__init__.py deleted file mode 100644 index 30cdb61..0000000 --- a/StreamingCommunity/Api/Site/cb01new/__init__.py +++ /dev/null @@ -1,71 +0,0 @@ -# 09.06.24 - -from urllib.parse import quote_plus - - -# External library -from rich.console import Console -from rich.prompt import Prompt - - -# Internal utilities -from StreamingCommunity.Api.Template import get_select_title -from StreamingCommunity.Api.Template.config_loader import site_constant -from StreamingCommunity.Api.Template.Class.SearchType import MediaItem - - -# Logic class -from .site import title_search, media_search_manager, table_show_manager -from .film import download_film - - -# Variable -indice = 4 -_useFor = "film" -_priority = 0 -_engineDownload = "mp4" - -msg = Prompt() -console = Console() - - -def process_search_result(select_title): - """ - Handles the search result and initiates the download for either a film or series. - """ - # !!! ADD TYPE DONT WORK FOR SERIE - download_film(select_title) - -def search(string_to_search: str = None, get_onlyDatabase: bool = False, direct_item: dict = None): - """ - Main function of the application for search. - - Parameters: - string_to_search (str, optional): String to search for - get_onylDatabase (bool, optional): If True, return only the database object - direct_item (dict, optional): Direct item to process (bypass search) - """ - if direct_item: - select_title = MediaItem(**direct_item) - process_search_result(select_title) - return - - if string_to_search is None: - string_to_search = msg.ask(f"\n[purple]Insert word to search in [green]{site_constant.SITE_NAME}").strip() - - # Search on database - len_database = title_search(quote_plus(string_to_search)) - - ## If only the database is needed, return the manager - if get_onlyDatabase: - return media_search_manager - - if len_database > 0: - select_title = get_select_title(table_show_manager, media_search_manager) - process_search_result(select_title) - - else: - - # If no results are found, ask again - console.print(f"\n[red]Nothing matching was found for[white]: [purple]{string_to_search}") - search() \ No newline at end of file diff --git a/StreamingCommunity/Api/Site/cb01new/film.py b/StreamingCommunity/Api/Site/cb01new/film.py deleted file mode 100644 index 08f5506..0000000 --- a/StreamingCommunity/Api/Site/cb01new/film.py +++ /dev/null @@ -1,62 +0,0 @@ -# 03.07.24 - -import os - - -# External library -from rich.console import Console - - -# Internal utilities -from StreamingCommunity.Util.os import os_manager -from StreamingCommunity.Util.message import start_message -from StreamingCommunity.Lib.Downloader import HLS_Downloader - - -# Logic class -from StreamingCommunity.Api.Template.config_loader import site_constant -from StreamingCommunity.Api.Template.Class.SearchType import MediaItem - - -# Player -from StreamingCommunity.Api.Player.maxstream import VideoSource - - -# Variable -console = Console() - - -def download_film(select_title: MediaItem) -> str: - """ - Downloads a film using the provided obj. - - Parameters: - - select_title (MediaItem): The media item to be downloaded. This should be an instance of the MediaItem class, containing attributes like `name` and `url`. - - Return: - - str: output path - """ - start_message() - console.print(f"[bold yellow]Download:[/bold yellow] [red]{site_constant.SITE_NAME}[/red] → [cyan]{select_title.name}[/cyan] \n") - - # Setup api manger - video_source = VideoSource(select_title.url) - - # Define output path - title_name = os_manager.get_sanitize_file(select_title.name) +".mp4" - mp4_path = os.path.join(site_constant.MOVIE_FOLDER, title_name.replace(".mp4", "")) - - # Get m3u8 master playlist - master_playlist = video_source.get_playlist() - - # Download the film using the m3u8 playlist, and output filename - r_proc = HLS_Downloader( - m3u8_url=master_playlist, - output_path=os.path.join(mp4_path, title_name) - ).start() - - if r_proc['error'] is not None: - try: os.remove(r_proc['path']) - except: pass - - return r_proc['path'] \ No newline at end of file diff --git a/StreamingCommunity/Api/Site/cb01new/site.py b/StreamingCommunity/Api/Site/cb01new/site.py deleted file mode 100644 index d8370ae..0000000 --- a/StreamingCommunity/Api/Site/cb01new/site.py +++ /dev/null @@ -1,81 +0,0 @@ -# 03.07.24 - -import sys - - -# External libraries -import httpx -from bs4 import BeautifulSoup -from rich.console import Console - - -# Internal utilities -from StreamingCommunity.Util.config_json import config_manager -from StreamingCommunity.Util.headers import get_userAgent -from StreamingCommunity.Util.table import TVShowManager - - -# Logic class -from StreamingCommunity.Api.Template.config_loader import site_constant -from StreamingCommunity.Api.Template.Class.SearchType import MediaManager - - -# Variable -console = Console() -media_search_manager = MediaManager() -table_show_manager = TVShowManager() -max_timeout = config_manager.get_int("REQUESTS", "timeout") - - -def title_search(query: str) -> int: - """ - Search for titles based on a search query. - - Parameters: - - query (str): The query to search for. - - Returns: - - int: The number of titles found. - """ - media_search_manager.clear() - table_show_manager.clear() - - search_url = f"{site_constant.FULL_URL}/?s={query}" - console.print(f"[cyan]Search url: [yellow]{search_url}") - - try: - response = httpx.get( - search_url, - headers={'user-agent': get_userAgent()}, - timeout=max_timeout, - follow_redirects=True, - verify=False - ) - response.raise_for_status() - - except Exception as e: - console.print(f"Site: {site_constant.SITE_NAME}, request search error: {e}") - return 0 - - # Create soup and find table - soup = BeautifulSoup(response.text, "html.parser") - - for card in soup.find_all("div", class_=["card", "mp-post", "horizontal"]): - try: - title_tag = card.find("h3", class_="card-title").find("a") - url = title_tag.get("href") - title = title_tag.get_text(strip=True) - - title_info = { - 'name': title, - 'url': url, - 'type': 'film' - } - - media_search_manager.add_media(title_info) - - except Exception as e: - print(f"Error parsing a film entry: {e}") - - # Return the number of titles found - return media_search_manager.get_length() \ No newline at end of file diff --git a/StreamingCommunity/Upload/version.py b/StreamingCommunity/Upload/version.py index fe9e660..1d6805e 100644 --- a/StreamingCommunity/Upload/version.py +++ b/StreamingCommunity/Upload/version.py @@ -1,5 +1,5 @@ __title__ = 'StreamingCommunity' -__version__ = '3.0.0' +__version__ = '3.0.1' __author__ = 'Arrowar' __description__ = 'A command-line program to download film' __copyright__ = 'Copyright 2024' diff --git a/StreamingCommunity/Util/config_json.py b/StreamingCommunity/Util/config_json.py index cf78b03..82dc1cd 100644 --- a/StreamingCommunity/Util/config_json.py +++ b/StreamingCommunity/Util/config_json.py @@ -12,6 +12,10 @@ from typing import Any, List from rich.console import Console +# Internal utilities +from StreamingCommunity.Util.headers import get_userAgent + + # Variable console = Console() download_site_data = True @@ -134,7 +138,7 @@ class ConfigManager: console.print(f"[bold cyan]Downloading reference configuration:[/bold cyan] [green]{self.reference_config_url}[/green]") try: - response = requests.get(self.reference_config_url, timeout=10) + response = requests.get(self.reference_config_url, timeout=8, headers={'User-Agent': get_userAgent()}) if response.status_code == 200: with open(self.file_path, 'wb') as f: @@ -156,7 +160,7 @@ class ConfigManager: try: # Download the reference configuration console.print(f"[bold cyan]Validating configuration with GitHub...[/bold cyan]") - response = requests.get(self.reference_config_url, timeout=10) + response = requests.get(self.reference_config_url, timeout=8, headers={'User-Agent': get_userAgent()}) if not response.ok: raise Exception(f"Error downloading reference configuration. Code: {response.status_code}") @@ -267,13 +271,14 @@ class ConfigManager: headers = { "apikey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inp2Zm5ncG94d3Jnc3duenl0YWRoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDAxNTIxNjMsImV4cCI6MjA1NTcyODE2M30.FNTCCMwi0QaKjOu8gtZsT5yQttUW8QiDDGXmzkn89QE", "Authorization": f"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inp2Zm5ncG94d3Jnc3duenl0YWRoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDAxNTIxNjMsImV4cCI6MjA1NTcyODE2M30.FNTCCMwi0QaKjOu8gtZsT5yQttUW8QiDDGXmzkn89QE", - "Content-Type": "application/json" + "Content-Type": "application/json", + "User-Agent": get_userAgent() } try: console.print("[bold cyan]Retrieving site data from API...[/bold cyan]") - response = requests.get("https://zvfngpoxwrgswnzytadh.supabase.co/rest/v1/public", headers=headers, timeout=10) - + response = requests.get("https://zvfngpoxwrgswnzytadh.supabase.co/rest/v1/public", timeout=8, headers=headers) + if response.ok: data = response.json() if data and len(data) > 0: @@ -282,13 +287,6 @@ class ConfigManager: site_count = len(self.configSite) if isinstance(self.configSite, dict) else 0 console.print(f"[bold green]Site data retrieved:[/bold green] {site_count} streaming services available") - # Show some sites as examples - if site_count > 0: - examples = list(self.configSite.items())[:3] - sites_info = [] - for site, info in examples: - url = info.get('full_url', 'N/A') - console.print(f" • [cyan]{site}[/cyan]: {url}") else: console.print("[bold yellow]API returned an empty data set[/bold yellow]") else: @@ -347,7 +345,7 @@ class ConfigManager: try: logging.info(f"Downloading {filename} from {url}...") console.print(f"[bold cyan]File download:[/bold cyan] {os.path.basename(filename)}") - response = requests.get(url, timeout=10) + response = requests.get(url, timeout=8, headers={'User-Agent': get_userAgent()}) if response.status_code == 200: with open(filename, 'wb') as f: diff --git a/setup.py b/setup.py index 34268d6..26c3a82 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ with open(os.path.join(os.path.dirname(__file__), "requirements.txt"), "r", enco setup( name="StreamingCommunity", - version="3.0.0", + version="3.0.1", long_description=read_readme(), long_description_content_type="text/markdown", author="Lovi-0",