본문 바로가기
HTML CSS JS

자바스크립트 비동기 통신 Ajax를 이용해 영화진흥위원회 api 데이터 접근 (JavaScript Asynchronous communication Ajax)

by wanttosleep1111 2023. 1. 21.

자바스크립트 비동기 통신 Ajax를 이용해 영화진흥위원회 api 데이터 접근

(JavaScript Asynchronous communication Ajax)

 

▶ 목표

  • 영화진흥위원회 오픈 api에서 주간/주말 박스오피스 데이터 접근
  • 자바스크립트 ajax를 이용해 사용자가 날짜를 입력하면 해당 날짜의 데이터에 맞는 영화랭킹, 영화명, 개봉일자가 나오는 테이블 출력하기

 

1.  영화진흥위원회 오픈 api에서 JSON 가져오기

 

2. ajax로 데이터 확인하기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
</head>
<body>
    
    <script>
        let url = 'http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchWeeklyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=20120101'
        
        $.ajax({
            url : url,
            type : 'get',
            success : (res)=>{
                console.log(res)
            },
            error : ()=>{
                console.log('통신 실패')
            }
        })
    </script>
</body>
</html>

 

3. 사용자로부터 날짜를 입력 받고, 날짜에 맞는 데이터를 가져와 영화랭킹, 영화명, 개봉일자가 담긴 테이블을 출력하기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
</head>
<body>
    <input id="date">
    <button id="btn">데이터 가져오기</button>
    
    <script>
        $('#btn').click(()=>{
            let date = $('#date').val()
            // 백틱 이용
            let url = `http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchWeeklyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=${date}`
            
            $.ajax({
                url : url,
                type : 'get',
                success : (res)=>{
                    console.log(res)
                    let list = res.boxOfficeResult.weeklyBoxOfficeList
                    
                    // 테이블 생성 후 1행 랭킹, 제목, 개봉일자 
                    let movieTable = document.createElement('table')
                    let tr1 = document.createElement('tr')
                    let ranking = document.createElement('td')
                    let name = document.createElement('td')
                    let date = document.createElement('td')
                    
                    ranking.innerText = '랭킹'
                    name.innerText = '제목'
                    date.innerText = '개봉일자'

                    tr1.appendChild(ranking)
                    tr1.appendChild(name)
                    tr1.appendChild(date)
                    movieTable.appendChild(tr1)

                    document.getElementsByTagName('body')[0].appendChild(movieTable)

                    // for문을 이용하여 랭킹,제목,개봉일자를 가져와 appendChild로 붙이기
                    for (let i = 0; i<list.length; i++ ){
                       let tr2 = document.createElement('tr')
                       let rank = document.createElement('td')
                       let movieNm = document.createElement('td')
                       let openDt = document.createElement('td')

                       rank.innerText = list[i].rank
                       movieNm.innerText = list[i].movieNm
                       openDt.innerText = list[i].openDt

                       tr2.appendChild(rank)
                       tr2.appendChild(movieNm)
                       tr2.appendChild(openDt)

                       movieTable.appendChild(tr2)

                    }
                },
                error : ()=>{
                    console.log('통신 실패')
                }
            })

        })
    </script>
</body>
</html>

 

댓글