React
OPEN API 데이터 불러오기 ( fetch )
hojomu
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()를 한번 실행하는 것으로 충분하다