다들 아시다시피 구글 날씨 OpenApi입니다. OpenAPI는 XML로 이루어져 있습니다. 그래서 XML document로 읽어들이면 됩니다. XML의 각 속성은 날씨에 대한 정보가 들어있어서 읽어와 화면으로 출력하면 됩니다. 간단쓰~+ㅇ+
 < WPF로 개발하였습니다 >

구글 XML 주소(?) : http://www.google.co.kr/ig/api?weather=suwon%20 
이 주소를 읽어들이면 됩니다.


                     < XML 주소 실행화면 >

 - 위에서 말했다시피, 각 속성에 날씨정보들이 들어있죠? 이걸 한번 간지(?)나게 바꾸도록 하겠습니다 ㅋㅋ




                             
                                    <프로그램 실행화면 - 저 단순한 XML이 요렇게 변함!!! >
l  초기 로드시에 지역을 area[] 로 선언 후 각 지역(경기도_가평군", "경기도_고양시 등)을 초기값을 해준다.
   그리고, AreadComboBox에 바인딩한다.

String headerURL = @"http://www.google.co.kr/";

AreaCombo.ItemsSource = area; //area[] 배열을 바인딩 시켜준다.

String City = "gapyeong";

GetWeather(City);             //지역에 따른 날씨를 보여주는 함수

AreaCombo.Text = "경기도_가평군";

 

l  Image Url 주소를 BitmapImage로 바꿔주는 함수

public BitmapImage LoadImage(string url)   //Image URL -> Bitmap으로..

{

   try

   {

        if (string.IsNullOrEmpty(url))

          return null;

 

        WebClient wc = new WebClient();

        url = headerURL + url;

        Byte[] MyData = wc.DownloadData(url);

        wc.Dispose();

        BitmapImage bimgTemp = new BitmapImage();

        bimgTemp.BeginInit();

        bimgTemp.StreamSource = new MemoryStream(MyData);

        bimgTemp.EndInit();

        return bimgTemp;

    }

    catch

    {

        return null;

    }

}

 

l  지역에 따른 날씨를 보여주는 함수이다.

private void GetWeather(string City)

