본문 바로가기

JSP

JSON (4) - 영화 상세정보 처리[영화진흥위원회 오픈API]

▷ 영화진흥위원회 오픈API를 사용하여 영화 상세정보 데이터를 가져와서 파싱하기

 

clone_test8_json.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="../js/jquery-3.6.0.js"></script>
<script type="text/javascript">
	$(function() {
			$.ajax({
				type: "get",
				url: "https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=e7340032dd56a5699df512d551a3f5c8&targetDt=20220311",
				dataType: "json"
			})
			.done(function(data) {
				$('#resultArea').html('<table border="1">' // 출력 테이블
						+ '<th width="100">현재순위(rank)</th><th width="400">영화명(movieNm)</th><th width="150">개봉일(openDt)</th><th width="100">누적관객수(audiAcc)</th>' 
						+ '</table>');
				
				// 영화 일별 박스오피스 정보 전체를 "파싱"하여 각 데이터를 추출하기
				// 1. 전체 조회 결과에 해당하는 "boxOfficeResult" 추출
				// => 최상위 객체의 키이므로 data 객체(변수)를 통해 바로 접근
				var boxOfficeResult = data.boxOfficeResult; // "boxOfficeResult" 속성에 해당하는 값 추출됨
				
				// 2. "boxOfficeResult" 내의 "boxofficeType", "showRange" 추출
				var boxofficeType = boxOfficeResult.boxofficeType;
				var showRange = boxOfficeResult.showRange;
				
				// 3. "boxOfficeResult" 내의 박스오피스 영화 목록("dailyBoxOfficeList") 객체 추출
				var dailyBoxOfficeList = boxOfficeResult.dailyBoxOfficeList;

				// 4. "dailyBoxOfficeList" 내의 각 영화 정보 객체 추출 => 배열 내에 각 객체가 저장되어 있음
				// => dailyBoxOffice 객체에는 1개 영화 정보가 저장되어 있음(각 영화 속성에 접근 가능함)
				// for...of 문을 사용하여 배열 반복 시
				for(var dailyBoxOffice of dailyBoxOfficeList) {
					// 각 정보를 변수에 저장
					var rank = dailyBoxOffice.rank;
					var movieNm = dailyBoxOffice.movieNm;
					var openDt = dailyBoxOffice.openDt;
					var audiAcc = dailyBoxOffice.audiAcc;
					
					// 영화 상세정보 조회에 필요한 영화코드(movieCd) 추출
					var movieCd = dailyBoxOffice.movieCd;
					
					// 영화 제목을 클릭하면 영화코드값을 사용하여 test8_json_movie_detail.jsp 페이지로 이동(영화 상세정보 조회 후 출력)
					$('#resultArea > table').append(
							'<tr>' 
							+ '<td>' + rank + '</td>'
							+ '<td>' + '<a href="./clone_test8_json_movie_detail.jsp?movieCd=' + movieCd + '">' + movieNm + '</a>' + '</td>'
							+ '<td>' + openDt + '</td>'
							+ '<td>' + audiAcc + '명</td>'
							+ '</tr>'
					);
				}
				
			})
			.fail(function() {
				$('#resultArea').html('<h3>JSON 요청 실패!</h3>');
			});	
	});
</script>
</head>
<body>
	<h1>clone_test8_json.jsp</h1>
	<div id="resultArea"></div>
</body>
</html>

앞의 JSON (3)과 같이 2022년 3월 11일 기준 일별 박스오피스 데이터 추출

 

clone_test8_json_movie_detail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="../js/jquery-3.6.0.js"></script>
<script type="text/javascript">
	$(function() {
		// URL 로 전달받은 영화코드 movieCd 파라미터 가져오기
		var movieCd = ${param.movieCd};
        
		// 영화 상세정보 링크 생성 => 파라미터 : movieCd 
		var movieDetailUrl = 'http://www.kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieInfo.json?key=e7340032dd56a5699df512d551a3f5c&movieCd=' + movieCd;
		
		$.ajax({
			type: "get",
			url: movieDetailUrl,
			dataType: "json"
		})
		.done(function(data) {
			// 영화제목(국문<movieNm>과 영문<movieNmEn>), 출연진<actor - peopleNm> 출력
			var movieInfo = data.movieInfoResult.movieInfo;
			
			$('#resultArea').append('영화명 : ' + movieInfo.movieNm + '(' + movieInfo.movieNmEn + ')<br>');
			$('#resultArea').append('감독 : ' + movieInfo.directors[0].peopleNm + '(' + movieInfo.directors[0].peopleNmEn + ')<br>');
			$('#resultArea').append('출연진 : ');
// 			$('#resultArea').append(movieInfo.actors[0].peopleNm + '(' + movieInfo.actors[0].peopleNmEn + ') ');
// 			alert(actors);
			for(var actor of movieInfo.actors) { // 여러명의 배우일 경우 모든 정보에 접근하기 위해 반복문 활용
// 				$('#resultArea').append(actor.peopleNm + '(' + actor.peopleNmEn + ') ');
				
				// 만약, 배우 이름 클릭 시 배우에 대한 상세 정보를 조회하는 경우
				var movieActorDetailUrl = 'http://kobis.or.kr/kobisopenapi/webservice/rest/people/searchPeopleList.json?key=f5eef3421c602c6cb7ea224104795888&peopleNm=' + actor.peopleNm;
				$('#resultArea').append('<a href="' + movieActorDetailUrl + '">' + actor.peopleNm + '(' + actor.peopleNmEn + ')</a> ');
			}
		})
		.fail(function() {
			$('#resultArea').html('<h3>JSON 요청 실패!</h3>');
		});	
	});
</script>
</head>
<body>
	<h1>clone_test8_json_movie_detail.jsp - 영화 상세정보</h1>
	<div id="resultArea"></div>
</body>
</html>

영화마다 하이퍼링크를 사용하여 영화의 상세정보를 조회할 수 있음

 

출력 결과

일별 박스오피스(22년 3월 11일 기준)
영화 '이상한 나라의 수학자' 상세정보