영화진흥위원회에서는 박스오피스, 공통코드조회, 영화정보, 영화사정보, 영화인정보를 API로 제공하고 있습니다.
이번 포스팅에서는 일일 박스오피스 정보를 json 형식으로 받아오고 파싱하는 것 까지 정리했습니다.
1. 키 발급
이 API를 사용하려면 영화진흥위원회 홈페이지에 가입하고 키를 발급받아야합니다.
홈페이지 가입 및 키 발급 과정은 생략했습니다. 간단하기 때문에 금방할 수 있습니다.
https://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=키&targetDt=20200302
위 url에서 "키"라고 적혀진 부분에 자신의 발급키를 넣고 접속했을 때, 아래와 같이 json 데이터가 나옵니다.
응답 필드가 무엇인지는 영화진흥위원회 오픈API 홈페이지에 상세히 나와있습니다.
2. JAVA 코드
이제 위 json 데이터에서 movieNm(영화명)만 출력하는 코드를 작성해보겠습니다.
ApiMovie.JAVA 파일을 새로 생성하고 아래의 코드를 복붙합니다.
public class ApiMovie extends Thread{
public final static String apiURL = "https://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json";
public final static String KEY = "발급받은 키";
public static String today;
ApiMovie(String today){
this.today = today;
}
public void run(){
main();
}
public static void main() {
String url = apiURL+"?key="+KEY+"&targetDt="+today;
String responseBody = get(url);
parseData(responseBody);
}
private static String get(String apiUrl) {
String responseBody = null;
try {
URL url = new URL(apiUrl);
InputStream in = url.openStream();
responseBody = readBody(in);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return responseBody;
}
private static String readBody(InputStream body){
InputStreamReader streamReader = new InputStreamReader(body);
try (BufferedReader lineReader = new BufferedReader(streamReader)) {
StringBuilder responseBody = new StringBuilder();
String line;
while ((line = lineReader.readLine()) != null) {
responseBody.append(line);
}
return responseBody.toString();
} catch (IOException e) {
throw new RuntimeException("API 응답을 읽는데 실패했습니다.", e);
}
}
private static void parseData(String responseBody) {
String title;
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(responseBody.toString());
JSONObject jsonObject1 = (JSONObject) jsonObject.get("boxOfficeResult");
JSONArray jsonArray = jsonObject1.getJSONArray("dailyBoxOfficeList");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject item = jsonArray.getJSONObject(i);
title = item.getString("movieNm");
System.out.println("movieNm : " + title);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
MainActivity.java를 아래와 같이 수정합니다.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.KOREA);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH,-1);
String today = sdf.format(calendar.getTime()).toString();
ApiMovie apiMovie = new ApiMovie(today);
apiMovie.start();
}
}
한달 전 박스오피스를 출력하는 코드입니다.
실행했을 때 다음과 같았습니다.
영화를 안본지 오래되서 클로젯 말고는 다 모르는 영화뿐이네요.
예전에 텀 프로젝트로 영화 관련 앱을 개발한 적이 있었는데, 몇년 전에 개발했다고 해도 코드가 너무 엉망이어서 다시 뜯어보고 있습니다. 영화진흥위원회에서는 영화 이미지를 제공하지 않아서, 네이버 영화 API 까지 중첩했었는데, 그 때문인지 코드가 그냥 아수라백작입니다. 읽기 좋은 코드를 짠다는건 정말 어려운 것 같습니다..
잘못된 내용이 있다면 언제든지 댓글이나 메일로 알려주시면 감사하겠습니다.
이 포스팅이 도움이 되었다면 공감 부탁드립니다.
궁금한 점은 언제든지 댓글 남겨주시면 답변해드리겠습니다:D
'major > Android' 카테고리의 다른 글
[Android] Google Map 사용하기 (0) | 2020.03.26 |
---|---|
[Kotlin] 공공 데이터 사용하기 - 공적 마스크 (5) | 2020.03.24 |
[Kotlin] 액티비티 전환하기 - intent, putExtra (0) | 2020.03.23 |
[Android] Firebase Database 사용하기 (1) | 2020.03.21 |
[Android] 네이버 오픈 API 사용방법 - 예제 코드 사용 (6) | 2020.03.21 |