Enable to Select the Movie filtered by the theater and the date
Showing
1 changed file
with
56 additions
and
7 deletions
... | @@ -96,10 +96,12 @@ public class CGVExample { | ... | @@ -96,10 +96,12 @@ public class CGVExample { |
96 | Scanner scanner = new Scanner(System.in); | 96 | Scanner scanner = new Scanner(System.in); |
97 | String url_movies = "https://www.cgv.co.kr/movies/?lt=1&ft=1"; //끝의 쿼리 0은 개봉 전 영화도 포함하는 것. 예매율 순위 가져오기 | 97 | String url_movies = "https://www.cgv.co.kr/movies/?lt=1&ft=1"; //끝의 쿼리 0은 개봉 전 영화도 포함하는 것. 예매율 순위 가져오기 |
98 | String url_theaters = "https://www.cgv.co.kr/theaters"; //영화관 정보 가져오는 링크. | 98 | String url_theaters = "https://www.cgv.co.kr/theaters"; //영화관 정보 가져오는 링크. |
99 | + String url_ticketing = "https://www.cgv.co.kr/ticket/"; //상영중인 영화 정보 가져오는 링크. | ||
99 | 100 | ||
100 | ArrayList<LinkedHashMap<String, String>> theaters = new ArrayList<>(); //지역별 영화관 HashMap(Key: 영화관, value:영화관별 고유코드)으로 이루어진 Arraylist | 101 | ArrayList<LinkedHashMap<String, String>> theaters = new ArrayList<>(); //지역별 영화관 HashMap(Key: 영화관, value:영화관별 고유코드)으로 이루어진 Arraylist |
101 | ArrayList<CGVMovieInfo> Movies = new ArrayList<>(); //CGVMovieInfo 클래스의 인스턴스들을 원소로 가지는 Arraylist | 102 | ArrayList<CGVMovieInfo> Movies = new ArrayList<>(); //CGVMovieInfo 클래스의 인스턴스들을 원소로 가지는 Arraylist |
102 | 103 | ||
104 | + // 여기부터 영화관 및 영화관별 고유코드 가져오는 부분. | ||
103 | try{ //드라이버 설정 | 105 | try{ //드라이버 설정 |
104 | System.setProperty(WEB_DRIVER_ID,WEB_DRIVER_PATH); | 106 | System.setProperty(WEB_DRIVER_ID,WEB_DRIVER_PATH); |
105 | }catch (Exception e){ | 107 | }catch (Exception e){ |
... | @@ -109,15 +111,15 @@ public class CGVExample { | ... | @@ -109,15 +111,15 @@ public class CGVExample { |
109 | ChromeOptions options = new ChromeOptions(); //크롬 설정을 담은 객체 생성 | 111 | ChromeOptions options = new ChromeOptions(); //크롬 설정을 담은 객체 생성 |
110 | options.addArguments("headless"); //브라우저가 눈에 보이지 않고 컴파일러 내부에서 작동됨. | 112 | options.addArguments("headless"); //브라우저가 눈에 보이지 않고 컴파일러 내부에서 작동됨. |
111 | 113 | ||
112 | - WebDriver driver = new ChromeDriver(options); //위에서 설정한 옵션을 파라미터로 넘겨주고, 드라이버 객체 생성. | 114 | + WebDriver driver_theaters = new ChromeDriver(options); //위에서 설정한 옵션을 파라미터로 넘겨주고, 드라이버 객체 생성. |
113 | - driver.get(url_theaters); //WebDriver 객체를 해당 URL로 이동시킨다. | 115 | + driver_theaters.get(url_theaters); //WebDriver 객체를 해당 URL로 이동시킨다. |
114 | 116 | ||
115 | //브라우저 이동시 생기는 로드시간을 기다린다. | 117 | //브라우저 이동시 생기는 로드시간을 기다린다. |
116 | //HTTP 응답속도 보다 자바의 컴파일 속도가 더 빠르기 때문에 임의적으로 1초를 대기한다. | 118 | //HTTP 응답속도 보다 자바의 컴파일 속도가 더 빠르기 때문에 임의적으로 1초를 대기한다. |
117 | try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | 119 | try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} |
118 | 120 | ||
119 | //영화관 및 영화관에 대응되는 영화관별 고유 코드 가져오기. | 121 | //영화관 및 영화관에 대응되는 영화관별 고유 코드 가져오기. |
120 | - List<WebElement> area = driver.findElements(By.className("area")); | 122 | + List<WebElement> area = driver_theaters.findElements(By.className("area")); |
121 | for (WebElement elem : area) { | 123 | for (WebElement elem : area) { |
122 | LinkedHashMap<String, String> theaters_info = new LinkedHashMap<>(); | 124 | LinkedHashMap<String, String> theaters_info = new LinkedHashMap<>(); |
123 | List<WebElement> theaters_by_area = elem.findElements(By.tagName("a")); | 125 | List<WebElement> theaters_by_area = elem.findElements(By.tagName("a")); |
... | @@ -130,12 +132,13 @@ public class CGVExample { | ... | @@ -130,12 +132,13 @@ public class CGVExample { |
130 | } | 132 | } |
131 | 133 | ||
132 | try { | 134 | try { |
133 | - driver.close(); //드라이버 연결 해제 | 135 | + driver_theaters.close(); //드라이버 연결 해제 |
134 | - driver.quit(); //프로세스 종료 | 136 | + driver_theaters.quit(); //프로세스 종료 |
135 | } catch (Exception e) { | 137 | } catch (Exception e) { |
136 | throw new RuntimeException(e.getMessage()); | 138 | throw new RuntimeException(e.getMessage()); |
137 | } | 139 | } |
138 | 140 | ||
141 | + //여기부터 예매율 순위 가져오는 부분 | ||
139 | Document doc_movies; | 142 | Document doc_movies; |
140 | try { | 143 | try { |
141 | doc_movies = Jsoup.connect(url_movies).get(); | 144 | doc_movies = Jsoup.connect(url_movies).get(); |
... | @@ -179,9 +182,55 @@ public class CGVExample { | ... | @@ -179,9 +182,55 @@ public class CGVExample { |
179 | System.out.print("관람 일자를 입력하세요 : "); | 182 | System.out.print("관람 일자를 입력하세요 : "); |
180 | int date = scanner.nextInt(); | 183 | int date = scanner.nextInt(); |
181 | 184 | ||
185 | + String otherFormat = String.format("THEATER_CD=%s&PLAY_YMD=%s", theaterCode, date); | ||
186 | + url_ticketing += ("?" + otherFormat); | ||
187 | + | ||
188 | + WebDriver driver_ticketing = new ChromeDriver(); | ||
189 | + driver_ticketing.get(url_ticketing); | ||
190 | + try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | ||
191 | + | ||
192 | + WebElement selecting_area = driver_ticketing.switchTo().frame("ticket_iframe").findElement(By.className("theater-area-list")); | ||
193 | + List<WebElement> selected_areas_list = selecting_area.findElements(By.cssSelector("ul > li > a > span.name")); | ||
194 | + | ||
195 | + //지역 코드에 맞게 list element click | ||
196 | + selected_areas_list.get(regionCode).click(); | ||
197 | + try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | ||
198 | + | ||
199 | + //선택한 지역에 대응되는 영화관 정보 가져오기 | ||
200 | + WebElement selecting_theaters = selecting_area.findElement(By.cssSelector("ul > li.selected > div > ul")); | ||
201 | + List<WebElement> selected_theaters_list = selecting_theaters.findElements(By.tagName("li")); | ||
202 | + | ||
203 | + //프로그램 내부에서 가지고 있는 영화관코드와 웹에서 받아온 영화관코드가 일치하는 경우, selected_theaters_list element 클릭 | ||
204 | + for(WebElement theater_element : selected_theaters_list) { | ||
205 | + if(theater_element.getAttribute("theater_cd").equals(theaterCode)){ | ||
206 | + theater_element.click(); | ||
207 | + try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();} | ||
208 | + break; | ||
209 | + } | ||
210 | + } | ||
211 | + | ||
212 | + //선택한 영화관에서, 선택한 일자에 상영하는 영화 목록 들고오기 | ||
213 | + WebElement selecting_movies = driver_ticketing.findElement(By.className("movie-select")); | ||
214 | + List<WebElement> selected_movies_list = selecting_movies.findElements(By.cssSelector("#movie_list > ul > li")); | ||
215 | + | ||
216 | + //선택불가를 제외한 영화 제목 출력 | ||
217 | + for(WebElement movie_element : selected_movies_list){ | ||
218 | + String movie_enabled = movie_element.getAttribute("class"); | ||
219 | + if(movie_enabled.endsWith("dimmed")) | ||
220 | + break; | ||
221 | + else | ||
222 | + System.out.println(movie_element.findElement(By.cssSelector("span.text")).getText()); | ||
223 | + } | ||
224 | + | ||
225 | + try { | ||
226 | + driver_ticketing.close(); //드라이버 연결 해제 | ||
227 | + driver_ticketing.quit(); //프로세스 종료 | ||
228 | + } catch (Exception e) { | ||
229 | + throw new RuntimeException(e.getMessage()); | ||
230 | + } | ||
231 | + | ||
182 | try{ | 232 | try{ |
183 | - String otherFormat = String.format("&THEATER_CD=%s&PLAY_YMD=%s", theaterCode, date); | 233 | + Desktop.getDesktop().browse(new URI(Movies.get(inputRank - 1).getLink() + "&" + otherFormat)); |
184 | - Desktop.getDesktop().browse(new URI(Movies.get(inputRank - 1).getLink() + otherFormat)); | ||
185 | } | 234 | } |
186 | catch(IndexOutOfBoundsException | URISyntaxException | IOException e){ | 235 | catch(IndexOutOfBoundsException | URISyntaxException | IOException e){ |
187 | System.out.println(e.getClass()); | 236 | System.out.println(e.getClass()); | ... | ... |
-
Please register or login to post a comment