[오픈 API] 공공데이터 JSON 파싱하기(Java/Spring)

JINI·2023년 1월 8일
0

오픈 API

목록 보기
1/1

프로젝트를 진행하면서 개인적으로 느꼈던 점은 데이터 베이스를 구축하는 것이 생각보다 오래 걸린다는 점이었다.
바로 오픈 API를 이용하면 많은 데이터의 양을 손쉽게 불러와서 사용 가능한데 직접 데이터를 구축해야 하는 것이 아니라면 만들 프로젝트에 맞는 데이터를 가져와 사용하는 것이 시간을 단축할 수 있는 큰 장점이다.


📌공공데이터 사이트

오픈 API를 사용할 수 있는 사이트는 여러가지가 있지만 주로 많이 사용하는 사이트이다.

✔️ 공공데이터 포털
https://www.data.go.kr/index.do

✔️ 서울 열린데이터 광장
https://data.seoul.go.kr/index.do




🧩자료 검색하기

내가 파싱해 보고 싶은 데이터는 서울시 공공도서관 정보라 서울 열린데이터 광장 사이트를 이용하기로 했다.


🧩인증키 신청하기

개인 인증키가 있어야 api를 사용할 수 있기 때문에 정보를 입력하고 신청하면 인증키가 발급된다.


데이터를 바로 볼 수 있는 방법은 사이트 주소창에 샘플 url 코드를 입력하면되는데 인증키 부분에는 본인 인증키를 넣고 본인에게 필요한 확장자 xml 또는 json을 입력해준다.



🧩샘플 URL로 데이터 가져오기

🖋️xml로 가져온 경우

🖋️json으로 가져온 경우

샘플 url로 데이터가 제대로 뜨는 것을 볼 수 있다.




🧩자바를 이용해 데이터 가져오기

이번엔 스프링 환경에서 자바를 이용해 데이터를 파싱해보도록 하자!

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/인증키/json/SeoulPublicLibraryInfo/1/5/"); /*URL*/
		urlBuilder.append("/" +  URLEncoder.encode("인증키","UTF-8") ); /*인증키 (sample사용시에는 호출시 제한됩니다.)*/
		urlBuilder.append("/" +  URLEncoder.encode("json","UTF-8") ); /*요청파일타입 (xml,xmlf,xls,json) */
		urlBuilder.append("/" + URLEncoder.encode("CardSubwayStatsNew","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/json");
		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());
	}
}

샘플 코드는 친절하게 나와있다. 필요한 언어에 맞는 코드를 복사해서 붙여주면 되는데 내 경우는 자바 샘플 코드를 복붙하고 각 줄에 인증키나 요청 파일 타입을 적고 실행해준다.


콘솔창을 보면 맞게 입력됐다는 Response code : 200이 뜨면서 데이터를 가져온다.

profile
꾸준히 성장하는 개발자

0개의 댓글