도로기상정보 (수집)

EdgeRSU 장비에서 기상정보를 수집하여 플랫폼 내에 적재하는 기능을 제공합니다.

1️. 실시간도로환경 기상정보 수집 (PostRoadWeather)

요청 URL

https://service.mqnicrnd5.com/api/v1/rw/collect/prw

연계 주기

10분

프로토콜

HTTPS

HTTP 메서드

POST

데이터 포맷

참고사항

API를 요청할 때 다음 예와 같이 HTTP 요청 헤더에 접근 토큰(Access Token) 을 추가해야 합니다. 접근 토큰 앞에 "Bearer " 문자열을 추가해야 한다는 점에 주의하세요.

> POST /api/v1/rw/collect/prw
> Host: service.mqnicrnd5.com
> User-Agent: curl/7.64.1
> Accept: */*
> Authorization: Bearer <접근 토큰>

요청 예시

curl --location 'https://service.mqnicrnd5.com/api/v1/rw/collect/prw
--header 'Authorization: Bearer <접근 토큰>' \
--header 'Content-Type: application/json' \
--data '{
        "mecId": "RSU00001",
        "dttm": "20240703105500",
        "roadWeather": {
            "weatherData": {
                "ta": -3.1,
                "hm": 17.1,
                "pa": 1025.7,
                "ws": 10.1,
                "wd": 0.1,
                "cpsd": 0.0,
                "rn": 0.1,
                "statCd": "24"
            },
            "visibilityData": {
                "vs": 11.0,
                "at": -3.0,
                "statCd": "00"
            },
            "roadSurfaceData": {
                "ts": -3.1,
                "ft": -24.6,
                "wfh": 0.1,
                "ilt": 0.1,
                "sd": 0.3,
                "ip": 17.1,
                "st": 99,
                "f": 0.5,
                "statCd": "00"
            }
        }
}'

응답 파라미터

수집 API의 경우 별도 응답 파라미터가 아닌 HTTP Status Code로 성공 여부를 구분합니다.

Status Code
설명

200

성공

400

요청 파라미터 검증 실패

401

인증 실패

500

서버 오류

{ 
  id: '7a02096f-5d6c-4057-8cc7-1f0b2e8eaaa1',
  status: 'OK',
  code: 200,
  header: 
   [ { key: 'Date', value: 'Tue, 26 Mar 2024 07:49:01 GMT' },
     { key: 'Content-Type', value: 'text/plain;charset=ISO-8859-1' },
     { key: 'Content-Length', value: '2' },
     { key: 'Connection', value: 'keep-alive' },
     { key: 'x-envoy-upstream-service-time', value: '15' },
     { key: 'server', value: 'istio-envoy' },
     { key: 'cache-control',
       value: 'no-cache, no-store, max-age=0, must-revalidate' },
     { key: 'pragma', value: 'no-cache' },
     { key: 'expires', value: '0' },
     { key: 'x-content-type-options', value: 'nosniff' },
     { key: 'x-frame-options', value: 'DENY' },
     { key: 'x-xss-protection', value: '0' },
     { key: 'referrer-policy', value: 'no-referrer' } ],
  stream: { type: 'Buffer', data: [ 79, 75 ] },
  cookie: [],
  responseTime: 26,
  responseSize: 2 
}
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import org.json.JSONObject; // JSON 라이브러리 추가 필요

public class CallAPI {

    public static void main(String[] args) {
        String accessToken = "Bearer <접근 토큰>"; // 실제 접근 토큰으로 교체 필요

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("EdgeRsuId", "99370");
        jsonObject.put("dttm", "20230401201055");

        JSONObject roadWeather = new JSONObject();
        
        JSONObject weatherData = new JSONObject();
        weatherData.put("ta", -3.1);
        weatherData.put("hm", 17.1);
        weatherData.put("pa", 1025.7);
        weatherData.put("ws", 10.1);
        weatherData.put("wd", 0.1);
        weatherData.put("cpsd", 0);
        weatherData.put("rn", 0.1);
        weatherData.put("statCd", "24");
        
        JSONObject visibilityData = new JSONObject();
        visibilityData.put("vs", 11);
        visibilityData.put("at", -3);
        visibilityData.put("statCd", "24");
        
        JSONObject roadSurfaceData = new JSONObject();
        roadSurfaceData.put("ts", -3.1);
        roadSurfaceData.put("ft", -24.6);
        roadSurfaceData.put("wfh", 0.1);
        roadSurfaceData.put("ilt", 0.1);
        roadSurfaceData.put("sd", 0.3);
        roadSurfaceData.put("ip", 17.1);
        roadSurfaceData.put("st", 3);
        roadSurfaceData.put("f", 0.5);
        roadSurfaceData.put("statCd", "24");

        roadWeather.put("weatherData", weatherData);
        roadWeather.put("visibilityData", visibilityData);
        roadWeather.put("roadSurfaceData", roadSurfaceData);

        jsonObject.put("roadWeather", roadWeather);
        
        String apiURL = "https://service.mqnicrnd5.com/api/v1/esi/collect/prw"; // POST 요청 URL

        String responseBody = post(apiURL, jsonObject.toString(), accessToken);

        System.out.println(responseBody);
    }

    private static String post(String apiUrl, String jsonInputString, String accessToken) {
        HttpURLConnection con = connect(apiUrl);
        try {
            con.setRequestMethod("POST");
            con.setRequestProperty("Authorization", accessToken);
            con.setRequestProperty("Content-Type", "application/json; utf-8");
            con.setRequestProperty("Accept", "application/json");
            con.setDoOutput(true);

            try(OutputStream os = con.getOutputStream()) {
                byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
                os.write(input, 0, input.length);           
            }

            int responseCode = con.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) { // 정상 호출
                return readBody(con.getInputStream());
            } else { // 오류 발생
                return readBody(con.getErrorStream());
            }
        } catch (IOException e) {
            throw new RuntimeException("API 호출 중 오류 발생: ", e);
        } finally {
            con.disconnect();
        }
    }


    private static HttpURLConnection connect(String apiUrl) {
        try {
            URL url = new URL(apiUrl);
            return (HttpURLConnection) url.openConnection();
        } catch (MalformedURLException e) {
            throw new RuntimeException("API URL이 잘못되었습니다. : " + apiUrl, e);
        } catch (IOException e) {
            throw new RuntimeException("연결이 실패했습니다. : " + apiUrl, e);
        }
    }


    private static String readBody(InputStream body) {
        InputStreamReader streamReader = new InputStreamReader(body);


        try (BufferedReader lineReader = new BufferedReader(streamReader)) {
            StringBuilder responseBody = new StringBuilder();


            String line;
            while ((line = lineReader.readLine()) != null) {
                responseBody.append(line);
            }


            return responseBody.toString();
        } catch (IOException e) {
            throw new RuntimeException("API 응답을 읽는 데 실패했습니다.", e);
        }
    }
}

Last updated