예제 #1
0
        /*
         * http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty?
         *         numOfRows=10
         *         &pageNo=1
         *         &stationName=이도동
         *         &dataTerm=DAILY
         *         &ver=1.3
         *         &ServiceKey=73Jjl5lZRvBRKkGsPnGmZ7EL9JtwsWNi3hhCIN8cpVJzMdRRgyzntwz2lHmTKeR1tp7NWzoihNGGazcDEFgh8w
         *         &_returnType=json
         *
         */
        private static async Task <AirDataResult> GetAirMeasure(string url, string stationName)
        {
            string page = url +
                          "numOfRows=10" +
                          "&pageNo=1" +
                          "&stationName=" + stationName +
                          "&dataTerm=DAILY" +
                          "&ver=1.3" +
                          "&ServiceKey=" + ServiceKeyForAir +
                          "&_returnType=json";

            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                using (HttpResponseMessage response = await client.GetAsync(page))
                    using (HttpContent content = response.Content)
                    {
                        var stringResult = await content.ReadAsStringAsync();

                        AirDataResult result = JsonConvert.DeserializeObject <AirDataResult>(stringResult);
                        return(result);
                    }
            }
        }
예제 #2
0
        /*
         * http://openapi.airkorea.or.kr/openapi/services/rest/MsrstnInfoInqireSvc/getTMStdrCrdnt?
         * umdName=일도이동
         * &pageNo=1
         * &numOfRows=10
         * &ServiceKey=73Jjl5lZRvBRKkGsPnGmZ7EL9JtwsWNi3hhCIN8cpVJzMdRRgyzntwz2lHmTKeR1tp7NWzoihNGGazcDEFgh8w%3D%3D
         * &_returnType=json
         *
         */
        private static async Task <AirDataResult> GetAirData(string url, string umd)
        {
            JusoResult jibunJuso = await GetJibunJuso(umd);

            string page = url +
                          "umdName=" + UtilManager.GetUmdFromAddress(jibunJuso.results.juso[0].jibunAddr) +
                          "&pageNo=1" +
                          "&numOfRows=10" +
                          "&ServiceKey=" + ServiceKeyForAir +
                          "&_returnType=json";

            Console.WriteLine("GetAirData says: {0}", page);

            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                using (HttpResponseMessage response = await client.GetAsync(page))
                    using (HttpContent content = response.Content)
                    {
                        // TmX, TmY 조회
                        var stringResult = await content.ReadAsStringAsync();

                        AirDataMetaResult resultTmXY = JsonConvert.DeserializeObject <AirDataMetaResult>(stringResult);

                        // 측정소명 조회
                        AirDataMetaResult resultStationName = await GetStationName("http://openapi.airkorea.or.kr/openapi/services/rest/MsrstnInfoInqireSvc/getNearbyMsrstnList?",
                                                                                   resultTmXY.list[0].tmX, resultTmXY.list[0].tmY);

                        // 측정값 조회
                        AirDataResult result = await GetAirMeasure("http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty?",
                                                                   resultStationName.list[0].stationName);

                        return(result);
                    }
            }
        }
