Exemplo n.º 1
0
        public string GetResultXml(TrafficInfoDirection direction, string urlParams)
        {
            TrafficInfoSettingsModel settings = GetSettings;
            TrafficInfoApiUrl        apiUrl   = settings.ApiUrlList.FirstOrDefault <TrafficInfoApiUrl>(a => a.name.Equals(direction.ToString()));
            string reqUrl = $"{apiUrl.url}?{urlParams}";

            string result = string.Empty;

            try
            {
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(reqUrl);
                req.Method    = "GET";
                req.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11";
                req.Accept    = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                req.Timeout   = 10000;                      // 10초만 기다린다. ms 이기 때문에 10초는 10000ms 이다.
                using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
                {
                    using (StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.UTF8))
                    {
                        result = sr.ReadToEnd();
                    }
                }
            }
            catch (Exception ex)
            {
                string exStr = ex.ToString();
            }

            return(result);
        }
Exemplo n.º 2
0
        public ResultXmlWithUpdateModel GetResultXmlWithUpdate(TrafficInfoDirection direction, string xmlPath, string urlParams)
        {
            ResultXmlWithUpdateModel rtn = new ResultXmlWithUpdateModel(false, ResultXmlWithUpdateErrorKind.None, string.Empty);

            TrafficInfoSettingsModel settings = GetSettings;

            // 혹시라도 xmlPath변수에 저장 디렉토리가 있는지 확인해서 없으면 연결해준다.
            if (xmlPath.IndexOf(settings.ApiXmlPath) == -1)
            {
                xmlPath = Path.Combine(settings.ApiXmlPath, xmlPath);
                // 각 API 네이밍별로 디렉토리가 구성되도록 해야하기 때문에
                // 디렉토리 명을 가져와서 있는지 확인하고 없으면 만든다.
                string tmpPathDir = Path.GetDirectoryName(xmlPath);
                if (!Directory.Exists(tmpPathDir))
                {
                    Directory.CreateDirectory(tmpPathDir);
                }
            }

            XmlDocument xdRtn   = new XmlDocument();
            XmlHandling xmlHand = new XmlHandling();

            string xml = GetResultXml(direction, urlParams);

            if (!string.IsNullOrEmpty(xml))                  // 통신해서 가져온 내용이 있으면
            {
                // 가져온 XML이 이상한 놈인지 아닌지 검사한다
                Tuple <bool, ResultXmlWithUpdateErrorKind, string> tplAvailable = XmlAvailableCheck(xml);
                if (tplAvailable.Item1 == false)
                {
                    rtn = new ResultXmlWithUpdateModel(false, tplAvailable.Item2, tplAvailable.Item3);
                }
                else
                {
                    if (File.Exists(xmlPath))                                   // 파일이 있는지 찾아서 있으면
                    {
                        // 파일 내용을 받아온 xml을 로컬 xml 파일에 갱신한다.
                        XmlDocument xdResult = xmlHand.GetXmlDocByString(xml);
                        XmlDocument xdTarget = xmlHand.GetXmlDocByFilePath(xmlPath);
                        xdRtn = xmlHand.GetXmlDocWithUpdateProceed(xmlPath, xdTarget, xdResult);
                    }
                    else
                    {
                        // XML 파일이 없으면 생성하고 거기다가 갱신한다.
                        XmlDocument xdResult   = xmlHand.GetXmlDocByString(xml);
                        XmlNode     resultResp = xdResult.SelectSingleNode("//response");

                        XmlDocument    xdTmp    = new XmlDocument();
                        XmlDeclaration xDeclare = xdTmp.CreateXmlDeclaration("1.0", "UTF-8", null);
                        xdTmp.AppendChild(xDeclare);

                        XmlNode responselist = xdTmp.CreateElement("responselist");
                        responselist.InnerXml = resultResp.OuterXml;

                        xdTmp.AppendChild(responselist);
                        xdTmp.Save(xmlPath);

                        // 리턴 될 XmlDocument에도 전달해준다
                        xdRtn.LoadXml(xml);
                    }

                    rtn = new ResultXmlWithUpdateModel(true, ResultXmlWithUpdateErrorKind.None, xdRtn.OuterXml);
                }
            }
            else
            {
                rtn = new ResultXmlWithUpdateModel(false, ResultXmlWithUpdateErrorKind.Empty, string.Empty);
            }

            return(rtn);
        }