티스토리 뷰
스프링부트에 관광 정보를 활용하기 위해 API를 사용하기로 했다. 크롤링과 API는 비슷해보이지만 효율상 API가 더 우위에 있다.
1. 활용하고자하는 API를 정한다.
https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15057787
[활용신청]을 통해 키를 발급받을 수 있다. 보통 1시간 내외로 발급된다했지만 나는 하루가 지나서야 키가 정식으로 발급되었다. 키가 발급되었다면 Encoding 키를 복사해 테스트가 가능하다.
2. 키 발급이 정상적으로 이루어졌는지 확인한다.
요청변수(주소창 파라미터)에 넣을 수 있는 변수들로 필수와 옵션으로 나누어진다. 또한 아래에 샘플 코드도 제공한다. (코드 찾으려고 몇시간동안 고생했는데 완성하고나서 알게되었다...)
3.1. JAVA 코드 - String
@GetMapping("/api")
public String allowBasic() {
StringBuffer result = new StringBuffer();
try {
StringBuilder urlBuilder = new StringBuilder("http://api.visitkorea.or.kr/openapi/service/rest/KorService/areaCode");
urlBuilder.append("?" + URLEncoder.encode("ServiceKey", "UTF-8") + "=발급받은 키");
urlBuilder.append("&" + URLEncoder.encode("numOfRows", "UTF-8") + "=" + URLEncoder.encode("10", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("pageNo", "UTF-8") + "=" + URLEncoder.encode("1", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("MobileOS", "UTF-8") + "=" + URLEncoder.encode("ETC", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("MobileApp", "UTF-8") + "=" + URLEncoder.encode("AppTest", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("areaCode", "UTF-8") + "=" + URLEncoder.encode("6", "UTF-8"));
urlBuilder.append("&_type=json");//문서참조
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader rd;
// rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
if (conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
String line;
while ((line = rd.readLine()) != null) {
result.append(line + "\n");
}
rd.close();
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return result + "";
}
샘플코드와 거의 동일하며 try catch문만 추가했다. json 타입으로 변환하기 위해선 별도의 파라미터가 필요한데 type, datatype, _type 등등 API마다 다르기 때문에 활용메뉴얼을 꼭 확인하자. 예제로 활용된 API의 경우 _type=json 을 URL에 추가해 json으로 받을 수 있었다.
3.2. JAVA 코드 - JSON
@GetMapping("/api2")
public List<Map<String, Object>> allowBasic2() {
RestTemplate rt = new RestTemplate();
RequestEntity requestEntity = null;
try {
requestEntity = RequestEntity
.get(new URI("http://api.visitkorea.or.kr/openapi/service/rest/KorService/areaCode"
+ "?serviceKey=발급받은키"
+ "&numOfRows=10"
+ "&pageNo=1"
+ "&MobileOS=ETC"
+ "&MobileApp=AppTest"
+ "&areaCode=6"
+ "&_type=json")).build();
} catch (URISyntaxException e) {
e.printStackTrace();
}
ResponseEntity<Map> entity = rt.exchange(requestEntity, Map.class);
Map<String, Object> result = entity.getBody();
Map<String, Object> response = (Map<String, Object>) result.get("response");
Map<String, Object> body = (Map<String, Object>) response.get("body");
Map<String, Object> items = (Map<String, Object>) body.get("items");
List<Map<String, Object>> item = (List<Map<String, Object>>) items.get("item");
return item;
}
오른쪽은 크롬 확장 프로그램인 JSON 뷰어를 활용해서 보이는 화면이다. 확장프로그램을 끄면 3.1.과 같은 결과가 나온다.
그러나 3.1.은 결국 String 리턴타입이기 때문에 확장프로그램이 인식하지 못한다.
'Programming > Spring' 카테고리의 다른 글
[스프링부트] Thymeleaf 사용법 (0) | 2021.08.08 |
---|---|
[스프링부트] 이클립스 환경설정 (0) | 2021.08.02 |
[스프링부트] OPEN API 와 DB 연동하기 (0) | 2021.07.25 |
[스프링부트] 로그 출력 (0) | 2021.07.15 |
[스프링부트] 인터셉터 (0) | 2021.07.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Open API
- 환경설정
- Thymeleaf
- 백준
- CSS
- Java
- 인턴
- HeidiSQL
- 국비교육
- 스프링
- 프로그래머스
- 오류
- 개발용어
- JVM
- 네트워크
- 스프링부트
- 오라클
- C
- C++
- 넥사크로
- svn
- 데이터베이스
- 이클립스
- 부트스트랩
- SQL
- CS
- JSP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함