Improve title and video quality & update python and packages

This commit is contained in:
mhdzumair
2023-08-06 00:30:59 +05:30
parent b98ac2d4fa
commit 8ceff424fe
10 changed files with 611 additions and 465 deletions
+3 -1
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -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
View File
@@ -1,4 +1,4 @@
{
"projectName": "stremio-tamilblasters",
"lastCommit": "c2828d5"
"lastCommit": "b98ac2d"
}
+1 -1
View File
@@ -1,4 +1,4 @@
from pydantic import BaseSettings
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
+8 -18
View File
@@ -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
+2 -1
View File
@@ -21,7 +21,8 @@ class Movie(BaseModel):
class Stream(BaseModel):
name: str
name: str | None = None
description: str | None = None
infoHash: str
+1 -1
View File
@@ -1 +1 @@
python-3.10.11
python-3.11.3
+52
View File
@@ -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
View File
@@ -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)