Fix anime cant find eng title

This commit is contained in:
Ghost 2024-04-13 11:23:00 +02:00
parent e90588b302
commit f98bb29f0a
3 changed files with 78 additions and 4 deletions

View File

@ -50,7 +50,7 @@ def get_token(site_name: str, domain: str) -> dict:
find_csrf_token = None
# Parse the HTML response using BeautifulSoup
soup = BeautifulSoup(response.text, "lxml")
soup = BeautifulSoup(response.text, "html.parser")
# Loop through all meta tags in the HTML response
for html_meta in soup.find_all("meta"):
@ -282,6 +282,34 @@ def update_domain_anime():
config_manager.set_key('SITE', 'anime_domain', new_site_url.split(".")[-1])
def get_real_title(record):
"""
Get the real title from a record.
This function takes a record, which is assumed to be a dictionary representing a row of JSON data.
It looks for a title in the record, prioritizing English over Italian titles if available.
Args:
- record (dict): A dictionary representing a row of JSON data.
Returns:
- str: The title found in the record. If no title is found, returns None.
Example:
If `record` is {'title': 'Example Title', 'title_eng': 'English Title', 'title_it': 'Titolo Italiano'},
the function will return 'Example Title' since it's the first available title.
"""
if record['title'] is not None:
return record['title']
elif record['title_eng'] is not None:
return record['title_eng']
else:
return record['title_it']
def anime_search(title_search: str) -> int:
"""
Function to perform an anime search using a provided title.
@ -326,12 +354,11 @@ def anime_search(title_search: str) -> int:
for record in response.json()['records']:
# Rename keys for consistency
record['name'] = record.pop('title')
record['name'] = get_real_title(record)
record['last_air_date'] = record.pop('date')
# Add the record to media search manager if the name is not None
if record['name'] is not None:
media_search_manager.add_media(record)
media_search_manager.add_media(record)
# Return the length of media search manager
return media_search_manager.get_length()

View File

@ -4,6 +4,7 @@ from .helper import (
has_audio_stream,
get_video_duration,
format_duration,
get_ts_resolution,
print_duration_table,
add_subtitle,
concatenate_and_save,

View File

@ -128,6 +128,52 @@ def print_duration_table(file_path: str) -> None:
console.log(f"[cyan]Info [green]'{file_path}': [purple]{int(hours)}[red]h [purple]{int(minutes)}[red]m [purple]{int(seconds)}[red]s")
def get_ts_resolution(ts_file_path):
"""
Get the resolution of a TS (MPEG Transport Stream) file using ffprobe.
Args:
- ts_file_path (str): The file path to the TS file.
Returns:
- tuple: A tuple containing the width and height of the video stream in the TS file.
If resolution information is not available, returns (None, None).
Example:
If `ts_file_path` points to a TS file with video resolution 1920x1080,
the function will return (1920, 1080).
"""
# Run ffprobe command to get video stream information
ffprobe_cmd = ['ffprobe', '-v', 'error', '-show_entries', 'stream=width,height', '-of', 'json', ts_file_path]
try:
# Execute ffprobe command and capture output
output = subprocess.check_output(ffprobe_cmd, stderr=subprocess.STDOUT)
# Decode JSON output
info = json.loads(output)
# Check if there are streams
if 'streams' in info:
for stream in info['streams']:
# Check if stream is video
if stream.get('codec_type') == 'video':
# Extract width and height
width = stream.get('width')
height = stream.get('height')
return width, height
except subprocess.CalledProcessError as e:
logging.error("Error running ffprobe:", e)
# If no resolution information found, return None
return None, None
def add_subtitle(input_video_path: str, input_subtitle_path: str, output_video_path: str, subtitle_language: str = 'ita', prefix: str = "single_sub") -> str:
"""
Convert a video with a single subtitle.