-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmovie.js
125 lines (99 loc) · 4.38 KB
/
movie.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
const urlParams = new URLSearchParams(window.location.search);
const movieId = urlParams.get('id');
document.getElementById('back-button').addEventListener('click', () => {
window.history.back();
});
async function fetchMovieDetails(movieId) {
const apiKey = '7d94d40ee173cf65d6901779566190dc';
const apiUrl = 'https://api.themoviedb.org/3/';
const response = await fetch(`${apiUrl}movie/${movieId}?api_key=${apiKey}&language=en-US&append_to_response=videos,credits,images`);
return response.json();
}
async function fetchActorWikiPage(actorName) {
const apiUrl = 'https://en.wikipedia.org/w/api.php?';
const params = new URLSearchParams({
action: 'query',
list: 'search',
srsearch: actorName,
format: 'json',
origin: '*'
});
const response = await fetch(`${apiUrl}${params}`);
if (response.ok) {
const data = await response.json();
if (data.query.search.length > 0) {
const pageName = data.query.search[0].title;
const actorWikiUrl = `https://en.wikipedia.org/wiki/${encodeURIComponent(pageName)}`;
return actorWikiUrl;
}
}
return null;
}
async function displayRecommendedMovies(genreId) {
const recommendedMovies = await fetchRecommendations(genreId);
const recommendedMoviesElement = document.getElementById('recommended-movies');
recommendedMoviesElement.innerHTML = '<h2>Recommended Movies</h2>';
recommendedMovies.results.forEach(movie => {
const movieElement = document.createElement('div');
movieElement.className = 'movie-box';
const movieLink = document.createElement('a');
movieLink.href = `movie.html?id=${movie.id}`;
const movieImage = document.createElement('img');
movieImage.src = `https://image.tmdb.org/t/p/w200${movie.poster_path}`;
movieImage.alt = movie.title;
movieImage.className = 'movie-image';
movieLink.appendChild(movieImage);
movieElement.appendChild(movieLink);
recommendedMoviesElement.appendChild(movieElement);
});
}
async function displayMovieDetails() {
const movieDetails = await fetchMovieDetails(movieId);
const genreId = movieDetails.genres[0].id;
displayRecommendedMovies(genreId);
document.getElementById('movie-poster').src = `https://image.tmdb.org/t/p/w500${movieDetails.poster_path}`;
const imageWheel = document.getElementById('image-wheel');
movieDetails.images.backdrops.forEach(image => {
const imageElement = document.createElement('img');
imageElement.src = `https://image.tmdb.org/t/p/w200${image.file_path}`;
imageWheel.appendChild(imageElement);
});
const trailer = movieDetails.videos.results.find(video => video.type === 'Trailer');
if (trailer) {
const trailerElement = document.createElement('iframe');
trailerElement.src = `https://www.youtube.com/embed/${trailer.key}`;
trailerElement.allowFullscreen = true;
document.getElementById('movie-trailer').appendChild(trailerElement);
}
const recommendedMoviesElement = document.createElement('div');
recommendedMoviesElement.id = 'recommended-movies';
movieDetails.images.backdrops.forEach(image => {
const imageElement = document.createElement('img');
imageElement.src = `https://image.tmdb.org/t/p/w200${image.file_path}`;
recommendedMoviesElement.appendChild(imageElement);
});
document.querySelector('.movie-poster').appendChild(recommendedMoviesElement);
const creditsElement = document.getElementById('movie-credits');
const castElements = await Promise.all(movieDetails.credits.cast.map(async (cast) => {
const castElement = document.createElement('div');
castElement.className = 'cast-box';
const castLink = document.createElement('a');
const actorWikiLink = await fetchActorWikiPage(cast.name);
if (actorWikiLink) {
castLink.href = actorWikiLink;
}
const castImage = document.createElement('img');
castImage.src = `https://image.tmdb.org/t/p/w200${cast.profile_path}`;
castImage.alt = cast.name;
castImage.className = 'cast-image';
const castName = document.createElement('span');
castName.textContent = cast.name;
castName.className = 'cast-name';
castLink.appendChild(castImage);
castLink.appendChild(castName);
castElement.appendChild(castLink);
return castElement;
}));
castElements.forEach(castElement => creditsElement.appendChild(castElement));
}
displayMovieDetails();