
const url = `/3/movie/${movieId}?append_to_response=credits,release_dates`;
if (movieDetails.certification !== undefined) {
certificationData = await getMovieCertifications(movieId);
// 관람 등급 정보를 movieDetails 객체에 할당
movieDetails.certification = certificationData.certification;
}
return movieDetails;
const url = `/3/movie/${movieId}/release_dates?language=${currentLanguage}`;
const movieCertifications = await ApiFetch(url);
// API 응답을 받은 results 배열을 다시 변수에 할당함. (재사용)
const certificationResults = movieCertifications.results;
// 영상물 등급 정보 fetch로 응답받은 배열의 길이가 0보다 길면 (데이터가 있으면) 아래 조건문을 실행함.
if (certificationResults && certificationResults.length > 0) {
// 배열에서 'US'가 iso_3166_1 코드로 갖는 데이터를 찾아 변수에 할당함.
const usReleaseData = certificationResults.find(result => result.iso_3166_1 === 'US');
// usReleaseData가 존재하고, release_dates 배열에 데이터가 0보다 길면 (데이터가 있으면) 아래 조건문을 실행함.
if (usReleaseData && usReleaseData.release_dates.length > 0) {
// 첫 번째 release_dates의 certification(영상물 등급 정보) 값을 변수에 재할당함.
certification = usReleaseData.release_dates[0].certification;
}
}
이 부분은 한/영 변환하는 분으로 기능 구현으로 인해(어쩔수 없는 부분) 코드가 좀 많이 바뀌어서 그냥 전체적으로 짧게 코드를 설명하도록 하겠다.
let certificationHTML = '';
// movieCertifications 변수는 영상물 등급 정보 API Fetch의 결과임. 이 객체에서 certification이라는 영상물 등급 정보가 존재하면서, 그 값이 'no information'이 아니면 아래의 조건문을 실행함.
if (movieCertifications && movieCertifications.certification && movieCertifications.certification !== 'No Information') {
// 로컬스토리지에 저장한 현재 언어 정보를 변수에 할당 (재사용 목적)
let currentLanguage = localStorage.getItem('currentLanguage');
// 현재 언어 정보가 영어일 때 TMDB에서 가져온 미국 기준 영상물 등급 정보를 detail 페이지에 출력함.
if (currentLanguage === 'en-US') {
certificationHTML = `
<hr class="certification_hr">
<h5 class="detail_certifications">${movieCertifications.certification}</h5>
`;
// 그러나 현재 언어 정보가 한국어일 때는 직접 한국어로 치환시켜 저장한 객체 certificationKR 에서 일치하는 프로퍼티를 찾아 값을 반환함.
} else if (currentLanguage === 'ko-KR') {
const certificationKey = movieCertifications.certification;
// 치환된 영상물 등급 정보를 다시 변수에 담아서 아래 템플릿 리터럴에서 출력시킴.
const certificationValue = certificationKR[certificationKey];
if (certificationValue) {
certificationHTML = `
<hr class="certification_hr">
<h5 class="detail_certifications">${certificationValue}</h5>
`;
}
}
}
Promise.all([
fetchMovieDetails(movieId),
getMovieCertifications(movieId) // 관람 등급 정보도 가져오기
])