대학원 일기

java로 만드는 BoxOffice 영화 예매 프로그램: API 구현 본문

Computer programming/java

java로 만드는 BoxOffice 영화 예매 프로그램: API 구현

대학원생(노예) 2021. 12. 19. 01:58

이전글

2021.12.19 - [개발 공부/java] - java로 만드는 BoxOffice 영화 예매 프로그램: OPEN API

 

 

 

서론

   이전에 조사한 영화진흥위원회에서 제공하는 OPEN API를 통해 일별 박스오피스 정보를 구현해보겠다.

 

 

 

개발환경

- 운영체제: 윈도우10

- 개발도구: intellij

- 자바버전: java17

- 빌드 시스템: gradle

 

 

소스코드

public class MovieAPI {

    // 일자 포맷
    private final SimpleDateFormat DATE_FMT = new SimpleDateFormat("yyyyMMdd");

    // Map -> QueryString
    public String makeQueryString(Map<String, String> paramMap) {
        final StringBuilder sb = new StringBuilder();

        paramMap.forEach((key, value) -> {
            if (sb.length() > 0) {
                sb.append('&');
            }
            sb.append(key).append('=').append(value);
        });

        return sb.toString();
    }

    public void requestAPI() {
        // 변수설정
        // 하루전 날짜
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.add(Calendar.DATE, -1); // 당일은 안됨

        // 변수 설정
        // 요청(Request) 인터페이스 Map
        Map<String, String> paramMap = new HashMap<>();
        String AUTH_KEY = "인증키 입력";
        paramMap.put("key"          , AUTH_KEY);                        // 발급받은 인증키
        paramMap.put("targetDt"     , DATE_FMT.format(cal.getTime()));  // 조회하고자 하는 날짜
        paramMap.put("itemPerPage"  , "5");                            // 결과 ROW 의 개수( 최대 10개 )
        paramMap.put("multiMovieYn" , "");                             // Y:다양성 영화, N:상업영화, Default:전체
        paramMap.put("repNationCd"  , "");                             // K:한국영화, F:외국영화, Default:전체

        try {
            // Request URL 연결 객체 생성
            // 상수 설정
            // 요청(Request) 요청 변수
            String REQUEST_URL = "http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json";
            URL requestURL = new URL(REQUEST_URL +"?"+makeQueryString(paramMap));
            HttpURLConnection conn = (HttpURLConnection) requestURL.openConnection();

            // GET 방식으로 요청
            conn.setRequestMethod("GET");
            conn.setDoInput(true);

            // 응답(Response) 구조 작성
            // Stream -> JSONObject
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
            String readline;
            StringBuilder response = new StringBuilder();

            while ((readline = br.readLine()) != null) {
                response.append(readline);
            }

            JSONParser parser = new JSONParser();
            JSONObject responseBody = (JSONObject) parser.parse(response.toString());

            // 데이터 추출
            JSONObject boxOfficeResult = (JSONObject) responseBody.get("boxOfficeResult");

            // 박스오피스 주제 출력
            String boxOfficeType = boxOfficeResult.get("boxofficeType").toString();
            System.out.print(boxOfficeType);
            System.out.println(" 순위");

            // 박스오피스 목록 출력
            JSONArray dailyBoxOfficeList = (JSONArray) boxOfficeResult.get("dailyBoxOfficeList");
            for (Object o : dailyBoxOfficeList) {
                JSONObject boxOffice = (JSONObject) o;
                System.out.printf("  %s - %s \n", boxOffice.get("rnum"), boxOffice.get("movieNm"));
            }
            System.out.println("종료: exit\n");

        } catch (IOException | ParseException e) {
            e.printStackTrace();
        }

        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.print("명령어) ");
            String command = scanner.nextLine();
            if (Objects.equals(command, "exit")) {
                break;
            }
            else{
                System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
            }
        }
    }
}

 

결과화면

2021/12/21 일별 박스오피스 순위

 

마치며

   영화진흥위원회에서 제공되는 OPEN API를 통해 일별 박스오피스 순위를 알아볼 수 있었다. 이제 API를 통해 얻어온 정보로 영화를 예매할 수 있는 좌석과 티켓을 구현하겠다.

 

java로 만드는 BoxOffice 영화 예매 프로그램: 예매 좌석 구현

 

java로 만드는 BoxOffice 영화 예매 프로그램: 예매 좌석 구현

이전글 2021.12.19 - [개발 공부/java] - java로 만드는 BoxOffice 영화 예매 프로그램: API 구현 2021.12.19 - [개발 공부/java] - java로 만드는 BoxOffice 영화 예매 프로그램: OPEN API 2021.12.17 - [개발 공..

kys0411.tistory.com

 

Comments