💡 개발 환경
Java 17, Spring 3.3.X, Gradle 8.8, MySQL
[OpenAPI 활용 계기]
사용자의 위치 기반 맛집 추천하는 서비스 개발
서울시 공공데이터 포털(열린데이터 광장)에서 제공하는 openAPI를 활용해 음식점들의 데이터를 수집하기로 결정
1. 페이지 접속 후 수집하고자 하는 데이터를 검색한다.
2. 여러 후보 중 원하는 형태의 데이터를 선택한다.
3. 인증키 신청을 한다. (로그인 후!)
4. 발급된 인증키를 확인한다.
5. 아래 버튼을 눌러 예제 코드를 확인한다.
6. 사용하는 언어를 선택한다. (필자의 경우 JAVA를 선택)
> ApiExplorer.java (아래 코드를 사용하고자 하는 openAPI에 맞게 수정한다.)
/* Java 1.8 샘플 코드 */
package test;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.io.BufferedReader;
import java.io.IOException;
public class ApiExplorer {
public static void main(String[] args) throws IOException {
StringBuilder urlBuilder = new StringBuilder("http://openapi.seoul.go.kr:8088"); /*URL*/
urlBuilder.append("/" + URLEncoder.encode("sample","UTF-8") ); /*인증키 (sample사용시에는 호출시 제한됩니다.)*/
urlBuilder.append("/" + URLEncoder.encode("xml","UTF-8") ); /*요청파일타입 (xml,xmlf,xls,json) */
urlBuilder.append("/" + URLEncoder.encode("LOCALDATA_072404","UTF-8")); /*서비스명 (대소문자 구분 필수입니다.)*/
urlBuilder.append("/" + URLEncoder.encode("1","UTF-8")); /*요청시작위치 (sample인증키 사용시 5이내 숫자)*/
urlBuilder.append("/" + URLEncoder.encode("5","UTF-8")); /*요청종료위치(sample인증키 사용시 5이상 숫자 선택 안 됨)*/
// 상위 5개는 필수적으로 순서바꾸지 않고 호출해야 합니다.
// 서비스별 추가 요청 인자이며 자세한 내용은 각 서비스별 '요청인자'부분에 자세히 나와 있습니다.
urlBuilder.append("/" + URLEncoder.encode("20220301","UTF-8")); /* 서비스별 추가 요청인자들*/
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/xml");
System.out.println("Response code: " + conn.getResponseCode()); /* 연결 자체에 대한 확인이 필요하므로 추가합니다.*/
BufferedReader rd;
// 서비스코드가 정상이면 200~300사이의 숫자가 나옵니다.
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
conn.disconnect();
System.out.println(sb.toString());
}
}
아래 요청인자는 필수로 입력해야 함!!
다음 게시물에 이어서 데이터 저장 코드를 작성하겠다!
'Spring & SpringBoot' 카테고리의 다른 글
[Java/SpringBoot] 로그인 시 JWT 인증토큰, RefreshToken 발행하기 (2) | 2024.09.01 |
---|---|
[Java/Springboot] OpenAPI를 활용해 수집한 데이터 저장하기_(2) (5) | 2024.08.31 |
Java/SpringBoot 게시판 기능 구현_Querydsl을 활용한 카테고리별 조회, 필터링 (0) | 2023.10.19 |
Java/SpringBoot 게시판 기능 구현_Token 관련 예외 처리 (0) | 2023.07.05 |
SpringBoot 게시판_이미지 대표이미지 출력 (0) | 2023.05.12 |