예제 #3
0
        private WeatherCrawlerData GetAssembledWCD(string address, string nx, string ny, bool isExistCD, List <CurrentData> existCD)
        {
            // 데이터 수집
            var resultForForecastGrib  = RunHCMForForecastGrib(nx, ny);
            var resultForAirData       = RunHCMAirData(UtilManager.GetUmdFromAddress(address));
            var resultForForecastTime  = RunHCMForForecastTime(nx, ny);
            var resultForForecastSpace = RunHCMForForecastSpace(nx, ny);

            // 데이터 생성
            WeatherCrawlerData wcd = new WeatherCrawlerData();

            wcd.address = address;
            wcd.nx      = Int32.Parse(nx);
            wcd.ny      = Int32.Parse(ny);

            // currentData
            ForecastGribResult reassembledFGR = null;

            try
            {
                reassembledFGR = UtilManager.ReassembleDataForForecastGrib(resultForForecastGrib.Result);
            }
            catch (System.AggregateException e)
            {
                Console.WriteLine("ForecastGribResult AggregateException : {0}", e.Message);
                L4Logger l4Logger = new L4Logger("common.log");
                l4Logger.Add("ForecastGribResult System.AggregateException!");
                l4Logger.Close();
                return(null);
            }

            if (null == reassembledFGR)
            {
                Console.WriteLine("reassembledFGR_Null_Exception");
                L4Logger l4Logger = new L4Logger("common.log");
                l4Logger.Add("reassembledFGR Null Exception!");
                l4Logger.Close();
                return(null);
            }
            CurrentData tmpCD = new CurrentData();

            tmpCD.insertDate       = UtilManager.GetNowDateTime();
            tmpCD.weather          = new Weather();
            tmpCD.weather.baseDate = reassembledFGR.response.body.items.item[0].baseDate.ToString();
            tmpCD.weather.baseTime = reassembledFGR.response.body.items.item[0].baseTime;
            tmpCD.weather.pty      = UtilManager.GetObsrValueFromCategory(reassembledFGR, "PTY");
            tmpCD.weather.reh      = UtilManager.GetObsrValueFromCategory(reassembledFGR, "REH");
            tmpCD.weather.rn1      = UtilManager.GetObsrValueFromCategory(reassembledFGR, "RN1");
            tmpCD.weather.sky      = UtilManager.GetObsrValueFromCategory(reassembledFGR, "SKY");
            tmpCD.weather.t1h      = UtilManager.GetObsrValueFromCategory(reassembledFGR, "T1H");

            AirDataResult adr = null;

            try
            {
                adr = resultForAirData.Result;
            }
            catch (System.AggregateException e)
            {
                Console.WriteLine("AggregateException : {0}", e.Message);
                L4Logger l4Logger = new L4Logger("common.log");
                l4Logger.Add("System.AggregateException!");
                l4Logger.Close();
                return(null);
            }

            if (null == adr)
            {
                Console.WriteLine("adr is Null");
                L4Logger l4Logger = new L4Logger("common.log");
                l4Logger.Add("adr is Null Exception!");
                l4Logger.Close();
                return(null);
            }

            tmpCD.air          = new Air();
            tmpCD.air.dataTime = adr.list[0].dataTime;
            if ("-" == adr.list[0].so2Value)
            {
                tmpCD.air.so2Value = -1;
            }
            else
            {
                tmpCD.air.so2Value = Double.Parse(adr.list[0].so2Value);
            }
            if ("-" == adr.list[0].coValue)
            {
                tmpCD.air.coValue = -1;
            }
            else
            {
                tmpCD.air.coValue = Double.Parse(adr.list[0].coValue);
            }
            if ("-" == adr.list[0].o3Value)
            {
                tmpCD.air.o3Value = -1;
            }
            else
            {
                tmpCD.air.o3Value = Double.Parse(adr.list[0].o3Value);
            }
            if ("-" == adr.list[0].no2Value)
            {
                tmpCD.air.no2Value = -1;
            }
            else
            {
                tmpCD.air.no2Value = Double.Parse(adr.list[0].no2Value);
            }
            if ("-" == adr.list[0].pm10Value)
            {
                tmpCD.air.pm10Value = -1;
            }
            else
            {
                tmpCD.air.pm10Value = Double.Parse(adr.list[0].pm10Value);
            }
            if ("-" == adr.list[0].pm25Value)
            {
                tmpCD.air.pm25Value = -1;
            }
            else
            {
                tmpCD.air.pm25Value = Double.Parse(adr.list[0].pm25Value);
            }

            wcd.currentData = new List <CurrentData>();
            if (isExistCD)
            {
                wcd.currentData = existCD;
            }
            wcd.currentData.Add(tmpCD);

            // twoHour
            int[]  fctTimeTable = { 3, 2, 4, 3, 2, 4, 3, 2, 4, 3, 2, 4, 3, 2, 4, 3, 2, 4, 3, 2, 4, 3, 2, 4 };
            string ftsrHour     = UtilManager.GetFTSRHour();
            int    fctTimeIndex = fctTimeTable[Int32.Parse(ftsrHour)];

            ForecastTimeSpaceResult ftsr = null;

            try
            {
                ftsr = resultForForecastTime.Result;
            }
            catch (System.AggregateException e)
            {
                Console.WriteLine("resultForForecastTime AggregateException : {0}", e.Message);
                L4Logger l4Logger = new L4Logger("common.log");
                l4Logger.Add("resultForForecastTime System.AggregateException!");
                l4Logger.Close();
                return(null);
            }

            if (null == ftsr)
            {
                Console.WriteLine("ftsr is Null");
                L4Logger l4Logger = new L4Logger("common.log");
                l4Logger.Add("ftsr is Null Exception!");
                l4Logger.Close();
                return(null);
            }
            Fcst tmpFcst = new Fcst();

            tmpFcst.insertDate = UtilManager.GetNowDateTime();

            // twoHour - 1Hour
            string startDateTime = UtilManager.GetStartDateTime(ftsr);
            string startDate     = startDateTime.Substring(0, 8);
            string startTime     = startDateTime.Substring(8, 4);

            Item2 tmpItem = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, startDate, startTime, "PTY");

            tmpFcst.weather = new List <FcstWeather>();
            FcstWeather tmpFW = new FcstWeather();

            tmpFW.fcstDate = tmpItem.fcstDate.ToString();
            tmpFW.fcstTime = tmpItem.fcstTime.ToString();
            tmpFW.pty      = tmpItem.fcstValue;
            tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, startDate, startTime, "RN1");
            tmpFW.rn1      = tmpItem.fcstValue;
            tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, startDate, startTime, "SKY");
            tmpFW.sky      = tmpItem.fcstValue;
            tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, startDate, startTime, "T1H");
            tmpFW.t1h      = tmpItem.fcstValue;
            tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, startDate, startTime, "REH");
            tmpFW.reh      = tmpItem.fcstValue;
            tmpFcst.weather.Add(tmpFW);

            // twoHour - 2Hour
            string startDatePlusOneHour = UtilManager.GetStartDateTimePlusOneHour(startDateTime);
            string plusOneHourDate      = startDatePlusOneHour.Substring(0, 8);
            string plusOneHourTime      = startDatePlusOneHour.Substring(8, 4);

            tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusOneHourDate, plusOneHourTime, "PTY");
            tmpFW          = new FcstWeather();
            tmpFW.fcstDate = tmpItem.fcstDate.ToString();
            tmpFW.fcstTime = tmpItem.fcstTime.ToString();
            tmpFW.pty      = tmpItem.fcstValue;
            tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusOneHourDate, plusOneHourTime, "RN1");
            tmpFW.rn1      = tmpItem.fcstValue;
            tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusOneHourDate, plusOneHourTime, "SKY");
            tmpFW.sky      = tmpItem.fcstValue;
            tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusOneHourDate, plusOneHourTime, "T1H");
            tmpFW.t1h      = tmpItem.fcstValue;
            tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusOneHourDate, plusOneHourTime, "REH");
            tmpFW.reh      = tmpItem.fcstValue;
            tmpFcst.weather.Add(tmpFW);

            // twoHour - 3Hour
            if (3 <= fctTimeIndex)
            {
                string startDatePlusTwoHour = UtilManager.GetStartDateTimePlusTwoHour(startDateTime);
                string plusTwoHourDate      = startDatePlusTwoHour.Substring(0, 8);
                string plusTwoHourTime      = startDatePlusTwoHour.Substring(8, 4);

                tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusTwoHourDate, plusTwoHourTime, "PTY");
                tmpFW          = new FcstWeather();
                tmpFW.fcstDate = tmpItem.fcstDate.ToString();
                tmpFW.fcstTime = tmpItem.fcstTime.ToString();
                tmpFW.pty      = tmpItem.fcstValue;
                tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusTwoHourDate, plusTwoHourTime, "RN1");
                tmpFW.rn1      = tmpItem.fcstValue;
                tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusTwoHourDate, plusTwoHourTime, "SKY");
                tmpFW.sky      = tmpItem.fcstValue;
                tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusTwoHourDate, plusTwoHourTime, "T1H");
                tmpFW.t1h      = tmpItem.fcstValue;
                tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusTwoHourDate, plusTwoHourTime, "REH");
                tmpFW.reh      = tmpItem.fcstValue;
                tmpFcst.weather.Add(tmpFW);
            }

            // twoHour - 4Hour
            if (4 == fctTimeIndex)
            {
                string startDatePlusThreeHour = UtilManager.GetStartDateTimePlusThreeHour(startDateTime);
                string plusThreeHourDate      = startDatePlusThreeHour.Substring(0, 8);
                string plusThreeHourTime      = startDatePlusThreeHour.Substring(8, 4);

                tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusThreeHourDate, plusThreeHourTime, "PTY");
                tmpFW          = new FcstWeather();
                tmpFW.fcstDate = tmpItem.fcstDate.ToString();
                tmpFW.fcstTime = tmpItem.fcstTime.ToString();
                tmpFW.pty      = tmpItem.fcstValue;
                tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusThreeHourDate, plusThreeHourTime, "RN1");
                tmpFW.rn1      = tmpItem.fcstValue;
                tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusThreeHourDate, plusThreeHourTime, "SKY");
                tmpFW.sky      = tmpItem.fcstValue;
                tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusThreeHourDate, plusThreeHourTime, "T1H");
                tmpFW.t1h      = tmpItem.fcstValue;
                tmpItem        = UtilManager.GetFcstWeatherFromTimeNCategory(ftsr, plusThreeHourDate, plusThreeHourTime, "REH");
                tmpFW.reh      = tmpItem.fcstValue;
                tmpFcst.weather.Add(tmpFW);
            }

            wcd.twoHour = tmpFcst;

            // tomorrow
            ftsr = resultForForecastSpace.Result;

            if (null == ftsr)
            {
                Console.WriteLine("resultForForecastSpace.Result is null");
                L4Logger l4Logger = new L4Logger("common.log");
                l4Logger.Add("resultForForecastSpace.Result is null!");
                l4Logger.Close();
                return(null);
            }

            Fcst2 tmpFcst2 = new Fcst2();

            tmpFcst2.insertDate = UtilManager.GetNowDateTime();

            string tomorrowDate = UtilManager.GetTomorrowDate();

            List <Item2> tmpItemsPTY = UtilManager.GetFcstSpaceFromDateNCategory(ftsr, tomorrowDate, "PTY");

            if (null == tmpItemsPTY)
            {
                return(null);
            }
            List <Item2> tmpItemsR06 = UtilManager.GetFcstSpaceFromDateNCategory(ftsr, tomorrowDate, "R06");

            if (null == tmpItemsR06)
            {
                return(null);
            }
            List <Item2> tmpItemsSKY = UtilManager.GetFcstSpaceFromDateNCategory(ftsr, tomorrowDate, "SKY");

            if (null == tmpItemsSKY)
            {
                return(null);
            }
            List <Item2> tmpItemsT3H = UtilManager.GetFcstSpaceFromDateNCategory(ftsr, tomorrowDate, "T3H");

            if (null == tmpItemsT3H)
            {
                return(null);
            }
            List <Item2> tmpItemsREH = UtilManager.GetFcstSpaceFromDateNCategory(ftsr, tomorrowDate, "REH");

            if (null == tmpItemsREH)
            {
                return(null);
            }

            tmpFcst2.weather = new List <FcstWeather2>();
            for (int i = 0; i < tmpItemsPTY.Count; i++)
            {
                FcstWeather2 tmpFW2 = new FcstWeather2();
                tmpFW2.fcstDate = tmpItemsPTY[i].fcstDate;
                tmpFW2.fcstTime = tmpItemsPTY[i].fcstTime;
                tmpFW2.pty      = tmpItemsPTY[i].fcstValue;
                if (0 == i % 2)
                {
                    tmpFW2.r06 = tmpItemsR06[i / 2].fcstValue;
                }
                tmpFW2.sky = tmpItemsSKY[i].fcstValue;
                tmpFW2.t3h = tmpItemsT3H[i].fcstValue;
                tmpFW2.reh = tmpItemsREH[i].fcstValue;
                tmpFcst2.weather.Add(tmpFW2);
            }

            wcd.tomorrow = tmpFcst2;

            // afterTomorrow
            tmpFcst2            = new Fcst2();
            tmpFcst2.insertDate = UtilManager.GetNowDateTime();
            string afterTomorrowDate = UtilManager.GetAfterTomorrowDate();

            tmpItemsPTY = UtilManager.GetFcstSpaceFromDateNCategory(ftsr, afterTomorrowDate, "PTY");
            tmpItemsR06 = UtilManager.GetFcstSpaceFromDateNCategory(ftsr, afterTomorrowDate, "R06");
            tmpItemsSKY = UtilManager.GetFcstSpaceFromDateNCategory(ftsr, afterTomorrowDate, "SKY");
            tmpItemsT3H = UtilManager.GetFcstSpaceFromDateNCategory(ftsr, afterTomorrowDate, "T3H");
            tmpItemsREH = UtilManager.GetFcstSpaceFromDateNCategory(ftsr, afterTomorrowDate, "REH");

            tmpFcst2.weather = new List <FcstWeather2>();
            for (int i = 0; i < tmpItemsPTY.Count; i++)
            {
                FcstWeather2 tmpFW2 = new FcstWeather2();
                tmpFW2.fcstDate = tmpItemsPTY[i].fcstDate;
                tmpFW2.fcstTime = tmpItemsPTY[i].fcstTime;
                tmpFW2.pty      = tmpItemsPTY[i].fcstValue;
                if (0 == i % 2)
                {
                    tmpFW2.r06 = tmpItemsR06[i / 2].fcstValue;
                }
                tmpFW2.sky = tmpItemsSKY[i].fcstValue;
                tmpFW2.t3h = tmpItemsT3H[i].fcstValue;
                tmpFW2.reh = tmpItemsREH[i].fcstValue;
                tmpFcst2.weather.Add(tmpFW2);
            }

            wcd.afterTomorrow = tmpFcst2;

            return(wcd);
        }