numerical-analysis / movie.html
r3hab's picture
Update movie.html
3bd7111 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Movie Details - SlimShadow Movies</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
background-color: #1a1a1a;
color: white;
min-height: 100vh;
}
.header {
background-color: #2a2a2a;
padding: 20px 0;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
}
.header h1 {
text-align: center;
color: #007bff;
font-size: 2rem;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.movie-details {
display: grid;
grid-template-columns: 300px 1fr;
gap: 30px;
margin-top: 30px;
}
.poster img {
width: 100%;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
}
.info h2 {
font-size: 2.5rem;
margin-bottom: 10px;
color: #fff;
}
.meta {
display: flex;
gap: 20px;
margin-bottom: 20px;
color: #ccc;
}
.rating {
color: #ffd700;
font-weight: bold;
}
.overview {
font-size: 1.1rem;
line-height: 1.6;
margin-bottom: 30px;
}
.section {
margin-bottom: 30px;
}
.section h3 {
font-size: 1.5rem;
margin-bottom: 15px;
color: #007bff;
}
.cast-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 20px;
}
.cast-card {
background-color: #2a2a2a;
border-radius: 8px;
overflow: hidden;
}
.cast-card img {
width: 100%;
height: 225px;
object-fit: cover;
}
.cast-info {
padding: 10px;
}
.cast-info h4 {
margin-bottom: 5px;
}
.cast-info p {
color: #ccc;
font-size: 0.9rem;
}
.watch-button {
display: inline-block;
background-color: #007bff;
color: white;
padding: 12px 24px;
border-radius: 5px;
text-decoration: none;
font-weight: bold;
margin-top: 20px;
transition: background-color 0.3s;
cursor: pointer;
}
.watch-button:hover {
background-color: #0056b3;
}
.photos-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 20px;
margin-top: 20px;
}
.photo-item img {
width: 100%;
border-radius: 8px;
cursor: pointer;
transition: transform 0.3s;
}
.photo-item img:hover {
transform: scale(1.05);
}
.video-container {
margin-top: 50px;
padding: 20px;
background-color: #000;
border-radius: 10px;
}
.video-wrapper {
position: relative;
padding-bottom: 56.25%; /* 16:9 aspect ratio */
height: 0;
overflow: hidden;
max-width: 100%;
border-radius: 8px;
}
.video-wrapper iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: none;
}
@media (max-width: 768px) {
.movie-details {
grid-template-columns: 1fr;
}
.poster {
max-width: 300px;
margin: 0 auto;
}
.cast-grid {
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
}
.info h2 {
font-size: 2rem;
}
.meta {
flex-wrap: wrap;
}
}
</style>
</head>
<body>
<header class="header">
<h1>SlimShadow Movies</h1>
</header>
<div class="container">
<div id="movieContent"></div>
<div class="video-container" id="moviePlayer">
<div class="video-wrapper">
<iframe id="movieFrame" allowfullscreen></iframe>
</div>
</div>
</div>
<script>
const TMDB_API_KEY = 'c8402e1c7b8bb9bcbf95b3fa3bad4d84';
const CORS_PROXY = 'https://api.allorigins.win/raw?url=';
async function getMovieDetails(movieId) {
try {
const [movieData, credits, images] = await Promise.all([
fetch(`${CORS_PROXY}${encodeURIComponent(
`https://api.themoviedb.org/3/movie/${movieId}?api_key=${TMDB_API_KEY}`
)}`).then(res => res.json()),
fetch(`${CORS_PROXY}${encodeURIComponent(
`https://api.themoviedb.org/3/movie/${movieId}/credits?api_key=${TMDB_API_KEY}`
)}`).then(res => res.json()),
fetch(`${CORS_PROXY}${encodeURIComponent(
`https://api.themoviedb.org/3/movie/${movieId}/images?api_key=${TMDB_API_KEY}`
)}`).then(res => res.json())
]);
displayMovieDetails(movieData, credits, images);
} catch (error) {
console.error('Error fetching movie details:', error);
}
}
function displayMovieDetails(movie, credits, images) {
const content = document.getElementById('movieContent');
const movieFrame = document.getElementById('movieFrame');
// Set up the video player
movieFrame.src = `https://vidsrc.in/embed/movie/${movie.id}`;
const revenue = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
}).format(movie.revenue);
const budget = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
}).format(movie.budget);
content.innerHTML = `
<div class="movie-details">
<div class="poster">
<img src="https://image.tmdb.org/t/p/w500${movie.poster_path}"
alt="${movie.title}"
onerror="this.src='https://via.placeholder.com/500x750?text=No+Poster'">
<a href="#moviePlayer" class="watch-button">Watch Movie</a>
</div>
<div class="info">
<h2>${movie.title}</h2>
<div class="meta">
<span>${movie.release_date.split('-')[0]}</span>
<span>${movie.runtime} min</span>
<span class="rating">★ ${movie.vote_average.toFixed(1)}</span>
</div>
<p class="overview">${movie.overview}</p>
<div class="section">
<h3>Movie Info</h3>
<p><strong>Status:</strong> ${movie.status}</p>
<p><strong>Budget:</strong> ${budget}</p>
<p><strong>Revenue:</strong> ${revenue}</p>
<p><strong>Genres:</strong> ${movie.genres.map(g => g.name).join(', ')}</p>
</div>
<div class="section">
<h3>Cast</h3>
<div class="cast-grid">
${credits.cast.slice(0, 6).map(actor => `
<div class="cast-card">
<img src="https://image.tmdb.org/t/p/w185${actor.profile_path}"
alt="${actor.name}"
onerror="this.src='https://via.placeholder.com/185x278?text=No+Image'">
<div class="cast-info">
<h4>${actor.name}</h4>
<p>${actor.character}</p>
</div>
</div>
`).join('')}
</div>
</div>
<div class="section">
<h3>Photos</h3>
<div class="photos-grid">
${images.backdrops.slice(0, 6).map(image => `
<div class="photo-item">
<img src="https://image.tmdb.org/t/p/w500${image.file_path}"
alt="Movie still"
loading="lazy">
</div>
`).join('')}
</div>
</div>
</div>
</div>
`;
}
// Get movie ID from URL parameters
const urlParams = new URLSearchParams(window.location.search);
const movieId = urlParams.get('id');
if (movieId) {
getMovieDetails(movieId);
}
</script>
</body>
</html>