가로형 이미지 목록을 가져온 후
https://api.themoviedb.org/3/movie/1071215/images?api_key=0a08e3348b874d0aa2d426ffc04357069d&language=en-US&include_image_language=en
    const {data: widthImageList}= await axiosWidthImageInnstance.get(`${movieId}/images`,{});
    setBackgroundPositionPoster( widthImageList?.backdrops[0]?.file_path);
목록중 하나를 선택해서 backdrops 데이터를 가져오면된다. 다음은 0번째 배열값 데이터를 가져오는 코드이다.
    //가로형 이미지 목록 가져오기
    //https://api.themoviedb.org/3/movie/1071215/images/?api_key=08d90cc4e7968b1f8323e51588a0d42cf06&language=en-US&include_image_language=en
    //https://api.themoviedb.org/3/movie/1071215/images?api_key=0a08e38b874d0aa2d42326ffc04357069d&language=en-US&include_image_language=en
    const {data: widthImageList}= await axiosWidthImageInnstance.get(`${movieId}/images`,{});
    setBackgroundPositionPoster( widthImageList?.backdrops[0]?.file_path);
    // console.log("widthImageList ==> ", widthImageList.backdrops);
    // console.log("한개 가져오기 widthImageList ==> ",movieId , widthImageList.backdrops[0].file_path);
