junaid17's picture
Upload 12 files
d8504c1 verified
from dotenv import load_dotenv
import os
import edge_tts
import tempfile
from uuid import uuid4
import requests
load_dotenv()
API_KEY = os.getenv("TMDB_API_KEY")
BASE_URL = "https://api.themoviedb.org/3"
IMAGE_BASE = "https://image.tmdb.org/t/p/w500"
#--------------------------------- get movie id ----------------------------
def get_movie_id(movie_title):
url = f"{BASE_URL}/search/movie"
params = {
"api_key": API_KEY,
"query": movie_title
}
r = requests.get(url, params=params)
data = r.json()
if "results" in data and len(data["results"]) > 0:
return data["results"][0]["id"]
return None
#--------------------------------- get movie reviews ----------------------------
def get_movie_reviews(movie_id, max_reviews=100):
url = f"{BASE_URL}/movie/{movie_id}/reviews"
params = {
"api_key": API_KEY,
"language": "en-US"
}
response = requests.get(url, params=params)
if response.status_code != 200:
print("TMDB Error:", response.status_code, response.text)
return []
data = response.json()
reviews = []
for review in data.get("results", [])[:max_reviews]:
reviews.append({
"author": review.get("author"),
"content": review.get("content"),
"rating": review.get("author_details", {}).get("rating"),
"created_at": review.get("created_at")
})
return reviews
#--------------------------------- get full movie details ----------------------------
def get_movie_details(movie_id):
url = f"{BASE_URL}/movie/{movie_id}"
params = {"api_key": API_KEY}
r = requests.get(url, params=params)
data = r.json()
details = {
"title": data.get("title"),
"overview": data.get("overview"),
"release_date": data.get("release_date"),
"runtime": data.get("runtime"),
"rating": data.get("vote_average"),
"vote_count": data.get("vote_count"),
"genres": [g["name"] for g in data.get("genres", [])],
"poster": IMAGE_BASE + data["poster_path"] if data.get("poster_path") else None,
"backdrop": IMAGE_BASE + data["backdrop_path"] if data.get("backdrop_path") else None
}
return details
#----------------------------------------- TTS ----------------------------------------------
async def TTS(text: str) -> str:
"""
Saves audio to a SYSTEM TEMP folder so VS Code doesn't refresh.
"""
if not text:
return ""
# 1. Create a temp file path (e.g., C:\Users\AppData\Local\Temp\tmp123.mp3)
# delete=False ensures the file stays so we can send it to frontend
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
temp_path = temp_file.name
temp_file.close() # Close handle so TTS engine can write to it
# 2. Generate Audio
# Assuming you are using edge-tts; if using gTTS, adjust accordingly
communicate = edge_tts.Communicate(text, "en-US-AriaNeural")
await communicate.save(temp_path)
return temp_path