{

   WebClient wc = new WebClient();

String buffer = wc.DownloadString(String.Format("{0}ig/api?weather={1}%20", headerURL, City)); //요청URL에 따른 요청변수를 넣어준다.

   wc.Dispose();

 

   StringReader sr = new StringReader(buffer);

//String Reader 선언 후 buffer를 읽어준다.

   XmlDocument doc = new XmlDocument();

   doc.Load(sr); //sr을 로드시켜준다.

   sr.Close();  //Reader를 닫는다.

 

   XmlNode currentNode = doc.SelectSingleNode("xml_api_reply/weather/current_conditions");  //현재 날씨 Node 선언

   XmlNode forecastNode =  doc.SelectSingleNode("xml_api_reply/weather/forecast_information");  //예보 날씨

   ///각각의 항목들에 대한 속성을 선언시켜준다.

   XmlAttribute date = forecastNode.SelectSingleNode("forecast_date").Attributes["data"];//날짜

   XmlAttribute temp = currentNode.SelectSingleNode("temp_c").Attributes["data"];        //온도

   XmlAttribute wind = currentNode.SelectSingleNode("wind_condition").Attributes["data"];//바람

   XmlAttribute condition = currentNode.SelectSingleNode("condition").Attributes["data"];//날씨

  XmlAttribute humidity = currentNode.SelectSingleNode("humidity").Attributes["data"];  //습도

  XmlAttribute icon = currentNode.SelectSingleNode("icon").Attributes["data"];          //아이콘

 

  //각각의 속성들을 레이블에 대입시킴

  label13.Content = date.Value.ToString();

  label16.Content = temp.Value.ToString() + "";

  label15.Content = wind.Value.ToString();

  label14.Content = condition.Value.ToString();

  label17.Content = humidity.Value.ToString();

  CurrentImage.Source = LoadImage(icon.Value.ToString());

 

  XmlNode forecastconNode = doc.SelectSingleNode("xml_api_reply/weather");

string[] InDay = new string[4];  //현재 일(日)을 담을 배열 선언

  string[] InLow = new string[4];  //현재 최고 날씨를 담을 배열 선언

  string[] InHigh = new string[4]; //현재 최저 날씨를 담을 배열 선언

  string[] InIcon = new string[4]; //날씨 아이콘을 담을  배열 선언

  string[] InCondition = new string[4];//현재 날씨상태를 담을 배열 선언

  int cnt = 0;

foreach (XmlNode node in forecastconNode.SelectNodes("forecast_conditions"))

  {

      XmlAttribute day = node.SelectSingleNode("day_of_week").Attributes["data"];      //요일               

      XmlAttribute low = node.SelectSingleNode("low").Attributes["data"];              //최저온도

      XmlAttribute high = node.SelectSingleNode("high").Attributes["data"];            //최고온도

      XmlAttribute icons = node.SelectSingleNode("icon").Attributes["data"];           //날씨 아이콘

      XmlAttribute conditions = node.SelectSingleNode("condition").Attributes["data"]; //조건

 

     /// 각각의 항목을 배열에 담는다.

      InDay[cnt] = day.Value.ToString() + "요일";

      InLow[cnt] = "최저:" + low.Value.ToString() + "";

      InHigh[cnt] = "최고:" + high.Value.ToString() + "";

      InIcon[cnt] = icons.Value.ToString();

      InCondition[cnt] = conditions.Value.ToString();

if (cnt == 0)  //카운트가 0일 때

      {

          //LoadImage함수를 이용해 날씨 아이콘을 나타낸다.

          ForecastImage1.Source = LoadImage(InIcon[cnt].ToString());

          //각각의 배열을 레이블에 대입시킨다.

          label20.Content = InDay[cnt];

          label1.Content = InLow[cnt];

          label2.Content = InHigh[cnt];

          label3.Content = InCondition[cnt];

      }

     //else if를 이용하여 cnt 1,2,3 일때도 똑같이 해준다.

}


<소스 첨부합니다.>

'programming > Open API' 카테고리의 다른 글

[WPF] 구글 날씨 OpenApi  (3) 2011.07.28
옥답OpenApi 두 번째 (지역 뉴스 정보)  (0) 2010.08.19
옥답 OpenApi ( http://openapi.okdab.com/)  (1) 2010.08.19
  1. Favicon of http://www.happytomorrow.net BlogIcon 안용준 2011.09.16 17:54 신고

    저 저작권 침해당한 것 같습니다.ㅋㅋㅋ

    • Favicon of http://seolis.tistory.com BlogIcon 설은 2011.09.16 18:02 신고

      저 이미지는 덧글 다신 안용준님께서 만들어주셨습니다 -ㅇ-ㅋㅋㅋ

  2. Favicon of http://happytomorrow.net BlogIcon 벅스쭌 2011.09.18 03:10 신고

    설 블로그활동잘하네 ㅋ

 가격정보 다음에 지역뉴스정보 OpenApi 입니다 .쓰는 방법은 비슷합니다. 참고로 뉴스 본문 중간중간에 이미지가 있어서(Xml 속성이 텍스트 속성 따로, 이미지 속성 따로 있는게 아니라 하나의 속성에 뭉쳐져 있더군요) 고민에 고민을 하여 소스를 보시면 아시겠지만 허접하게 해결했습니다;;  "http~ .jpg" 찾아내어서 배열에 담은 후 그 배열을 이미지를 띄우는 형식으로 처리했습니다. 그리고 글과 이미지가 순서가 골고루 되어 있지않아서 RichTextBox에 띄우는데 애점 먹었습니다. 그냥 글띄우고 이미지를 순서대로 띄우는 형식으로 -0-;; 그래서 그림만 덜렁 하나만 나올때도 있고, 막 거시기하더군요;;  암튼 주저리 주저리 떠들고 고고씽합니다;;;


<실행화면>

l  전역 부분

int NewsNum; //소식인덱스담는변수

int codenum;  //지역별코드

ArrayList Contens = new ArrayList();  //뉴스본문을 담는 ArrayList

ArrayList ListInfo = new ArrayList(); //뉴스 리스트를 담는 ArrayList

String[] News = { "1", "2" };  //소식종류코드

String[] Area = { "1000", "2000", "3000", "4000", "5000", "6000", "7000", "8000", 9000" };  //지역별 코드

 

l  ImageURL 주소를 비트맵IMAGE로 바꿔주는 함수

public BitmapImage LoadImage(string url)   //ImageURL 주소를 비트맵IMAGE로 바꿔주는 함수

{

    try

    {

        if (string.IsNullOrEmpty(url))

          return null;

 

        WebClient wc = new WebClient();

        Byte[] MyData = wc.DownloadData(url);

        wc.Dispose();

        BitmapImage bimgTemp = new BitmapImage();

        bimgTemp.BeginInit();

        bimgTemp.StreamSource = new MemoryStream(MyData);

        bimgTemp.EndInit();

        return bimgTemp;

    }

    catch

    {

        return null;

    }

}

 

l  로드시

private void Window_Loaded(object sender, RoutedEventArgs e)  //초기 셋팅

{

    NewsCombo.Items.Add("내고장소식");

    NewsCombo.Items.Add("정보화마을소식");

 

    AreaCombo.Items.Add("서울/인천/경기");

    AreaCombo.Items.Add("강원");

    AreaCombo.Items.Add("충북");

    AreaCombo.Items.Add("대전/충남");

    AreaCombo.Items.Add("전북");

    AreaCombo.Items.Add("광주/전남");

    AreaCombo.Items.Add("대구/경북");

    AreaCombo.Items.Add("부산/울산/경남");

    AreaCombo.Items.Add("제주");

 

    RangeCombo.Items.Add("5");

    RangeCombo.Items.Add("10");

    RangeCombo.Items.Add("15");

 

    RangeCombo.Text = "5";  //범위ComboBox 5로 초기화

    NewsCombo.Text = "내고장소식"; // 뉴스항목 ComboBox내고장소식으로 초기화

    AreaCombo.Text = "서울/인천/경기"; // 지역 ComboBox서울/인천/경기로 초기화

}

 

l  지역을 선택했을 시

private void AreaCombo_SelectionChanged(object sender, SelectionChangedEventArgs e) //지역을 선택했을 때

{

    ComboBox currentComboBox = sender as ComboBox;

    XmlDocument doc = new XmlDocument();

    if (currentComboBox != null)

    {

        codenum = currentComboBox.SelectedIndex;

                doc.Load(String.Format("http://openapi.okdab.com/news/newsxml.jsp?key=c83ca4580ed2eb6989a520412d63145a&newskind={0}&code={1}&snum=1&enum={2}",

         News[NewsNum], Area[codenum],RangeCombo.Text));

        // 요청URL(뉴스항목코드,지역코드, 범위 요청변수를 삽입) Load시킴  

     }

      String contentnum;

      int index;

 

      XmlNode currentNode = doc.SelectSingleNode("news");

      index = currentNode.SelectNodes("result").Count;

 

      SubJectList.Items.Clear();

      Contens.Clear();

for (int i = 0; i < index; i++)

      {

         XmlNode result = currentNode.SelectNodes("result")[i];

         contentnum = result.SelectSingleNode("contentnum").InnerText;

           Contens.Add(contentnum);

           subject = result.SelectSingleNode("subject").InnerText;

           SubJectList.Items.Add(subject);

       }

       SubJectList.SelectedIndex = 0;  

 //뉴스제목 comboBox의 기본값을 인덱스 0으로 초기화 시켜줌

}

 

l  뉴스 제목을 선택했을 시

private void SubJectList_SelectionChanged(object sender, SelectionChangedEventArgs e) //뉴스제목을 선택했을 때

{

    if (SubJectList.SelectedIndex == -1)  //제목리스트 index -1이 들어올 경우

    {

         SubJectList.Items.Add(subject);

         SubJectList.Items.Clear();   

         return;

    }

 

    richTextBox1.SelectAll();

    Clipboard.Clear();

    int list = SubJectList.SelectedIndex;

           

    XmlDocument doc = new XmlDocument();

            doc.Load(String.Format("http://openapi.okdab.com/news/newsxml_content.jsp?key=c83ca4580ed2eb6989a520412d63145a&newskind={0}&contentnum={1}", News[NewsNum], Contens[list]));

    // 요청URL(뉴스항목코드,제목코드 요청변수를 삽입) Load시킴

          

    String count;

    String content, contentnum, contentDate, journalist;

    int index;

 

    XmlNode currentNode = doc.SelectSingleNode("news");

    index = currentNode.SelectNodes("result").Count;

count = currentNode.SelectSingleNode("count").InnerText;

 

string[] Imgurl;                    //Image url 주소

    string[] url = new string[30];      //image url 주소

    string[] Erase;                     //불필요한 부분들을,삭제할 것을 담을 배열

 

    for (int i = 0; i < index; i++)

    {

         XmlNode result = currentNode.SelectNodes("result")[i];

         contentnum = result.SelectSingleNode("contentnum").InnerText;

         content = result.SelectSingleNode("content").InnerText;

 

         content = Regex.Replace(content, "<br>", "\n");   //<br>삭제

         content = Regex.Replace(content, "<IMG alt=" + '"' + '"', string.Empty);

//<IMG > 삭제

         content = Regex.Replace(content, "src=" + '"', string.Empty);  //src="" 삭제

 

         Imgurl = content.Split(new string[] { "http", "jpg" }, StringSplitOptions.None);

           //http ~ .jpg 문자열을 잡음

          Erase = content.Split(new string[] { "DIV", "}" }, StringSplitOptions.None);

          //DIV~ } 문자열을 잡음

          String aaa;

          if (Imgurl.Length == 1)  //Imgurl 길이가 1일때

          {

              if (Erase.Length == 1)  //Erase 길이가 1일 때

              {

                 Clipboard.Clear();

                 Clipboard.SetText(content); //클립보드에 뉴스본문을 수정

                 richTextBox1.Paste();  //RichTextBox에 복사

              }

              else

              {

                 aaa = Erase[Erase.Length - 1];

                 Clipboard.Clear();

                 Clipboard.SetText(aaa);

                 richTextBox1.Paste();

              }

          }

else

         {

             try

             {

                 for (int j = 1; j < Imgurl.Length; j += 2)

                 {

                    url[j] = string.Format("{0}{1}{2}", "http", Imgurl[j], "jpg");

                    //http ~ .jpg(image url주소) url[]에 대입

                    Clipboard.Clear();

                    Clipboard.SetText(Imgurl[j - 1] + "\n");

                    //http ~ .jpg (image Url주소)를 제외 한 부분(텍스트)을 수정

                    richTextBox1.Paste();  //RichTextBox에 복사

                    Clipboard.SetImage(LoadImage(url[j])); 

                    richTextBox1.Paste();

                    //ImageUrl 주소를 LoadImage함수를 이용해 BigmapImage로 바꿔주고

                    //클립보드에 수정후 RichTextBox에 붙임                       

                    content = Regex.Replace(content, url[j], string.Empty);

                    //http ~ .jpg (image 주소)는 삭제시킴

                 }

             }

             catch { return; }

          }

 

         contentDate = result.SelectSingleNode("contentDate").InnerText;

         journalist = result.SelectSingleNode("journalist").InnerText;

 

         Title.Content = SubJectList.Items[list].ToString() + " (기사날짜 : " +       contentDate + ")";

         label7.Content = journalist + " 기자";

         }

}

}


<소스 첨부 한번 해봅니다.>

'programming > Open API' 카테고리의 다른 글

[WPF] 구글 날씨 OpenApi  (3) 2011.07.28
옥답OpenApi 두 번째 (지역 뉴스 정보)  (0) 2010.08.19
옥답 OpenApi ( http://openapi.okdab.com/)  (1) 2010.08.19
 옥답 OpenApi.. OpenApi는 알겠는데..옥답이라는건 처음 들어보시죠? 옥답은 농업정보서비스를 제공해주는 사이트입니다. 이 오픈API를 쓴 이유는 이번 선문비트 고급과정 마지막 프로젝트에서 주제가 "작물정보제공서비스"였기 때문에 옥답에서 OpenApi를 썼습니다. 다른 OpenApi와 별반 다름없이 Xml로 되어있어 끌어다 쓰면 됩니다. 자세한 설명은 지금부터~ 그리고~지금 부터 허접한 소스 공개 고고씽~ (반말인점 감안해주세요 ㅋㅋ 문서화한거라서리~)


 옥답 OpenAPI는 다양한 농업정보서비스(가격/유통, 우리농뉴스 등)를 사용자의 웹 환경에서 활용할 수 있도록 외 부에 공개한 개발자 인터페이스이다.

옥답 OpenAPI를 이용하여 옥답의 기술과 서비스를 활용할 수 있으며, 옥답 OpenAPI는 옥답 의 다양한 서비스를 웹 페이지에서 활용할 수 있도록 지원 할 뿐만 아니라, 더 나아가 여러 가지 서비스를 혼합한 창의적인 애플리케이션을 스스로 제작할 수 있도록 지원한다.

예를 들어, 옥답뉴스 API를 이용하면 전국에서 제공되는 농업/농촌의 생생한 뉴스정보를 제공 받을 수 있을 뿐만 아니라, 오픈백과 및 용어 사전 API와 결합해서 농업정보의 전문지식까지 활 용할 수 있다. 이러한 것을 서비스간 융합(mashup)이라고 하며, 이러한 융합을 통해 새로운 가치 를 창출해 낼 수 있다. 더불어 옥답은 OpenAPI 활용 방법을 상세하게 안내하기 때문에, 작은 노 력으로도 여느 정보보다 나은 농업정보를 활용할 수 있다.


<옥답에서 사용한 가격유통 사용의 예>

                                                                                                          

         

<옥답에서 사용한 내 고장 소식의 예>

먼저, 가격정보 OpenApi를 해보겠다.
 
옥답 사이트에서는 웹을 이용해 사용하였지만, 본 프로젝트에서는 WPF를 이용하여, 실시간 가격유통, 내 고장 소식을 구현하였다.


<FarmerBuddy에서 적용시킨 실행화면>



위 도형의 흐름을 살펴보면, 각각의 항목에 대한 요청URL이 있다. 또한 요청URL(Request URL)은 요청변수를 필요로 한다. 요청변수들은 예를 들어 설명하자면, 대분류를 얻기 위해선, 날짜가 필요하고, 중분류를 얻기 위해선 대분류의 코드번호가 필요하다. 따라서 각각의 항목들을 얻기 위해서는 전 항목의 코드번호가 필요하고, 차례대로의 순서가 중요하다.


l 
각각의 항목들을 담아주는 ArrayList와 변수, 그리고 RealStat의 개체를 생성하고, 전역에 선언해주었다.

ArrayList Bigcode = new ArrayList();      //대코드를 담아주는 ArryaList

ArrayList MiddleCode = new ArrayList();   //중코드를 담아주는 ArryaList

ArrayList SmallCode = new ArrayList();    //소코드를 담아주는 ArryaList

ArrayList MarketCode = new ArrayList();   //시장를 담아주는 ArryaList

ArrayList ClassCode = new ArrayList();    //등급를 담아주는 ArryaList

 

int BigNum;                               //대분류의 콤보박스 인덱스를 담는 변수

int MiddleNum;                            //중분류의 콤보박스 인덱스를 담는 변수

int SmallNum;                             //소분류의 콤보박스 인덱스를 담는 변수

int MarketNum;                            //시장의 콤보박스 인덱스를 담는 변수

int ClassNum;                             //등급의 콤보박스 인덱스를 담는 변수

 

RealStat rs = new RealStat();             //ListView의 항목과 각각의 속성들을 현 상황에 맞게 담아주는 개체 생성

 

l  시작버튼을 눌렀을 시, 그리고 프로그램이 실행될 시, 날짜를 받아 대분류로 코드번호를 넘겨준다.

l  그리고, OpenApi는 대게 XML로 되어있다. 그래서 파싱을 해주어야 되는데, XmlDocument를 이용하여, Load를 시켜주고, 각각의 항목마다 XmlNode를 선언해주고, 읽어들이면 된다. (이 부분은 계속적으로 반복된다)

private void OK()   //대분류의 코드를 얻기 위한 함수

{

    if (!(startday.Text == string.Empty || endday.Text == string.Empty))  //시작일, 기준일에  Empty string이 없을경우

     {

         BigCombo.Items.Clear();   //대분류 콤보박스 Clear

         Bigcode.Clear();          //대분류ArrayList Clear

 

         XmlDocument doc = new XmlDocument();   //XmlDocument 생성

doc.Load(String.Format("http://openapi.affis.net/price/realtime/pricexml_class_action.jsp?key=c83ca4580ed2eb6989a520412d63145a&date={0}" + "&lcode=&mcode=&scode=", startday.Text));    // 요청URL(시작일 삽입) Load시킴  

 

         String code = null;  //code 번호를 담는 String변수

         String name = null;  //name을 담는 String 변수

         int index;           //Reuslt Node Count를 담는 변수

 

         /// 여기서부터 각각의 XmlNode를 읽어들임

         XmlNode currentNode = doc.SelectSingleNode("price");  //최상위 price Node 선언 

         XmlNode result; //result Node 선언

         index = currentNode.SelectNodes("result").Count;      //result Count수를 index에 대입

 

         for (int i = 0; i < index; i++)  //result index만큼 반복

         {

             result = currentNode.SelectNodes("result")[i];  

 //result Node 선언

             code = result.SelectSingleNode("code").InnerText;

// code Node 선언 후 code 변수에 대입

             Bigcode.Add(code);

             // 대분류 ArrayList code 번호를 대입시킴

             name = result.SelectSingleNode("name").InnerText;

 // name Node 선언 후 name String 변수에 대입

             BigCombo.Items.Add(name);                        

             //대분류 ComboBox name을 추가

          }

                BigCombo.SelectedIndex = 0;

             //대분류 comboBox의 기본값을 인덱스 0으로 초기화 시켜줌

     }

     else   //시작일, 기준일에  Empty string이 있을 경우

     {

           MessageBox.Show("날짜를 입력해주세요.");

     }

}

 

l  대분류 ComboBox에서 SelectedChanged 이벤트가 일어날 때.

private void Bigcombo_SelectionChanged(object sender, SelectionChangedEventArgs e)  //대분류에서 중분류에 필요한 요청 변수를 넘겨줌

{

    ComboBox currentComboBox = sender as ComboBox; //ComboBox 생성

 

    if (currentComboBox != null)                   //현재 comboBox의 값이 null이 아닐 경우

    {

        BigNum = currentComboBox.SelectedIndex;    //현재 comboBox의 인덱스를 BigNum에 대입

        if (BigNum == -1)                          //BigNum index -1 인 경우

        {

            MiddleComBo.Items.Clear();              //중분류 comboBox를 클리어

            return;

        }

    }

MiddleComBo.Items.Clear();  //중분류 comboBox 클리어

    MiddleCode.Clear();         //중분류

 

    XmlDocument doc = new XmlDocument(); //XmlDocument 생성

 

doc.Load(String.Format("http://openapi.affis.net/price/realtime/pricexml_class_action.jsp?key=c83ca4580ed2eb6989a520412d63145a&date={0}" +

     "&lcode={1}&mcode=&scode=", startday.Text, Bigcode[BigNum]));  

 // 요청URL(시작일, 대분류code 삽입) Load시킴  

 

    String code = null;   //code 번호를 담는 String변수

    String name = null;   //name을 담는 String 변수

    int index;            //Reuslt Node Count를 담는 변수

 

/// 여기서부터 각각의 XmlNode를 읽어들임

    XmlNode currentNode = doc.SelectSingleNode("price");

    index = currentNode.SelectNodes("result").Count;

     XmlNode result;

 

     for (int i = 0; i < index; i++)

     {

        result = currentNode.SelectNodes("result")[i];

        code = result.SelectSingleNode("code").InnerText;

        MiddleCode.Add(code);                                  

// 중분류 ArrayList code 번호를 대입시킴

 

        name = result.SelectSingleNode("name").InnerText;

        MiddleComBo.Items.Add(name);                           

//중분류 comboBox name 추가

     }

     MiddleComBo.SelectedIndex = 0;

//중분류 comboBox의 기본값을 인덱스 0으로 초기화 시켜줌

}

 

l  중분류 ComboBox에서 SelectedChanged 이벤트가 일어날 때,

l  소분류, 시장,등급 항목들도 방법은 똑같다. (요청변수 주의)

private void MiddleComBo_SelectionChanged(object sender, SelectionChangedEventArgs e)  //중분류에서 소분류에 필요한 요청 변수를 넘겨줌

{

    ComboBox currentComboBox = sender as ComboBox; 

 

    if (currentComboBox != null)

    {

         MiddleNum = currentComboBox.SelectedIndex;

 //중분류 comboBox의 인덱스를 MiddleNum으로 대입

         if (MiddleNum == -1)  //MiddleNum -1인 경우

         {

             SmallCombo.Items.Clear();  //소분류 comboBox 클리어

             return;

         }

     }

 

     SmallCombo.Items.Clear(); //소분류 comboBox 클리어

     SmallCode.Clear();        //소분류 ArrayList 클리어

 

     XmlDocument doc = new XmlDocument();

 

doc.Load(String.Format("http://openapi.affis.net/price/realtime/pricexml_class_action.jsp?key=c83ca4580ed2eb6989a520412d63145a&date={0}" +

     "&lcode={1}&mcode={2}&scode=", startday.Text, Bigcode[BigNum], MiddleCode[MiddleNum]));

// 요청URL(시작일, 대분류code, 중분류 code 삽입) Load시킴 

 

String code = null;

    String name = null;

int index;

 

    XmlNode currentNode = doc.SelectSingleNode("price");

    index = currentNode.SelectNodes("result").Count;

    XmlNode result;

 

    for (int i = 0; i < index; i++)

    {

         result = currentNode.SelectNodes("result")[i];

         code = result.SelectSingleNode("code").InnerText;

         SmallCode.Add(code);                              

 // 소분류 ArrayList code 번호를 대입시킴

 

         name = result.SelectSingleNode("name").InnerText;

         SmallCombo.Items.Add(name);                       

// 소분류 comboBox name 추가

     }

     SmallCombo.SelectedIndex = 0;                         

//소분류 comboBox의 기본값을 인덱스 0으로 초기화 시켜줌
}

 

l  결과 화면을 보여줄 때 이다.

private void ClassCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)  //등급에서 결과에 필요한 요청 변수를 넘겨줌

{

    ComboBox currentComboBox = sender as ComboBox;

    if (currentComboBox != null)

    {

        ClassNum = currentComboBox.SelectedIndex;

//등급 comboBox의 인덱스를 ClassNum으로 대입

        if (ClassNum == -1)   //ClassNum -1인 경우

        {

            rs.Clear();                          //RealStat 개체 클리어

            return;

        }

     }

 

     rs.Clear();//RealStat 개체 클리어

     XmlDocument doc = new XmlDocument();

doc.Load(String.Format("http://openapi.affis.net/price/realtime/pricexml_search.jsp?key=c83ca4580ed2eb6989a520412d63145a&sdate={0}&edate={1}" +

      "&ccode={2}&lcode={3}&mcode={4}&scode={5}&gcode={6}&snum=&enum="

, startday.Text, endday.Text, MarketCode[MarketNum], Bigcode[BigNum], MiddleCode[MiddleNum], SmallCode[SmallNum], ClassCode[ClassNum]));

// 요청URL(시작일,기준일.시장번호, 대분류code, 중분류 code,소분류 code,등급 code 삽입) Load시킴 

 

     XmlNode currentNode = doc.SelectSingleNode("price");

int index = currentNode.SelectNodes("result").Count;  //count 돌리기

//날짜, 도매법인,품목,품종,규격,등급,평균가,최저가,최고가,거래량을 담을 변수선언

    String dates, coname, mclassname, sclassname, unitname, gradename, avgprice, maxprice, minprice, sumamt;

    XmlNode result;

 

    for (int i = 0; i < index; i++)

   {

        /// 각각의 Node들을 해당하는 변수에 대입

        result = currentNode.SelectNodes("result")[i];

        dates = result.SelectSingleNode("dates").InnerText;

        coname = result.SelectSingleNode("coname").InnerText;

        mclassname = result.SelectSingleNode("mclassname").InnerText;

        sclassname = result.SelectSingleNode("sclassname").InnerText;

        unitname = result.SelectSingleNode("unitname").InnerText;

        gradename = result.SelectSingleNode("gradename").InnerText;

        avgprice = result.SelectSingleNode("avgprice").InnerText;

        maxprice = result.SelectSingleNode("maxprice").InnerText;

        minprice = result.SelectSingleNode("minprice").InnerText;

        sumamt = result.SelectSingleNode("sumamt").InnerText;

 

        //RealStat 개체에 추가

        rs.Add(new RealTime(dates, coname, mclassname, sclassname, unitname, gradename, avgprice + "", maxprice + "", minprice + "", sumamt));

        price_list.ItemsSource = rs; //ListView에 항목들 바인딩

       }
}

 

l  ListView Xaml 부분

<ListView Margin="37,176,0,0" Name="price_list" BorderThickness="1" Grid.IsSharedSizeScope="True"ItemsSource="{Binding Source={StaticResource totalview}}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalAlignment="Left" Width="875" Height="265" VerticalAlignment="Top" FontFamily="맑은고딕">

<ListView.View>

    <GridView AllowsColumnReorder="True"ColumnHeaderToolTip="Total">

       <GridViewColumn DisplayMemberBinding="{Binding Path=Date}" Header="날짜" Width="70"/>

       <GridViewColumn DisplayMemberBinding="{Binding Path=Domae}" Header="도매법인" Width="80"/>

       <GridViewColumn DisplayMemberBinding="{Binding Path=Pummok}" Header="품목" Width="100"/>

       <GridViewColumn DisplayMemberBinding="{Binding Path=Pumjong}" Header="품종" Width="100"/>

       <GridViewColumn DisplayMemberBinding="{Binding Path=Size}" Header="규격" Width="100"/>

       <GridViewColumn DisplayMemberBinding="{Binding Path=Rate}" Header="등급" Width="100"/>

       <GridViewColumn DisplayMemberBinding="{Binding Path=Avg}" Header="평균가"