ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OPEN API 데이터 불러오기 ( fetch )
    React 2023. 3. 19. 20:23

    fetch()

     : url을 입력하면 해당 데이터를 받아오는 함수로서, 인간인지 로봇인지 검사하지 않는 페이지라면

    해당 함수로 정보를 받아올 수 있다 ( 검사하는 페이지라면 Selenium 등의 프로그램을 거쳐야한다 )

    fetch("URL")

     - 기본적으로 해당 함수를 실행하면 여러가지 데이터들이 넘어온다 ( 기본적으로 페이지와 인터넷 연결이 잘 됬는지 확인하는 코드 )

    그래서 해당 페이지의 데이터를 취급하고 싶다면, response에서 json or xml을 추출해야한다

     

     - 예제로 영화진흥위원회의 일별 박스오피스 정보를 가지고 와보자

    useEffect(() => {
    -> 페이지가 로딩 되자마자 api 데이터를 가지고 오려면 useEffect()를 이용할 수 있다
    
        fetch(
          `http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json
          ?key=31b7b983147a4ed21fe538ba07011d1e&targetDt=20230318`
    -> URL의 끝부분인 .json 이후에 ? 를 시작으로 key코드를 입력해서 접근 허가를 받고
    &targetDT= 를 입력하는 것으로 API 에서 제공하는 데이터 중 필요한 것들을 선별해서 가져올 수 있다
    이 부분은 각 API에서 제공하는 방식에 맞춰서 이용할 수 있다.
    
          ).then((response) => response.json())
    -> 이후에 .then() 함수로 response의 내용을 json으로 가져오고
    
          .then((json) => {
            setMovies(json.boxOfficeResult.dailyBoxOfficeList);
    -> setMovies에 json내부의 내용 중 필요한 것을 넣어서 movie 배열에 저장되게한다.
    
            setLoading(false);
    -> setLoading을 꼭 false로 만들어야한다 그래야 이후에 페이지에 변화가 있어도 로딩을 다시 하지 않는다.
          });
      },[])
      -> 마지막에 [] 을 넣음으로서 페이지가 로딩되고 한번만 데이터를 가져오도록 useEffect를 제어한다

     


    위의 코드에서 .then을 사용하지 않는 방법이 있다.

    astnc() 함수와 await를 이용하는 기능이다. 해당 함수에 대해서는 차후 자세하게 알아보자

       const getMovies = async() => {
       -> getMovies 변수를 async()로 반환한다.
       
         const response = await fetch(
           `http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=31b7b983147a4ed21fe538ba07011d1e&targetDt=20230318`
         );
     -> await 를 이용해서 response에 fetch를 저장한다.
     
         const json = await response.json();
     -> await를 이용해서 response를 json으로 가져온다
     
         setMovies(json.boxOfficeResult.dailyBoxOfficeList);
         setLoading(false);
       };
       
       더욱 짧게 쓰려면 response를 스킵할 수도 있다.
       
       const getMovies = async() => {
        const json = await (
          await fetch(
          `http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=31b7b983147a4ed21fe538ba07011d1e&targetDt=20230318`
        )).json();
        console.log(json)
        setMovies(json.boxOfficeResult.dailyBoxOfficeList);
        setLoading(false);
      };
      
      위의 두 가지 방법을 사용한다면,
      useEffect 내부에 getMovies()를 한번 실행하는 것으로 충분하다

     

    'React' 카테고리의 다른 글

    useEffect  (0) 2023.03.19
    React Router (ver. 6 이상)  (0) 2023.03.19
    nomad) react .map( )  (0) 2023.03.17
    nomad) react useState( [] ) 활용  (0) 2023.03.17
    nomard) Clean Up 함수  (0) 2023.03.16
Designed by Tistory.