다들 아시다시피 구글 날씨 OpenApi입니다. OpenAPI는 XML로 이루어져 있습니다. 그래서 XML document로 읽어들이면 됩니다. XML의 각 속성은 날씨에 대한 정보가 들어있어서 읽어와 화면으로 출력하면 됩니다. 간단쓰~+ㅇ+ < WPF로 개발하였습니다 > |
< XML 주소 실행화면 >
- 위에서 말했다시피, 각 속성에 날씨정보들이 들어있죠? 이걸 한번 간지(?)나게 바꾸도록 하겠습니다 ㅋㅋ
<프로그램 실행화면 - 저 단순한 XML이 요렇게 변함!!! >
그리고, 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' 카테고리의 다른 글
옥답OpenApi 두 번째 (지역 뉴스 정보) (0) | 2010.08.19 |
---|---|
옥답 OpenApi ( http://openapi.okdab.com/) (1) | 2010.08.19 |