->
->
http://apis.data.go.kr/B552584/UlfptcaAlarmInqireSvc/getUlfptcaAlarmInfo ? serviceKey=A3nhXM%2B8eD%2FtaKtnnZ8jh1RhBRIPv%2BIwyplaq9oBZ3KUp5z3Kkung0s77hMg2GX2DRP7K5u108sc5oBE%2F6YQ1A%3D%3D &returnType=xml &numOfRows=100 &pageNo=1 &year=2020 &itemCode=PM10
상세설명>샘플코드의 위를 복사하여 main함수에 넣기
컨트롤+시프트+o 해서 임포트
예외 던지기
실행해서 ✨Response code: 200
이 뜨면 성공
위 인증키를 복사
✨"=서비스키"
-> "="+"MY_KEY"
//인증키
final String MY_KEY = "A3nhXM%2B8eD%2FtaKtnnZ8jh1RhBRIPv%2BIwyplaq9oBZ3KUp5z3Kkung0s77hMg2GX2DRP7K5u108sc5oBE%2F6YQ1A%3D%3D";
package main; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; public class Main { public static void main(String[] args) throws Exception { //인증키 final String MY_KEY = "A3nhXM%2B8eD%2FtaKtnnZ8jh1RhBRIPv%2BIwyplaq9oBZ3KUp5z3Kkung0s77hMg2GX2DRP7K5u108sc5oBE%2F6YQ1A%3D%3D"; //<자바에서 웹으로 요청하는 방법> //1. URL 세팅(요청주소 + 파라미터들 세팅) StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/B552584/UlfptcaAlarmInqireSvc/getUlfptcaAlarmInfo"); /*URL*/ urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=" + MY_KEY); /*Service Key*/ urlBuilder.append("&" + URLEncoder.encode("returnType","UTF-8") + "=" + URLEncoder.encode("xml", "UTF-8")); /*xml 또는 json*/ urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("100", "UTF-8")); /*한 페이지 결과 수*/ urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*페이지번호*/ urlBuilder.append("&" + URLEncoder.encode("year","UTF-8") + "=" + URLEncoder.encode("2020", "UTF-8")); /*측정 연도*/ urlBuilder.append("&" + URLEncoder.encode("itemCode","UTF-8") + "=" + URLEncoder.encode("PM10", "UTF-8")); /*미세먼지 항목 구분(PM10, PM25), PM10/PM25 모두 조회할 경우 파라미터 생략*/ //URLEncoder.encode : 한글은 URLEncoding 작업을 해줘야 URL에서 정상적으로 전달이 됨 //2. URL 객체 생성(urlBuilder을 이용해서) URL url = new URL(urlBuilder.toString()); //3. URL 을 이용해서 connection 가져오기 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //4. request의 요청방식(method)랑 header 설정 conn.setRequestMethod("GET"); conn.setRequestProperty("Content-type", "application/json"); //conn.getResponseCode() : connection을 이용해서 응답코드(response code) 확인 가능 System.out.println("Response code: " + conn.getResponseCode()); //5. 커넥션에서 inputStream 가져옴 -> BufferdReader로 변환 //응답코드에 따른 처리(conn.getInputStream()) BufferedReader rd; if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) { rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); } else { rd = new BufferedReader(new InputStreamReader(conn.getErrorStream())); } //6. 5에서 가져온 스트림으로 데이터 한줄씩 읽기(누적시키기) //그 rd를 한줄씩 읽어서 line에 누적해서 넣기 StringBuilder sb = new StringBuilder(); String line; while ((line = rd.readLine()) != null) { sb.append(line); } //7. 사용한 자원(스트림, 커넥션) 정리 : rd 자원 반납, 웹사이트랑 연결도 끊기 rd.close(); conn.disconnect(); //8. 6에서 누적한 결과 확인 System.out.println(sb.toString()); } }
returnType=json
으로 해보자package com.kh.app26;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("data")
public class OpenApiContorller {
@GetMapping("micro")
public String micro() throws Exception{
String result = callMicro();
System.out.println(result);
return "data/micro";
}
private String callMicro() throws Exception{
//인증키
final String MY_KEY = "A3nhXM%2B8eD%2FtaKtnnZ8jh1RhBRIPv%2BIwyplaq9oBZ3KUp5z3Kkung0s77hMg2GX2DRP7K5u108sc5oBE%2F6YQ1A%3D%3D";
//<자바에서 웹으로 요청하는 방법>
//1. URL 세팅(요청주소 + 파라미터들 세팅)
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/B552584/UlfptcaAlarmInqireSvc/getUlfptcaAlarmInfo"); /*URL*/
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=" + MY_KEY); /*Service Key*/
urlBuilder.append("&" + URLEncoder.encode("returnType","UTF-8") + "=" + URLEncoder.encode("json", "UTF-8")); /*xml 또는 json*/
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("100", "UTF-8")); /*한 페이지 결과 수*/
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*페이지번호*/
urlBuilder.append("&" + URLEncoder.encode("year","UTF-8") + "=" + URLEncoder.encode("2020", "UTF-8")); /*측정 연도*/
urlBuilder.append("&" + URLEncoder.encode("itemCode","UTF-8") + "=" + URLEncoder.encode("PM10", "UTF-8")); /*미세먼지 항목 구분(PM10, PM25), PM10/PM25 모두 조회할 경우 파라미터 생략*/
//URLEncoder.encode : 한글은 URLEncoding 작업을 해줘야 URL에서 정상적으로 전달이 됨
//2. URL 객체 생성(urlBuilder을 이용해서)
URL url = new URL(urlBuilder.toString());
//3. URL 을 이용해서 connection 가져오기
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//4. request의 요청방식(method)랑 header 설정
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
//conn.getResponseCode() : connection을 이용해서 응답코드(response code) 확인 가능
System.out.println("Response code: " + conn.getResponseCode());
//5. 커넥션에서 inputStream 가져옴 -> BufferdReader로 변환
//응답코드에 따른 처리(conn.getInputStream())
BufferedReader rd;
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
//6. 5에서 가져온 스트림으로 데이터 한줄씩 읽기(누적시키기)
//그 rd를 한줄씩 읽어서 line에 누적해서 넣기
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
//7. 사용한 자원(스트림, 커넥션) 정리 : rd 자원 반납, 웹사이트랑 연결도 끊기
rd.close();
conn.disconnect();
//8. 6에서 누적한 결과 확인
// System.out.println(sb.toString());
return sb.toString();
}
}
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
package com.kh.app26;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@Controller
@RequestMapping("data")
public class OpenApiContorller {
@GetMapping("micro")
public String micro() throws Exception{
String result = callMicro();
//json 데이터 파싱하기
// JsonElement jsonElem = JsonParser.parseString(result);
JsonObject resultObj = JsonParser.parseString(result).getAsJsonObject();
JsonObject responseObj = resultObj.getAsJsonObject("response");
//"key"를 넣어주면 "value"를 뱉어낸다.
JsonObject bodyObj = responseObj.getAsJsonObject("body");
//"items":[{}] -> 배열이므로
JsonArray items = bodyObj.getAsJsonArray("items");
System.out.println(items);
// [{"clearVal":"65","sn":"249", ...
//내가 원하는 것만
for(int i=0; i<items.size(); ++i) {
System.out.println(items.get(i));
}
/*
// System.out.println(result);
// {"response":{"body":{"totalCount":108, "item":[...."header"...
// System.out.println(responseObj);
// {"body":{"totalCount":108,"items":[{"clearVal":...."header"...
System.out.println(responseObj.getAsJsonObject("header"));
System.out.println(responseObj.getAsJsonObject("body"));
// {"resultMsg":"NORMAL_CODE","resultCode":"00"}
// {"totalCount":108,"items":[{"clearVal":"....
*
*/
return "data/micro";
}
private String callMicro() throws Exception{
//인증키
final String MY_KEY = "A3nhXM%2B8eD%2FtaKtnnZ8jh1RhBRIPv%2BIwyplaq9oBZ3KUp5z3Kkung0s77hMg2GX2DRP7K5u108sc5oBE%2F6YQ1A%3D%3D";
//<자바에서 웹으로 요청하는 방법>
//1. URL 세팅(요청주소 + 파라미터들 세팅)
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/B552584/UlfptcaAlarmInqireSvc/getUlfptcaAlarmInfo"); /*URL*/
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=" + MY_KEY); /*Service Key*/
urlBuilder.append("&" + URLEncoder.encode("returnType","UTF-8") + "=" + URLEncoder.encode("json", "UTF-8")); /*xml 또는 json*/
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("100", "UTF-8")); /*한 페이지 결과 수*/
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*페이지번호*/
urlBuilder.append("&" + URLEncoder.encode("year","UTF-8") + "=" + URLEncoder.encode("2020", "UTF-8")); /*측정 연도*/
urlBuilder.append("&" + URLEncoder.encode("itemCode","UTF-8") + "=" + URLEncoder.encode("PM10", "UTF-8")); /*미세먼지 항목 구분(PM10, PM25), PM10/PM25 모두 조회할 경우 파라미터 생략*/
//URLEncoder.encode : 한글은 URLEncoding 작업을 해줘야 URL에서 정상적으로 전달이 됨
//2. URL 객체 생성(urlBuilder을 이용해서)
URL url = new URL(urlBuilder.toString());
//3. URL 을 이용해서 connection 가져오기
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//4. request의 요청방식(method)랑 header 설정
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
//conn.getResponseCode() : connection을 이용해서 응답코드(response code) 확인 가능
System.out.println("Response code: " + conn.getResponseCode());
//5. 커넥션에서 inputStream 가져옴 -> BufferdReader로 변환
//응답코드에 따른 처리(conn.getInputStream())
BufferedReader rd;
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
//6. 5에서 가져온 스트림으로 데이터 한줄씩 읽기(누적시키기)
//그 rd를 한줄씩 읽어서 line에 누적해서 넣기
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
//7. 사용한 자원(스트림, 커넥션) 정리 : rd 자원 반납, 웹사이트랑 연결도 끊기
rd.close();
conn.disconnect();
//8. 6에서 누적한 결과 확인
// System.out.println(sb.toString());
return sb.toString();
}
}
->