반응형

* 기상청 날씨 (Weather) 정보 가져오기 예제...

 

메인화면

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace CSharp_Weather
{
    public partial class Form1 : Form
    {
        string strURL = "http://www.kma.go.kr/weather/forecast/mid-term-xml.jsp";
        string strCity = "";
        public Form1()
        {
            InitializeComponent();

            cboCity.SelectedIndex = 10;
            lblToday.Text = DateTime.Now.ToString("yyyy-MM-dd");
        }

        private void cboCity_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (XmlReader xr = XmlReader.Create(strURL))
                {
                    string strMsg = "";
                    XmlWriterSettings ws = new XmlWriterSettings();
                    ws.Indent = true;
                    bool bCheck = false;
                    int iCount = 0;
                    strCity = cboCity.Text;

                    while (xr.Read())
                    {
                        switch (xr.NodeType)
                        {
                            case XmlNodeType.CDATA:
                                {
                                    txtMsg.Text = xr.Value.ToString().Replace("<br />", " ");
                                    break;
                                }
                            case XmlNodeType.Element:
                                {
                                    break;
                                }
                            case XmlNodeType.Text:
                                {
                                    if (xr.Value.Equals(strCity))
                                    {
                                        bCheck = true;
                                    }

                                    if (bCheck)
                                    {
                                        DateTime dt;
                                        bool b = DateTime.TryParse(xr.Value.ToString(), out dt);
                                        if (b)
                                        {
                                            strMsg += "/";
                                        }

                                        strMsg += xr.Value + ",";
                                        iCount += 1;
                                        if (iCount > 36)
                                        {
                                            bCheck = false;
                                        }
                                    }
                                    break;
                                }
                            case XmlNodeType.XmlDeclaration:
                                {
                                    break;
                                }
                            case XmlNodeType.ProcessingInstruction:
                                {
                                    break;
                                }
                            case XmlNodeType.Comment:
                                {
                                    break;
                                }
                            case XmlNodeType.EndElement:
                                {
                                    break;
                                }
                        }
                    }//while

                    //요일별로 짜르기
                    string[] strTmp = strMsg.Split('/');

                    //요일별 데이터
                    string[] strWh1 = strTmp[1].Split(',');
                    label3.Text = strWh1[0];
                    label5.Text = "최저: " + strWh1[2] + " ℃";
                    label6.Text = "최고: " + strWh1[3] + " ℃";
                    label7.Text = strWh1[1];

                    string[] strWh2 = strTmp[2].Split(',');
                    label11.Text = strWh2[0];
                    label10.Text = "최저: " + strWh2[2] + " ℃";
                    label9.Text = "최고: " + strWh2[3] + " ℃";
                    label8.Text = strWh2[1];

                    string[] strWh3 = strTmp[3].Split(',');
                    label15.Text = strWh3[0];
                    label14.Text = "최저: " + strWh3[2] + " ℃";
                    label13.Text = "최고: " + strWh3[3] + " ℃";
                    label12.Text = strWh3[1];

                    string[] strWh4 = strTmp[4].Split(',');
                    label27.Text = strWh4[0];
                    label26.Text = "최저: " + strWh4[2] + " ℃";
                    label25.Text = "최고: " + strWh4[3] + " ℃";
                    label24.Text = strWh4[1];

                    string[] strWh5 = strTmp[5].Split(',');
                    label23.Text = strWh5[0];
                    label22.Text = "최저: " + strWh5[2] + " ℃";
                    label21.Text = "최고: " + strWh5[3] + " ℃";
                    label20.Text = strWh5[1];

                    string[] strWh6 = strTmp[6].Split(',');
                    label19.Text = strWh6[0];
                    label18.Text = "최저: " + strWh6[2] + " ℃";
                    label17.Text = "최고: " + strWh6[3] + " ℃";
                    label16.Text = strWh6[1];
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
            }
        }
    }
}

기상청 jsp 내용 

 

콤보 박스 내용은 아래의 그림과 같이 속성에서 바로 등록 해 주었으며, ComboBox Index 가 아닌

Text 즉 도시 이름으로 체크 하기에 아이템 순서는 상관이 없습니다.

 

 

*결과 화면

 

반응형

+ Recent posts