멋사 Backend 80일차 🦁

신재원·2023년 8월 17일

오픈 데이터 API

동물 병원 오픈 데이터 포탈 해당 링크에 접속하여 아래 사진과 같이 인증키를 신청하여 인증키를 발급 받습니다.

샘플 URL로 접속하게 되면은 아래와 같은 괄호에 저희가 필요로 하는 데이터 값 들이 존재하게 됩니다. 이 데이터 값을 얻기 위해서는 "파싱" 이라는 작업을 거쳐야 합니다.

사진의 Open API 이용안내를 클릭하면

언어별로 API 를 해석하는 것을 도와주는 코드를 제공합니다.

  • 제공해주는 코드에서의 핵심 코드라고 생각하는 3가지 입니다.

🔵

/*URL*/
StringBuilder urlBuilder = 
  new StringBuilder("http://openapi.seoul.go.kr:8088/발급된인증키/필수인자"); 

첫번째 사진의 샘플 URL에서 발급된 인증키와, 필수인자를 URL에 작성합니다.

🟣

/*인증키 */
urlBuilder.append("/" +  URLEncoder.encode("발급된 인증키","UTF-8") ); 

/*요청파일타입 (xml,xmlf,xls,json) */
urlBuilder.append("/" +  URLEncoder.encode("요청 타입 작성","UTF-8") );

발급된 인증키를 작성하고, 사용자가 필요로하는 파일 타입을 작성합니다.

이렇게 하면 오픈 API를 사용할 준비가 되었습니다.

필자는 Json 데이터 형식을 사용할 예정입니다. Json 데이터 형식으로 파싱을 하기 위해서는 의존성을 한가지 추가 해줘야합니다.

아래의 의존성을 추가해줘야 Json 데이터 형식으로 파싱할수 있습니다.
implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'

Json 파싱

1.

첫 번째로 API 를 해석하는것을 도와주는 코드의 StringBuilderString 객체로 저장합니다.

String jsonResponse = sb.toString();

2.

두 번째로 JsonParser 객체를 생성합니다.

 // JSON 파싱
JSONParser parser = new JSONParser();

3.

세 번째로 필자가 가장 헤맸던 부분입니다.

1 차로 { 괄호를 벗겨주는 코드를 작성합니다.

// json 코드가 {} 로 감싸고 있을경우
JSONObject jsonObject = (JSONObject) parser.parse(jsonResponse.toString());

4.

네 번째로 위의 사진의 빨간 밑줄에서 { 괄호가 벗겨진 데이터 안에 LOCALDATA_020301 의 키값에 접근합니다.

// 원하는 정보 추출
// json 키 값에 접근
JSONObject localdata = (JSONObject) jsonObject.get("LOCALDATA_020301"); 

5.

다섯 번째로 [ 괄호를 벗겨주는 코드를 작성합니다. 위의 사진에서 보면 row 로 감싸고 있는것을 확인할수 있습니다.

 // json 코드가 [] 로 감싸고 있을경우
JSONArray petHospitalList = (JSONArray) localdata.get("row");

6.

마지막으로 Json 데이터에서 필요한 인자를 꺼내어 사용하면됩니다.
(오픈 API의 출력값의 출력명)

for (Object petHospitalObj : petHospitalList) {
		 // JsonObject 로 형변환
         JSONObject petHospital = (JSONObject) petHospitalObj;
         
         String hospitalName = (String) petHospital.get("BPLCNM");
         String hospitalAddress = (String) petHospital.get("RDNWHLADDR");
         String hospitalTel = (String) petHospital.get("SITETEL");
         String hospitalOperation = (String) petHospital.get("DTLSTATENM");
}

0개의 댓글