https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15084084

 

기상청_단기예보 ((구)_동네예보) 조회서비스

초단기실황, 초단기예보, 단기((구)동네)예보, 예보버전 정보를 조회하는 서비스입니다. 초단기실황정보는 예보 구역에 대한 대표 AWS 관측값을, 초단기예보는 예보시점부터 6시간까지의 예보를,

www.data.go.kr

데이터명 : 기상청_단기예보 ((구)_동네예보) 조회서비스 상세설명

 

* 예시코드 (최고기온, 최저기온, 하늘 상태, 풍속)

    $timeNow = strToTime(date("Y-m-d H:i:s"));
    $timeTarget = strToTime(date("Y-m-d 03:00:00"));

    if($timeNow > $timeTarget) {
        $baseDate = date("Ymd");
    } else {
        $baseDate = date("Ymd", strToTime(date("Y-m-d 02:00:00"), "-1 day"));
    }
    //인증키
    $serviceKey = "";

    $url = "http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst?serviceKey={$serviceKey}&numOfRows=1000&pageNo=1&base_date={$baseDate}&base_time=0200&nx=73&ny=67&dataType=JSON";
            
    $curl = curl_init();

    curl_setopt_array($curl, array(
    //         CURLOPT_PORT => "80",
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_HTTPHEADER => array(
            "cache-control: no-cache",
            "content-type: text/plain; charset=utf-8"
        ),
    ));

    $response = curl_exec($curl);
    //     $err = curl_error($curl);
    curl_close($curl);

    $responseResult = json_decode($response);

    $items = $responseResult->response->body->items->item;

    $forecast = array();
    for($i=0; $i < count($items); $i++) {
        //기온(최저/최고)
        if($items[$i]->category == "TMN" || $items[$i]->category == "TMX") {
            $forecast[$items[$i]->fcstDate][$items[$i]->category] = $items[$i]->fcstValue;
        }

        //하늘 상태
        if($items[$i]->category == "PTY" && $items[$i]->fcstTime == date("H00")) {
            if($items[$i]->fcstValue == "0") {
                if($items[$i-1]->fcstValue == "1") {
                    $forecast[$items[$i-1]->fcstDate]["SKY"] = '<i class="fa-solid fa-sun" style="font-size:x-large;" title="맑음"></i>';
                } else if($items[$i-1]->fcstValue == "3") {
                    $forecast[$items[$i-1]->fcstDate]["SKY"] = '<i class="fa-solid fa-cloud" style="font-size:x-large;" title="구름많음"></i>';
                } else if($items[$i-1]->fcstValue == "4") {
                    $forecast[$items[$i-1]->fcstDate]["SKY"] = '<i class="fa-solid fa-cloud-sun" style="font-size:x-large" title="흐림"></i>';
                }
            } else if(($items[$i]->fcstValue) == "1") {
                $forecast[$items[$i]->fcstDate]["SKY"] = '<i class="fa-solid fa-umbrella" style="font-size:x-large" title="비"></i>';
            } else if($items[$i]->fcstValue == "2") {
                $forecast[$items[$i]->fcstDate]["SKY"] = '<i class="fa-solid fa-umbrella" style="font-size:x-large" title="비/눈"></i> / <i class="fa-solid fa-snowflake" style="font-size:x-large" title="비/눈"></i>';
            } else if($items[$i]->fcstValue == "3") {
                $forecast[$items[$i]->fcstDate]["SKY"] = '<i class="fa-solid fa-snowflake" style="font-size:x-large" title="눈"></i>';
            } else if($items[$i]->fcstValue == "4") {
                $forecast[$items[$i]->fcstDate]["SKY"] = '<i class="fa-solid fa-cloud-showers-heavy" style="font-size:x-large" title="소나기"></i>';
            }
        }

        //풍속
        if($items[$i]->category == "WSD" && $items[$i]->fcstTime == date("H00")) {
            $forecast[$items[$i]->fcstDate][$items[$i]->category] = $items[$i]->fcstValue;
        }
    }

    $result = array(
        "forecast" => $forecast
    );
    
    echo json_encode($result);

* 가져온 데이터

 

* Jquery (ajax)를 이용해 화면에 뿌리기

    $.ajax({
        type: "POST", 
        url: "", 
        data: $("#mainForm").serialize(),
        dataType: "json",
        success: function(result) {
            //날씨
            var html = '';
            for(var date in result["forecast"]) {
                year = date.substr(0, 4);
                month = date.substr(4, 2);
                day = date.substr(6, 2);
                var fcstDate = year + '-' + month + '-' + day;

                html += '<tr>';
                html += '<td class="text-center">';
                html += fcstDate;
                html += '</td>';
                html += '<td class="text-center">';
                html += result["forecast"][date]["TMN"] + "/" + result["forecast"][date]["TMX"];
                html += '</td>';
                html += '<td class="text-center">';
                html += result["forecast"][date]["WSD"] + "m/s";
                html += '</td>';
                html += '<td class="text-center">';
                html += result["forecast"][date]["SKY"];
                html += '</td>';
                html += '</tr>';
            }

            $("#tblForecast tbody").append(html);
        },
        error: function (request, status, error) {
            alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
        }
    });

 

* 결과값

+ Recent posts