임승현

Enable to Select the Movie filtered by the theater and the date

......@@ -96,10 +96,12 @@ public class CGVExample {
Scanner scanner = new Scanner(System.in);
String url_movies = "https://www.cgv.co.kr/movies/?lt=1&ft=1"; //끝의 쿼리 0은 개봉 전 영화도 포함하는 것. 예매율 순위 가져오기
String url_theaters = "https://www.cgv.co.kr/theaters"; //영화관 정보 가져오는 링크.
String url_ticketing = "https://www.cgv.co.kr/ticket/"; //상영중인 영화 정보 가져오는 링크.
ArrayList<LinkedHashMap<String, String>> theaters = new ArrayList<>(); //지역별 영화관 HashMap(Key: 영화관, value:영화관별 고유코드)으로 이루어진 Arraylist
ArrayList<CGVMovieInfo> Movies = new ArrayList<>(); //CGVMovieInfo 클래스의 인스턴스들을 원소로 가지는 Arraylist
// 여기부터 영화관 및 영화관별 고유코드 가져오는 부분.
try{ //드라이버 설정
System.setProperty(WEB_DRIVER_ID,WEB_DRIVER_PATH);
}catch (Exception e){
......@@ -109,15 +111,15 @@ public class CGVExample {
ChromeOptions options = new ChromeOptions(); //크롬 설정을 담은 객체 생성
options.addArguments("headless"); //브라우저가 눈에 보이지 않고 컴파일러 내부에서 작동됨.
WebDriver driver = new ChromeDriver(options); //위에서 설정한 옵션을 파라미터로 넘겨주고, 드라이버 객체 생성.
driver.get(url_theaters); //WebDriver 객체를 해당 URL로 이동시킨다.
WebDriver driver_theaters = new ChromeDriver(options); //위에서 설정한 옵션을 파라미터로 넘겨주고, 드라이버 객체 생성.
driver_theaters.get(url_theaters); //WebDriver 객체를 해당 URL로 이동시킨다.
//브라우저 이동시 생기는 로드시간을 기다린다.
//HTTP 응답속도 보다 자바의 컴파일 속도가 더 빠르기 때문에 임의적으로 1초를 대기한다.
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
//영화관 및 영화관에 대응되는 영화관별 고유 코드 가져오기.
List<WebElement> area = driver.findElements(By.className("area"));
List<WebElement> area = driver_theaters.findElements(By.className("area"));
for (WebElement elem : area) {
LinkedHashMap<String, String> theaters_info = new LinkedHashMap<>();
List<WebElement> theaters_by_area = elem.findElements(By.tagName("a"));
......@@ -130,12 +132,13 @@ public class CGVExample {
}
try {
driver.close(); //드라이버 연결 해제
driver.quit(); //프로세스 종료
driver_theaters.close(); //드라이버 연결 해제
driver_theaters.quit(); //프로세스 종료
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
//여기부터 예매율 순위 가져오는 부분
Document doc_movies;
try {
doc_movies = Jsoup.connect(url_movies).get();
......@@ -179,9 +182,55 @@ public class CGVExample {
System.out.print("관람 일자를 입력하세요 : ");
int date = scanner.nextInt();
String otherFormat = String.format("THEATER_CD=%s&PLAY_YMD=%s", theaterCode, date);
url_ticketing += ("?" + otherFormat);
WebDriver driver_ticketing = new ChromeDriver();
driver_ticketing.get(url_ticketing);
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
WebElement selecting_area = driver_ticketing.switchTo().frame("ticket_iframe").findElement(By.className("theater-area-list"));
List<WebElement> selected_areas_list = selecting_area.findElements(By.cssSelector("ul > li > a > span.name"));
//지역 코드에 맞게 list element click
selected_areas_list.get(regionCode).click();
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
//선택한 지역에 대응되는 영화관 정보 가져오기
WebElement selecting_theaters = selecting_area.findElement(By.cssSelector("ul > li.selected > div > ul"));
List<WebElement> selected_theaters_list = selecting_theaters.findElements(By.tagName("li"));
//프로그램 내부에서 가지고 있는 영화관코드와 웹에서 받아온 영화관코드가 일치하는 경우, selected_theaters_list element 클릭
for(WebElement theater_element : selected_theaters_list) {
if(theater_element.getAttribute("theater_cd").equals(theaterCode)){
theater_element.click();
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
break;
}
}
//선택한 영화관에서, 선택한 일자에 상영하는 영화 목록 들고오기
WebElement selecting_movies = driver_ticketing.findElement(By.className("movie-select"));
List<WebElement> selected_movies_list = selecting_movies.findElements(By.cssSelector("#movie_list > ul > li"));
//선택불가를 제외한 영화 제목 출력
for(WebElement movie_element : selected_movies_list){
String movie_enabled = movie_element.getAttribute("class");
if(movie_enabled.endsWith("dimmed"))
break;
else
System.out.println(movie_element.findElement(By.cssSelector("span.text")).getText());
}
try {
driver_ticketing.close(); //드라이버 연결 해제
driver_ticketing.quit(); //프로세스 종료
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
try{
String otherFormat = String.format("&THEATER_CD=%s&PLAY_YMD=%s", theaterCode, date);
Desktop.getDesktop().browse(new URI(Movies.get(inputRank - 1).getLink() + otherFormat));
Desktop.getDesktop().browse(new URI(Movies.get(inputRank - 1).getLink() + "&" + otherFormat));
}
catch(IndexOutOfBoundsException | URISyntaxException | IOException e){
System.out.println(e.getClass());
......