github => react-disney-plus-app 프로젝트
다음 전체 코드
Banner.js
import React, { useEffect, useS
tate } from 'react'
import {axiosInnstance, axiosWidthImageInnstance} from '../api/axios';
import requests from '../api/requests';
import './Banner.css';
import styled from 'styled-components';
// const fetch = require('node-fetch');
// const url = 'https://api.themoviedb.org/3/movie/movie_id?language=en-US';
// const options = {method: 'GET', headers: {accept: 'application/json'}};
// fetch(url, options)
//   .then(res => res.json())
//   .then(json => console.log(json))
//   .catch(err => console.error('error:' + err));
const Container =styled.div`
    display: flex;
    justify-content: center;  
    align-items: center;
    flex-direction: column;
    width: 100%;
    height: 100vh;
`;
const HomeContainer =styled.div`
    width: 100%;
    height: 100%;
`;
const Iframe =styled.iframe`
  width: 100%;
  height: 100%;
  z-index: -1;
  opacity: 0.65;
  border:none;
  &::after{
    content:"";  
    position: absolute;
    top: 0;
    left:0;
    width: 100%;
    height: 100%;
  
  }
`
const Banner = () => {
   const [movie, setMovie] = useState([]);
   const [isClicked, setIsClicked] = useState(false);
   const  [backgroundPositionPoster, setBackgroundPositionPoster] =useState("");
  useEffect(() => {
    fetchData();
  }, []);
  const fetchData = async () => {
    //현재 상영중인 영화 정보를 가져오기(여러 영화)
    //const response=await axiosInnstance.get(requests.fetchPopularMovies);  //fetchNowPlaying
    const response=await axiosInnstance.get(requests.fetchNowPlaying);
     // console.log("response ==> " , response.data.results);
    //여러 영화 중 영화 하나의 ID를 가져오기
    const movieId=response.data.results[
      Math.floor(Math.random() * response.data.results.length)
    ].id;
    //console.log("movieId ==> " ,movieId);
    //특정 영화의 더 상세한 정보를 가져오기
    //https://api.themoviedb.org/3/movies/848326
    const {data:movieDetail}=await axiosInnstance.get(`/movie/${movieId}`,{
      params:{append_to_response:"videos"} 
    });
  
    console.log("widthImageList", movieId);
    //가로형 이미지 목록 가져오기
    //https://api.themoviedb.org/3/movie/1071215/images/?api_key=08d90cc4e7964348b1f8e51588a0d42cf06&language=en-US&include_image_language=en
    //https://api.themoviedb.org/3/movie/1071215/images?api_key=0a08e3348b874d0aa2d426ffc04357069d&language=en-US&include_image_language=en
    const {data: widthImageList}= await axiosWidthImageInnstance.get(`${movieId}/images`,{});
    setBackgroundPositionPoster( widthImageList?.backdrops[0]?.file_path);
    // console.log("widthImageList ==> ", widthImageList.backdrops);
    // console.log("한개 가져오기 widthImageList ==> ",movieId , widthImageList.backdrops[0].file_path);
    setMovie(movieDetail);   
  }
  //https://image.tmdb.org/t/p/original/iNgn9LP0iMuLSnWqolivcY3Y7F6.jpg
    //https://image.tmdb.org/t/p/w1280/qzgEPduJyQ6RkgMdn4nbjdKUYJM.jpg
  //https://api.themoviedb.org/3/movie//buvBq2zLP7CcJth8tjrI4znvfEO/images
 //`url(https://image.tmdb.org/t/p/original${movie.poster_path})` 
  const truncate=(str, n) => {  
    return str?.length > n? str.substr(0, n) + '...' : str;  
  };
  if(isClicked){
    return (
      <>
      <Container >
        <HomeContainer>
        
          <Iframe
            src={`https://youtube.com/embed/${movie?.videos?.results[0]?.key}?controls=0&loop=1&mute=1&playlist=${movie?.videos?.results[0]?.key}`}
            width="640"
            height="360"
            allow='autoplay; fullscreen'
          >
          </Iframe>
        </HomeContainer>
      </Container>      
      <button onClick={()=>setIsClicked(false)} className='btn-close'>X</button>
      </>
    ) 
  }else{
    console.log("movie ==> ", movie);
  return (
    
          <header className='banner'
            style={{
              // backgroundImage: `url(https://image.tmdb.org/t/p/original${movie.poster_path})` ,
              backgroundImage: `url(https://image.tmdb.org/t/p/original${backgroundPositionPoster})`,
              backgroundPosition:"top center",
              backgroundSize:"100% 100%",
              backgroundRepeat:"no-repeat",
            }}
          >
          <div className='banner__contents'> 
            <h1 className='banner__title'>
                  {movie.title || movie.name || movie.original_name}       
            </h1>
            <div className='banner__buttons'>
              {movie?.videos?.results[0]?.key&&
                  <button className='banner__button play'
                    onClick={()=>setIsClicked(true)}
                  >Play</button>
              }      
            </div>
            
            <p className='banner__description'>
                {truncate(movie?.overview, 100)}
            </p>
          </div>
          
          <div className='bannner--fadeBottom'  />
          </header>
        )
    }
}
export default Banner
requests.js
const requests = {
    fetchNowPlaying: "/movie/now_playing",
    fetchTrending: "/trending/all/week",
    fetchTopRated: "/movies/top_rated",
    fetchActionMovies: "/discover/movie?with_genres=28",
    fetchComedyMovies: "/discover/movie?with_genres=35",
    fetchHorrorMovies: "/discover/movie?with_genres=27",
    fetchRomanceMovies: "/discover/movie?with_genres=10749",
    fetchDocumentaryMovies: "/discover/movie?with_genres=99",
    fetchThrillerMovies: "/discover/movie?with_genres=12",
    fetchPopularMovies: "/movie/popular",
}
export default requests ;
axios.js
import axios from 'axios'
export const axiosInnstance = axios.create({
    baseURL: 'https://api.themoviedb.org/3',
    params: {
        api_key: '08d90cc4e7968b1f8e515883213a0d42cf06',
        language: 'ko-KR'
    }
});
//가로 이미지 목록 가졀오기
//https://api.themoviedb.org/3/movie/1071215/images?api_key=0a08e22338b874d0aa2d426ffc04357069d&language=en-US&include_image_language=en
export const axiosWidthImageInnstance = axios.create({
    baseURL: 'https://api.themoviedb.org/3/movie/',
    params: {
        api_key: '08d90cc4e7968b1f8e5158823123a0d42cf06',
        language: 'en-US',
        include_image_language:'en'
    }
});














댓글 ( 0)  
댓글 남기기