공공데이터포털 접속 후 로그인
원하는 데이터 검색 후 활용 신청 및 참고문서 다운로드
활용신청이 완료된 데이터는 마이페이지에서 확인이 가능하다.
서비스정보에서 발급받은 인증키와 요청 url확인이 가능하고 이를 사용해서 API서버에 요청하면 결과값을 받을 수 있다.
활용신청한 데이터의 참고문서를 보면 서비스 인증/권한, 인터페이스 표준, 교환 데이터 표준을 확인할 수 있다.
이를 참고해서 데이터를 요청하고 결과값을 반환받아 보자.
부산광역시_부산맛집정보 서비스에 대한 데이터를 XML, JSON 형식으로 반환받기
@GetMapping("/apitest") // http://localhost:9050/apitest
public String openapi() {
StringBuffer result = new StringBuffer();
int pageNo = 1;
// 필수 요소와 url을 저장
// 맨 처음은 요청 url
// servicekey
// numOfRows
// pageNo
// "&resultType=xml"; xml 타입으로
try {
String apiUrl = "http://apis.data.go.kr/6260000/FoodService/getFoodKr?"
+ "serviceKey=발급받은 서비스키"
+ "&numOfRows=10" + "&pageNo=" + pageNo + "&resultType=xml";
// URL 객체를 생성하는 클래스
// 문자열이 지정하는 자원에 대한 url 객체 생성
// URL 객체 만들면서 프로토콜 : 통신방법, 호스트 주소, 포트 번호, 파일 이름
// 객체 생성
URL url = new URL(apiUrl);
// url 내용을 읽어오거나 url에 get, post 방식으로 데이터를 전달할 때 사용
// 웹 페이지나 서블릿에 데이터를 전달할 수 있다.
// 프로토콜이 http:// 인 경우 반환된 객체를 httpURLConnection객체로 캐스팅할 수 있다.
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); // 연결
// 실제 데이터 전송을 할 때 전송방식
urlConnection.setRequestMethod("GET");
// 실제 연결
// urlConnection.connect();
// 응답!(데이터를 받아온다.)
// Input, Out Stream
// Stream
// - 데이터가 연속적으로 존재한다는 것을 표현한 객체
// - 바이트로 데이터를 전달하기 때문에 스트림도 byte 연속된 집합이다.
// - 사용자의 키보드의 입력, 파일 데이터, http 송수신 데이터 등이 모두 스트림
// InputStream
// 자바 프로그램 안으로 데이터를 가지고 온다.
// 1byte 의 int형의 아스키 코드값으로 값을 저장
// InputStreamReader
// byte 대신 char 형태로 읽을 수 있게 아스키코드가 아닌 문자열로 출력이 가능하다.
// String 객체로 변환할 수도 있게 된다.
// InputSteam 인자로 받아와서 만들어진다.
BufferedInputStream BufferedInputStream = new BufferedInputStream(urlConnection.getInputStream());
// 실제 응답받은 데이터를 읽기
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(BufferedInputStream, "UTF-8"));
String returnLine;
// <xmp> </xmp>
// 문자, 숫자, 태그 소스 든 그대로 출력할 수 있게 도와주는 태그
result.append("<xmp>");
// 데이터를 응답받아서 안에 있는 내용들을 꺼내야된다.
// 꺼낼때 데이터가 없으면 null 반환한다.
// 한 행 ~ 한 줄 BufferedReader readLine()
while ((returnLine = bufferedReader.readLine()) != null) {
result.append(returnLine + "\n");
}
// url 연결 끊기! 닫기!
urlConnection.disconnect();
} catch (Exception e) { // 모든 예외에 대해서 처리하겠다.
// TODO Auto-generated catch block
e.printStackTrace();
}
return result + "</xmp>";
}
@GetMapping("/jsonapi") //http://localhost:9050/jsonapi
public String openapiJson() {
// url 세팅
StringBuffer result = new StringBuffer();
int pageNo = 2;
// try 안쪽에 변수 선언하면 데이터가 try문과 함께 사라지는 지역변수
String jsonPrintString = null;
try {
String apiUrl = "http://apis.data.go.kr/6260000/FoodService/getFoodKr?"
+ "serviceKey=발급받은 서비스키"
+ "&numOfRows=10" + "&pageNo=" + pageNo;
URL url = new URL(apiUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); // 연결
urlConnection.connect();
BufferedInputStream BufferedInputStream = new BufferedInputStream(urlConnection.getInputStream());
// 중간에 데이터를 임시저장공간인 버퍼에 저장한다.
// 저장한 내용을 한꺼번에 가지고 들어온다.
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(BufferedInputStream, "UTF-8"));
String returnLine;
while ((returnLine = bufferedReader.readLine()) != null) {
result.append(returnLine + "\n");
}
// json
// json 파일을 스프링부트에서 사용할 수 있도록 특정 값을 가지고 오는
// 내용을 작성
// Jsonparser 객체의 도움을 받는다.
// 1. Jsonparser 객체 생성
// 2. reader를 이용해서 json 파일을 읽어온다.
// 3. Array json 코드가 [] 감싸고 있을 경우 List 형식으로 index 값으로 불러온다.
// 4. Object json 코드가 {}로 감싸고 있는 경우
// Key : Value 형식으로 저장되어 있는 값을 불러온다. map형식
JSONObject jsonObject = XML.toJSONObject(result.toString());
jsonPrintString = jsonObject.toString();
} catch (Exception e) { // 모든 예외에 대해서 처리하겠다.
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonPrintString;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- http://localhost:9050/index.html -->
Ajax로 OpenAPI 가져오기 예제1 (부산광역시_부산맛집정보 서비스) = RestTestController.java (xml, json)
</body>
</html>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
$(document).ready(function() {
// ajax()
$.ajax({
// url : http://localhost:포트번호/jsonapi
url : 'http://localhost:9050/jsonapi',
type : 'GET',
dataType : 'text', //리턴해주는 타입을 지정해준다.
beforeSend : function(jqXHR) {
console.log("ajax호출");
}, //서버 요청 전에 호출되는 함수 return false; 일 경우 요청을 중단.
success : function(data) {
console.log("호출성공");
console.log(JSON.parse(data));
}, //요청 완료시!
error : function(jqXHR) {
console.log("실패입니다!");
} //요청 실패
});
});
</script>
마찬가지로 활용신청 후 마이페이지에서 참고문서, End Point, 일반 인증키 확인이 가능하다.
@GetMapping("/apixml") // http://localhost:9050/apixml
public String openapixml() {
StringBuffer result = new StringBuffer();
int pageNo = 1;
// 필수 요소와 url을 저장
// 맨 처음은 요청 url
// servicekey
// numOfRows
// pageNo
// "&resultType=xml"; xml 타입으로
try {
String apiUrl = "http://apis.data.go.kr/B551177/AviationStatsByTimeline/getTotalTonsOfCargo?"
+ "serviceKey=발급받은 서비스키"
+ "&from_month=201405" + "&to_month=201405" + "&periodicity=0" + "&pax_cargo=Y" + "&type=xml";
// URL 객체를 생성하는 클래스
// 문자열이 지정하는 자원에 대한 url 객체 생성
// URL 객체 만들면서 프로토콜 : 통신방법, 호스트 주소, 포트 번호, 파일 이름
// 객체 생성
URL url = new URL(apiUrl);
// url 내용을 읽어오거나 url에 get, post 방식으로 데이터를 전달할 때 사용
// 웹 페이지나 서블릿에 데이터를 전달할 수 있다.
// 프로토콜이 http:// 인 경우 반환된 객체를 httpURLConnection객체로 캐스팅할 수 있다.
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); // 연결
// 실제 데이터 전송을 할 때 전송방식
urlConnection.setRequestMethod("GET");
// 실제 연결
// urlConnection.connect();
// 응답!(데이터를 받아온다.)
// Input, Out Stream
// Stream
// - 데이터가 연속적으로 존재한다는 것을 표현한 객체
// - 바이트로 데이터를 전달하기 때문에 스트림도 byte 연속된 집합이다.
// - 사용자의 키보드의 입력, 파일 데이터, http 송수신 데이터 등이 모두 스트림
// InputStream
// 자바 프로그램 안으로 데이터를 가지고 온다.
// 1byte 의 int형의 아스키 코드값으로 값을 저장
// InputStreamReader
// byte 대신 char 형태로 읽을 수 있게 아스키코드가 아닌 문자열로 출력이 가능하다.
// String 객체로 변환할 수도 있게 된다.
// InputSteam 인자로 받아와서 만들어진다.
BufferedInputStream BufferedInputStream = new BufferedInputStream(urlConnection.getInputStream());
// 실제 응답받은 데이터를 읽기
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(BufferedInputStream, "UTF-8"));
String returnLine;
// <xmp> </xmp>
// 문자, 숫자, 태그 소스 든 그대로 출력할 수 있게 도와주는 태그
result.append("<xmp>");
// 데이터를 응답받아서 안에 있는 내용들을 꺼내야된다.
// 꺼낼때 데이터가 없으면 null 반환한다.
// 한 행 ~ 한 줄 BufferedReader readLine()
while ((returnLine = bufferedReader.readLine()) != null) {
result.append(returnLine + "\n");
}
// url 연결 끊기! 닫기!
urlConnection.disconnect();
} catch (Exception e) { // 모든 예외에 대해서 처리하겠다.
// TODO Auto-generated catch block
e.printStackTrace();
}
return result + "</xmp>";
}
@GetMapping("/apijson") // http://localhost:9050/apijson
public String openapiJson() {
// url 세팅
StringBuffer result = new StringBuffer();
int pageNo = 2;
// try 안쪽에 변수 선언하면 데이터가 try문과 함께 사라지는 지역변수
String jsonPrintString = null;
try {
String apiUrl = "http://apis.data.go.kr/B551177/AviationStatsByTimeline/getTotalTonsOfCargo?"
+ "serviceKey=발급받은 서비스키"
+ "&from_month=201405" + "&to_month=201405" + "&periodicity=0" + "&pax_cargo=Y" + "&type=xml";
URL url = new URL(apiUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); // 연결
urlConnection.connect();
BufferedInputStream BufferedInputStream = new BufferedInputStream(urlConnection.getInputStream());
// 중간에 데이터를 임시저장공간인 버퍼에 저장한다.
// 저장한 내용을 한꺼번에 가지고 들어온다.
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(BufferedInputStream, "UTF-8"));
String returnLine;
while ((returnLine = bufferedReader.readLine()) != null) {
result.append(returnLine + "\n");
}
// json
// json 파일을 스프링부트에서 사용할 수 있도록 특정 값을 가지고 오는
// 내용을 작성
// Jsonparser 객체의 도움을 받는다.
// 1. Jsonparser 객체 생성
// 2. reader를 이용해서 json 파일을 읽어온다.
// 3. Array json 코드가 [] 감싸고 있을 경우 List 형식으로 index 값으로 불러온다.
// 4. Object json 코드가 {}로 감싸고 있는 경우
// Key : Value 형식으로 저장되어 있는 값을 불러온다. map형식
JSONObject jsonObject = XML.toJSONObject(result.toString());
jsonPrintString = jsonObject.toString();
} catch (Exception e) { // 모든 예외에 대해서 처리하겠다.
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonPrintString;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- http://localhost:9050/index2.html -->
Ajax로 OpenAPI 가져오기 예제2 = 인천국제공항공사_시간대별 항공 통계 서비스 = RestkhController.java (xml, json)
</body>
</html>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
$(document).ready(function() {
// ajax()
$.ajax({
// url : http://localhost:포트번호/jsonapi
url : 'http://localhost:9050/apijson',
type : 'GET',
dataType : 'text', //리턴해주는 타입을 지정해준다.
beforeSend : function(jqXHR) {
console.log("ajax호출");
}, //서버 요청 전에 호출되는 함수 return false; 일 경우 요청을 중단.
success : function(data) {
console.log("호출성공");
console.log(JSON.parse(data));
}, //요청 완료시!
error : function(jqXHR) {
console.log("실패입니다!");
} //요청 실패
});
});
</script>