본문 바로가기

JSP

빅데이터//크롤링// 영화가 좋아요(영화 실관람평 지수)

 

 

 

 

 

 

index.jsp

<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@page import="dto.MovieVo"%>
<%@page import="java.util.List"%>
<%@page import="movie.MovieManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	List<MovieVo> list = MovieManager.getCGVdata();    
	for(int i = 0; i < list.size(); i++){
		out.println(list.get(i).toString());
		%><br><%
	}
	
//list -> json 변환
//1. Json obj 사용
//2. 수동으로바꿈
String jsonlike="[";
for(MovieVo m : list){
	jsonlike += "{ name:'" + m.getTitle() + "', y:" + m.getLike() + "}, ";
}

//맨 끝것만 마지막 ,제거
jsonlike = jsonlike.substring(0, jsonlike.lastIndexOf(","));//, 전까지 가져와라

jsonlike += "]";

System.out.println(jsonlike);

//jsom 데이터를 위치에 대입하기
request.setAttribute("jsonlike", jsonlike);

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>
<script src="https://code.highcharts.com/modules/accessibility.js"></script>
<style type="text/css" rel="stylesheet">
.highcharts-figure, .highcharts-data-table table {
  min-width: 320px; 
  max-width: 800px;
  margin: 1em auto;
}
.highcharts-data-table table {
	font-family: Verdana, sans-serif;
	border-collapse: collapse;
	border: 1px solid #EBEBEB;
	margin: 10px auto;
	text-align: center;
	width: 100%;
	max-width: 500px;
}
.highcharts-data-table caption {
  padding: 1em 0;
  font-size: 1.2em;
  color: #555;
}
.highcharts-data-table th {
	font-weight: 600;
  padding: 0.5em;
}
.highcharts-data-table td, .highcharts-data-table th, .highcharts-data-table caption {
  padding: 0.5em;
}
.highcharts-data-table thead tr, .highcharts-data-table tr:nth-child(even) {
  background: #f8f8f8;
}
.highcharts-data-table tr:hover {
  background: #f1f7ff;
}
input[type="number"] {
	min-width: 50px;
}
</style>
</head>
<body>
<!-- <figure class="highcharts-figure"> -->
  <div id="container"></div>
<!-- </figure> -->

<script type="text/javascript">
Highcharts.chart('container', {
	  chart: {
	    plotBackgroundColor: null,
	    plotBorderWidth: null,
	    plotShadow: false,
	    type: 'pie'
	  },
	  title: {
	    text: '영화가 좋아요(영화 실관람평 지수)'
	  },
	  tooltip: {
	    pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
	  },
	  accessibility: {
	    point: {
	      valueSuffix: '%'
	    }
	  },
	  plotOptions: {
	    pie: {
	      allowPointSelect: true,
	      cursor: 'pointer',
	      dataLabels: {
	        enabled: true,
	        format: '<b>{point.name}</b>: {point.percentage:.1f} %'
	      }
	    }
	  },
	  /* 데이터 */
	  series: [{
	    name: 'Brands',
	    colorByPoint: true,
	    /* Json형태의 key:value */
	    data: <%=request.getAttribute("jsonlike") %>
	    
	  }]
	});
</script>
</body>
</html>

 

 

 

 

main.java

public class main {
	public static void main(String[] args) {
		MovieManager.getCGVdata();
	}
}

 

 

 

 

MovieManager.java

public class MovieManager {

	public static List<MovieVo> getCGVdata() {
		Document doc;
		List<MovieVo> list = new ArrayList<MovieVo>();
		
		try {
			doc = Jsoup.connect("http://www.cgv.co.kr/movies/").get();
			
			//영화제목
			//dic태그 안 class명이 box-xontents인것 안에 strong태그 안의 class명이 title인것
			Elements titles = doc.select("div.box-contents strong.title");
			/* <div class="box-contents">
                   <a href="/movies/detail-view/?midx=83160">
                        <strong class="title">반도</strong>
                   </a> */
			
			//좋아요 %
			Elements likes = doc.select("div.box-contents span.percent");
			
			/*
                <div class="score">
                    <strong class="percent">예매율<span>23.0%</span></strong>
                    <!-- 2020.05.07 개봉전 프리에그 노출, 개봉후 골든에그지수 노출변경 (적용 범위1~ 3위)-->
                    <div class='egg-gage small'>
                      						<span class='egg good'></span>
                                            <span class='percent'>79%</span>
                                        </div>*/
		
			
			for (int i = 0; i < 7; i++) {
				//영화제목
				Element eTitle = titles.get(i);
				String title = eTitle.text();
				System.out.print(title+" ");
				
				//좋아요
				Element eLike = likes.get(i);
				String like = eLike.text().replace("%", "");//%부터 빈문자열로 바꿔라
				System.out.println(like);
				
				MovieVo vo = new MovieVo(title, Integer.parseInt(like));
				list.add(vo);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}
}

 

 

 

 

MovieVo.java

public class MovieVo implements Serializable {
	private String title;
	private int like;
	
	public MovieVo() {
		// TODO Auto-generated constructor stub
	}
	public MovieVo(String title, int like) {
		super();
		this.title = title;
		this.like = like;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public int getLike() {
		return like;
	}
	public void setLike(int like) {
		this.like = like;
	}
	@Override
	public String toString() {
		return "MovieVo [title=" + title + ", like=" + like + "]";
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'JSP' 카테고리의 다른 글

차트에서 소스구하기  (0) 2020.07.27
JSP tag 객체/ include/ forward  (0) 2020.07.27
Core tag 기본 /// if/ for/ foreach  (0) 2020.07.27
CoreTag jar파일 다운  (0) 2020.07.27
el tag , core tag ///// 객체/ 배열/ 리스트/ map 접근  (0) 2020.07.27