mirror of
https://github.com/Viren070/MediaFusion.git
synced 2025-12-01 23:21:11 +01:00
Improve title and video quality & update python and packages
This commit is contained in:
@@ -19,8 +19,10 @@ jinja2 = "*"
|
||||
apscheduler = "*"
|
||||
python-dateutil = "*"
|
||||
bencodepy = "*"
|
||||
pydantic-settings = "*"
|
||||
fake-useragent = "*"
|
||||
|
||||
[dev-packages]
|
||||
|
||||
[requires]
|
||||
python_version = "3.10"
|
||||
python_version = "3.11"
|
||||
|
||||
Generated
+538
-439
File diff suppressed because it is too large
Load Diff
+1
-2
@@ -9,8 +9,7 @@ from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from fastapi.templating import Jinja2Templates
|
||||
|
||||
from api import schemas
|
||||
from db import database, crud
|
||||
from db import database, crud, schemas
|
||||
from utils import scrap
|
||||
|
||||
logging.basicConfig(format="%(levelname)s::%(asctime)s - %(message)s", datefmt="%d-%b-%y %H:%M:%S", level=logging.INFO)
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"projectName": "stremio-tamilblasters",
|
||||
"lastCommit": "c2828d5"
|
||||
"lastCommit": "b98ac2d"
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
from pydantic import BaseSettings
|
||||
from pydantic_settings import BaseSettings
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
|
||||
+8
-18
@@ -4,8 +4,10 @@ from uuid import uuid4
|
||||
|
||||
from imdb import Cinemagoer, IMDbDataAccessError
|
||||
|
||||
from api import schemas
|
||||
from db import schemas
|
||||
from db.models import TamilBlasterMovie
|
||||
from db.schemas import Stream
|
||||
from utils.parser import extract_stream_details
|
||||
|
||||
ia = Cinemagoer()
|
||||
|
||||
@@ -23,7 +25,7 @@ async def get_movies_meta(catalog: str, skip: int = 0, limit: int = 100):
|
||||
unique_names = []
|
||||
|
||||
for movie in movies:
|
||||
meta_data = schemas.Meta.parse_obj(movie)
|
||||
meta_data = schemas.Meta.model_validate(movie.model_dump())
|
||||
meta_data.id = movie.imdb_id if movie.imdb_id else movie.tamilblaster_id
|
||||
if movie.name not in unique_names:
|
||||
movies_meta.append(meta_data)
|
||||
@@ -44,25 +46,19 @@ async def get_movies_data(video_id: str, video_type: str = "movie") -> list[Opti
|
||||
return movie_data
|
||||
|
||||
|
||||
async def get_movie_streams(video_id: str):
|
||||
async def get_movie_streams(video_id: str) -> list[Stream]:
|
||||
movies_data = await get_movies_data(video_id)
|
||||
if not movies_data:
|
||||
return []
|
||||
|
||||
stream_data = []
|
||||
for movie_data in movies_data:
|
||||
for name, info_hash in movie_data.video_qualities.items():
|
||||
stream_data.append(
|
||||
{
|
||||
"name": name,
|
||||
"infoHash": info_hash,
|
||||
}
|
||||
)
|
||||
stream_data.extend(extract_stream_details(movie_data.video_qualities))
|
||||
|
||||
return stream_data
|
||||
|
||||
|
||||
async def get_series_streams(video_id: str, season: int, episode: str):
|
||||
async def get_series_streams(video_id: str, season: int, episode: str) -> list[Stream]:
|
||||
series_data = await get_movies_data(video_id, video_type="series")
|
||||
if not series_data:
|
||||
return []
|
||||
@@ -70,13 +66,7 @@ async def get_series_streams(video_id: str, season: int, episode: str):
|
||||
stream_data = []
|
||||
for series in series_data:
|
||||
if series.episode == episode and series.season == season:
|
||||
for name, info_hash in series.video_qualities.items():
|
||||
stream_data.append(
|
||||
{
|
||||
"name": name,
|
||||
"infoHash": info_hash,
|
||||
}
|
||||
)
|
||||
stream_data.extend(extract_stream_details(series.video_qualities))
|
||||
|
||||
return stream_data
|
||||
|
||||
|
||||
@@ -21,7 +21,8 @@ class Movie(BaseModel):
|
||||
|
||||
|
||||
class Stream(BaseModel):
|
||||
name: str
|
||||
name: str | None = None
|
||||
description: str | None = None
|
||||
infoHash: str
|
||||
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
python-3.10.11
|
||||
python-3.11.3
|
||||
@@ -0,0 +1,52 @@
|
||||
import re
|
||||
|
||||
from db.schemas import Stream
|
||||
|
||||
|
||||
def extract_stream_details(video_qualities: dict) -> list[Stream]:
|
||||
stream_list = []
|
||||
for quality_string, hash_value in video_qualities.items():
|
||||
stream_details = {}
|
||||
|
||||
# Quality
|
||||
quality = re.search(
|
||||
r"(4K|\d{3,4}p|HQ HDRip|HDRip|HQ PreDVDRip|HQ Real-PreDVDRip|HQ-Real PreDVDRip|HQ-S Print)", quality_string
|
||||
)
|
||||
if quality:
|
||||
quality = quality.group(0)
|
||||
else:
|
||||
quality = "N/A"
|
||||
|
||||
# Size
|
||||
size = re.search(r"(\d+(\.\d+)?(MB|GB))", quality_string)
|
||||
if size:
|
||||
size = size.group(0)
|
||||
else:
|
||||
size = "N/A"
|
||||
|
||||
# Languages
|
||||
lang_dict = {
|
||||
"Tam": "Tamil",
|
||||
"Mal": "Malayalam",
|
||||
"Tel": "Telugu",
|
||||
"Kan": "Kannada",
|
||||
"Hin": "Hindi",
|
||||
"Eng": "English",
|
||||
}
|
||||
|
||||
languages = []
|
||||
for short, full in lang_dict.items():
|
||||
if re.search(f"({short}|{full})", quality_string, re.IGNORECASE):
|
||||
languages.append(full)
|
||||
|
||||
stream_details["name"] = "TamilBlasters"
|
||||
|
||||
# Concatenate the description components
|
||||
stream_details["description"] = f"{quality}, {size}, {' + '.join(languages)}"
|
||||
|
||||
# Add the info hash
|
||||
stream_details["infoHash"] = hash_value
|
||||
|
||||
stream_list.append(Stream(**stream_details))
|
||||
|
||||
return stream_list
|
||||
+4
-1
@@ -8,6 +8,7 @@ import re
|
||||
import cloudscraper
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
from fake_useragent import UserAgent
|
||||
from dateutil.parser import parse as dateparser
|
||||
from requests.adapters import HTTPAdapter
|
||||
from urllib3.util.retry import Retry
|
||||
@@ -15,7 +16,7 @@ from urllib3.util.retry import Retry
|
||||
from db import database, crud
|
||||
from utils.torrent import get_info_hash_from_url
|
||||
|
||||
homepage = "https://www.1tamilblasters.site"
|
||||
homepage = "https://www.1tamilblasters.co"
|
||||
|
||||
tamil_blaster_links = {
|
||||
"tamil": {
|
||||
@@ -57,7 +58,9 @@ tamil_blaster_links = {
|
||||
|
||||
|
||||
def get_scrapper_session():
|
||||
ua = UserAgent()
|
||||
session = requests.session()
|
||||
session.headers = {"User-Agent": ua.random}
|
||||
adapter = HTTPAdapter(max_retries=Retry(total=10, read=10, connect=10, backoff_factor=0.3))
|
||||
session.mount("http://", adapter)
|
||||
session.mount("https://", adapter)
|
||||
|
||||
Reference in New Issue
Block a user