https://www.data.go.kr/index.do
공공데이터 포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase
www.data.go.kr
한국관광공사_관광빅데이터 정보서비스_ GW 데이터를 받아오는 샘플을 만들어 봤다
[JSP] AJAX로 받아오기 예제
const serviceKey = '발급받은 서비스 키값';
const localUrl = 'https://apis.data.go.kr/B551011/DataLabService/metcoRegnVisitrDDList';
const sigunguUrl = 'https://apis.data.go.kr/B551011/DataLabService/locgoRegnVisitrDDList';
const params = new URLSearchParams({
//serviceKey, //인코딩 2번되므로 오류남
numOfRows: 100,
pageNo: 1,
MobileOS: 'ETC',
MobileApp: 'AppTest',
startYmd:'20250101',
endYmd:'20250101',
_type :'json'
});
const loUrl = `\${localUrl}?serviceKey=\${serviceKey}&\${params.toString()}`;
const siUrl = `\${sigunguUrl}?serviceKey=\${serviceKey}&\${params.toString()}`;
async function NumberLocalVisitors(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error('에러 발생:', error);
}
}
let localVistNumData = NumberLocalVisitors(loUrl);
let sigunguVistNumData = NumberLocalVisitors(siUrl);
console.log("localVistNumData ->", localVistNumData);
console.log("sigunguVistNumData ->", sigunguVistNumData);
localVisitNumData 결과값
변수명이 길어보여서 변수명을 localData로 수정함.
sigunguVisitNumData 결과값
변수명이 길어보여 변수명을 sigunguData로 수정함
[JAVA] URLConnecttion연결로 가져오기 예제 (다른데이터임)
@Override
public void getMapInfo() throws Exception {
//LOGGER.info("맵 공공데이터 수집 시작");
//StopWatch stopWatch = new StopWatch();
//stopWatch.start(); // 시간 측정 시작
try {
StringBuilder urlBuilder = new StringBuilder("https://apis.data.go.kr/B551011/KorService1/locationBasedList1"); /* 공공데이터 URL */
//StringBuilder urlBuilder = new StringBuilder("https://apis.data.go.kr/B551011/KorPetTourService/locationBasedList"); /* 반려동물 동반가능 장소 URL (SQL MAP_PET_PLACE로 변경 필요) */
urlBuilder.append("?" + URLEncoder.encode("serviceKey", "UTF-8") + "=Your Service Key"); /* Service Key */
urlBuilder.append("&" + URLEncoder.encode("numOfRows", "UTF-8") + "=" + URLEncoder.encode("10000000", "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("_type", "UTF-8") + "=" + URLEncoder.encode("json", "UTF-8")); /* 타입 */
urlBuilder.append("&" + URLEncoder.encode("listYN", "UTF-8") + "=" + URLEncoder.encode("Y", "UTF-8")); /* */
urlBuilder.append("&" + URLEncoder.encode("arrange", "UTF-8") + "=" + URLEncoder.encode("A", "UTF-8")); /* */
urlBuilder.append("&" + URLEncoder.encode("mapX", "UTF-8") + "=" + URLEncoder.encode("126.981611", "UTF-8")); /* 경도 */
urlBuilder.append("&" + URLEncoder.encode("mapY", "UTF-8") + "=" + URLEncoder.encode("37.568477", "UTF-8")); /* 위도 */
urlBuilder.append("&" + URLEncoder.encode("radius", "UTF-8") + "=" + URLEncoder.encode("2000000", "UTF-8")); /* 반경 */
urlBuilder.append("&" + URLEncoder.encode("contentTypeId", "UTF-8") + "=" + URLEncoder.encode("38", "UTF-8")); /* 12:관광지, 14:문화시설, 15:축제공연행사, 25:여행코스, 28:레포츠, 38:쇼핑, 39:음식점 */
URL url = new URL(urlBuilder.toString());
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setRequestProperty("Content-type", "application/json");
BufferedReader br;
if (urlConnection.getResponseCode() >= 200 && urlConnection.getResponseCode() <= 300) {
br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
} else {
br = new BufferedReader(new InputStreamReader(urlConnection.getErrorStream()));
}
StringBuilder resultBuilder = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
resultBuilder.append(line);
}
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(resultBuilder.toString());
JsonNode itemsNode = rootNode.path("response").path("body").path("items");
if ("\"\"".equals(itemsNode.toString())) {
//LOGGER.info("[정보 없음] 데이터 없음");
return;
}
JsonNode itemNode = itemsNode.path("item");
MapPlaceVO mapPlaceVO = new MapPlaceVO();
for (JsonNode item : itemNode) {
mapPlaceVO.setPlaceId(item.get("contentid").asText());
mapPlaceVO.setPlaceNm(item.get("title").asText());
mapPlaceVO.setPlaceTy(item.get("contenttypeid").asText());
mapPlaceVO.setPlaceAddr1(item.get("addr1").asText());
mapPlaceVO.setPlaceAddr2(item.get("addr2").asText());
mapPlaceVO.setPlaceLat(item.get("mapy").asText());
mapPlaceVO.setPlaceLng(item.get("mapx").asText());
mapPlaceVO.setPlaceTel(item.get("tel").asText());
mapPlaceVO.setPlaceAreaCode(item.get("sigungucode").asText());
mapPlaceVO.setPlaceImg(item.get("firstimage").asText());
mapPlaceVO.setPlaceImgThumb(item.get("firstimage2").asText());
mapPlaceVO.setCpyrhtDivCd(item.get("cpyrhtDivCd").asText());
try {
mapInfoDAO.insertMapInfo(mapPlaceVO);
} catch (Exception e) {
System.err.println("Insert 실패: " + e.getMessage());
}
}
} finally {
//stopWatch.stop(); // 시간 측정 종료
//long durationMillis = stopWatch.getTotalTimeMillis();
//long hours = durationMillis / (1000 * 60 * 60);
//long minutes = (durationMillis % (1000 * 60 * 60)) / (1000 * 60);
//long seconds = (durationMillis % (1000 * 60)) / 1000;
//long millis = durationMillis % 1000;
//System.out.printf("getMapInfo() 실행 시간: %02d:%02d:%02d.%03d\n", hours, minutes, seconds, millis);
}
//LOGGER.info("맵 공공데이터 수집 종료");
}
사용방법
https://www.data.go.kr/index.do
위 url에 들어가 가입한다.
메인화면 또는 데이터 찾기에서 원하는 데이터 검색한다.
나는 한국관광 데이터들 필요
json을 지원하는 오픈 api에서 활용신청 클릭
양식에 맞게 작성후 활용신청
마이페이지 클릭하면 아래와 같은 화면이 나옴
마이페이지 -> 데이터 활용 -> Open API -> 활용신청 현황 클릭
자세한 사용설명은 참고문서를 읽어보고
요청 변수에 데이터를 설정해 원하는 데이터를 볼 수 있다.
xml파일로 전송이 되었는데 참고문서에 요청 파라미터에
&_type=json을 추가해주면 json타입으로 받을 수 있다해서 넣어보았다.
데이터마다 다른데 참고문서를 잘 읽어보자
보통 json을 바로주는 데이터들이 많다.
이렇게 넣어주면 아래처럼 잘 나온다.
화면이 조금 다를 수 있는데
이유는 구글마켓에서 json데이터를 이쁘게 받아오는
JSON Beautifier설치 해서 그렇다
결과...
이제 잘나오는것을 확인했으니
맨위로 올라가
js로 ajax를 이용해 받아와보자
'API사용' 카테고리의 다른 글
[Mapbox] 맵 박스 3D 건물 세우기 예제 (0) | 2025.03.13 |
---|---|
[Mapbox] 맵 박스 기본 사용법 및 셋팅하기 (0) | 2025.03.13 |
CoolSms (문자 보내기api) 사용 방법 (0) | 2023.06.24 |
Chart.Js(라이브러리) 사용 방법 (0) | 2023.06.21 |
NaverMap (지도api) 사용방법 (0) | 2023.06.21 |