Spring & SpringBoot

[Java/Springboot] OpenAPI를 활용해 데이터 수집하기_(1)

예령 : ) 2024. 8. 31. 22:48
💡 개발 환경
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());
	}
}

 

 

아래 요청인자는 필수로 입력해야 함!!

 

다음 게시물에 이어서 데이터 저장 코드를 작성하겠다!