도로기상정보 (수집)
EdgeRSU 장비에서 기상정보를 수집하여 플랫폼 내에 적재하는 기능을 제공합니다.
Last updated
EdgeRSU 장비에서 기상정보를 수집하여 플랫폼 내에 적재하는 기능을 제공합니다.
Last updated
https://service.mqnicrnd5.com/api/v1/rw/collect/prw
10분
HTTPS
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로 성공 여부를 구분합니다.
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);
}
}
}
import requests
import json
def call_api():
access_token = "Bearer <접근 토큰>" # 실제 접근 토큰으로 교체 필요
# 데이터 구조 생성
data = {
"EdgeRsuId": "99370",
"dttm": "20230401201055",
"roadWeather": {
"weatherData": {
"ta": -3.1,
"hm": 17.1,
"pa": 1025.7,
"ws": 10.1,
"wd": 0.1,
"cpsd": 0,
"rn": 0.1,
"statCd": "24"
},
"visibilityData": {
"vs": 11,
"at": -3,
"statCd": "24"
},
"roadSurfaceData": {
"ts": -3.1,
"ft": -24.6,
"wfh": 0.1,
"ilt": 0.1,
"sd": 0.3,
"ip": 17.1,
"st": 3,
"f": 0.5,
"statCd": "24"
}
}
api_url = "https://service.mqnicrnd5.com/api/v1/esi/collect/prw"
headers = {
"Authorization": access_token,
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(api_url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
return response.text
else:
return f"Error: {response.status_code}, Message: {response.text}"
if __name__ == "__main__":
print(call_api())
const axios = require('axios');
async function callAPI() {
const accessToken = 'Bearer <접근 토큰>'; // 실제 토큰으로 교체 필요
const data = {
"EdgeRsuId": "99370",
"dttm": "20230401201055",
"roadWeather": {
"weatherData": {
"ta": -3.1,
"hm": 17.1,
"pa": 1025.7,
"ws": 10.1,
"wd": 0.1,
"cpsd": 0,
"rn": 0.1,
"statCd": "24"
},
"visibilityData": {
"vs": 11,
"at": -3,
"statCd": "24"
},
"roadSurfaceData": {
"ts": -3.1,
"ft": -24.6,
"wfh": 0.1,
"ilt": 0.1,
"sd": 0.3,
"ip": 17.1,
"st": 3,
"f": 0.5,
"statCd": "24"
}
}
const config = {
method: 'post',
url: 'https://service.mqnicrnd5.com/api/v1/esi/collect/prw',
headers: {
'Authorization': accessToken,
'Content-Type': 'application/json'
},
data: data
};
try {
const response = await axios(config);
console.log(response.data);
} catch (error) {
console.error(`Error: ${error.response.status}, Message: ${error.response.data}`);
}
}
callAPI();
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace APICallExample
{
class Program
{
static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
await CallAPI();
}
static async Task CallAPI()
{
var apiUrl = "https://service.mqnicrnd5.com/api/v1/esi/collect/prw";
var accessToken = "Bearer <접근 토큰>"; // 실제 토큰으로 교체 필요
var requestData = new
{
EdgeRsuId = "99370",
dttm = "20230401201055",
roadWeather = new
{
weatherData = new
{
ta = -3.1,
hm = 17.1,
pa = 1025.7,
ws = 10.1,
wd = 0.1,
cpsd = 0,
rn = 0.1,
statCd = "24"
},
visibilityData = new
{
vs = 11,
at = -3,
statCd = "24"
},
roadSurfaceData = new
{
ts = -3.1,
ft = -24.6,
wfh = 0.1,
ilt = 0.1,
sd = 0.3,
ip = 17.1,
st = 3,
f = 0.5,
statCd = "24"
}
}
};
var jsonRequest = JsonSerializer.Serialize(requestData);
var content = new StringContent(jsonRequest, Encoding.UTF8, "application/json");
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "<접근 토큰>"); // 헤더에 인증 정보 추가
try
{
var response = await client.PostAsync(apiUrl, content);
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
catch (HttpRequestException e)
{
Console.WriteLine($"\nException Caught!");
Console.WriteLine($"Message :{e.Message} ");
}
}
}
}