一、概要:
此天气WCF使用的是中国天气的Json天气数据接口。
另外,由于文章并没有讲解具体的WCF创建过程,所以在文章最后笔者会提供一个笔者自己的完成品以供大家参考。
地址:http://m.weather.com.cn/data/101120201.html
其中101120201就是每个城市的代码。
Json数据的基本结构
View Code
1 { 2 "weatherinfo": 3 { 4 //基本信息 5 "city":"青岛", 6 "city_en":"qingdao", 7 "date_y":"2013年4月2日", 8 "date":"","week":"星期二", 9 "fchh":"08", 10 "cityid":"101120201", 11 //未来1到6天的天气信息 12 "temp1":"12℃~4℃","temp2":"13℃~6℃","temp3":"12℃~7℃","temp4":"9℃~3℃","temp5":"7℃~-1℃","temp6":"7℃~2℃", 13 "tempF1":"53.6℉~39.2℉","tempF2":"55.4℉~42.8℉","tempF3":"53.6℉~44.6℉","tempF4":"48.2℉~37.4℉","tempF5":"44.6℉~30.2℉","tempF6":"44.6℉~35.6℉", 14 "weather1":"晴","weather2":"晴转多云","weather3":"多云转阴","weather4":"小雨","weather5":"多云","weather6":"晴", 15 //图片一天两个:白天和今晚,单数白天,双数夜晚 16 "img1":"0","img2":"99","img3":"0","img4":"1","img5":"1","img6":"2", 17 "img7":"7","img8":"99","img9":"1","img10":"99","img11":"0","img12":"99","img_single":"0", 18 "img_title1":"晴","img_title2":"晴","img_title3":"晴","img_title4":"多云","img_title5":"多云","img_title6":"阴", 19 "img_title7":"小雨","img_title8":"小雨","img_title9":"多云","img_title10":"多云","img_title11":"晴","img_title12":"晴","img_title_single":"晴", 20 "wind1":"北风4-5级转南风3-4级","wind2":"南风3-4级","wind3":"东南风3-4级","wind4":"东南风4-5级","wind5":"北风5-6级","wind6":"南风4-5级","fx1":"北风","fx2":"南风", 21 "fl1":"4-5级转3-4级","fl2":"3-4级","fl3":"3-4级","fl4":"4-5级","fl5":"5-6级","fl6":"4-5级", 22 //穿衣指数 23 "index":"较冷", 24 "index_d":"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。", 25 "index48":"较冷", 26 "index48_d":"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。", 27 //紫外线指数 28 "index_uv":"中等", 29 "index48_uv":"中等", 30 //洗车指数 31 "index_xc":"较适宜", 32 //旅游指数 33 "index_tr":"适宜", 34 //舒适指数 35 "index_co":"较舒适", 36 //这个我也不清楚,应该是和舒适指数相关的信息 37 "st1":"11","st2":"3","st3":"12","st4":"4","st5":"12","st6":"4", 38 //晨练指数 39 "index_cl":"较适宜", 40 //晾晒指数 41 "index_ls":"基本适宜", 42 //过敏指数 43 "index_ag":"极易发" 44 } 45 }
使用此接口的优点是比较稳定,信息也比较准确。缺点是比较容易找到的城市代号目前只有省级市的,像一些县级市只能根据情况自己添加了。(最后笔者会提供一个Json结构的城市列表)
实现此天气的WCF服务,主要可分为四个功能:
1、根据IP获取用户的所有省份和城市。(如果需要自动识别用户地理位置返回天气情况的话)
4、获取此服务所有支持的城市。(此功能作为附加,更方便使用者)
二、数据结构
1、城市基本天气信息
View Code
1 /// <summary> 2 /// 城市基本天气信息 3 /// </summary> 4 public class WeatherInformation 5 { 6 string city = string.Empty; 7 [DataMember] 8 /// <summary> 9 /// 中文城市名称 10 /// </summary> 11 public string City 12 { 13 get { return city; } 14 set { city = value; } 15 } 16 17 string cityEn = string.Empty; 18 [DataMember] 19 /// <summary> 20 /// 英文城市名称 21 /// </summary> 22 public string CityEn 23 { 24 get { return cityEn; } 25 set { cityEn = value; } 26 } 27 28 string date = string.Empty; 29 [DataMember] 30 /// <summary> 31 /// 中文日期 32 /// </summary> 33 public string Date 34 { 35 get { return date; } 36 set { date = value; } 37 } 38 39 string dateEn = string.Empty; 40 [DataMember] 41 /// <summary> 42 /// 英文日期 43 /// </summary> 44 public string DateEn 45 { 46 get { return dateEn; } 47 set { dateEn = value; } 48 } 49 50 string week = string.Empty; 51 [DataMember] 52 /// <summary> 53 /// 中文星期 54 /// </summary> 55 public string Week 56 { 57 get { return week; } 58 set { week = value; } 59 } 60 61 string weekEn = string.Empty; 62 [DataMember] 63 /// <summary> 64 /// 英文星期 65 /// </summary> 66 public string WeekEn 67 { 68 get { return weekEn; } 69 set { weekEn = value; } 70 } 71 72 string published = string.Empty; 73 [DataMember] 74 /// <summary> 75 /// 发布时间 76 /// </summary> 77 public string Published 78 { 79 get { return published; } 80 set { published = value; } 81 } 82 83 string cityCode = string.Empty; 84 [DataMember] 85 /// <summary> 86 /// 城市代码 87 /// </summary> 88 public string CityCode 89 { 90 get { return cityCode; } 91 set { cityCode = value; } 92 } 93 94 List<Weather> weatherForecast = new List<Weather>(); 95 [DataMember] 96 /// <summary> 97 /// 表示从今天开始连续6天的天气情况 98 /// </summary> 99 public List<Weather> WeatherForecast 100 { 101 get { return weatherForecast; } 102 set { weatherForecast = value; } 103 } 104 105 string dressingIndex24 = string.Empty; 106 [DataMember] 107 /// <summary> 108 /// 24小时穿衣指数 109 /// </summary> 110 public string DressingIndex24 111 { 112 get { return dressingIndex24; } 113 set { dressingIndex24 = value; } 114 } 115 116 string dressingIndexDescription24 = string.Empty; 117 [DataMember] 118 /// <summary> 119 /// 24小时穿衣指数描述信息 120 /// </summary> 121 public string DressingIndexDescription24 122 { 123 get { return dressingIndexDescription24; } 124 set { dressingIndexDescription24 = value; } 125 } 126 127 string dressingIndex48 = string.Empty; 128 [DataMember] 129 /// <summary> 130 /// 48小时穿衣指数 131 /// </summary> 132 public string DressingIndex48 133 { 134 get { return dressingIndex48; } 135 set { dressingIndex48 = value; } 136 } 137 138 string dressingIndexDescription48 = string.Empty; 139 [DataMember] 140 /// <summary> 141 /// 48小时穿衣指数描述 142 /// </summary> 143 public string DressingIndexDescription48 144 { 145 get { return dressingIndexDescription48; } 146 set { dressingIndexDescription48 = value; } 147 } 148 149 string UVindex24 = string.Empty; 150 [DataMember] 151 /// <summary> 152 /// 24小时紫外线指数 153 /// </summary> 154 public string UVIndex24 155 { 156 get { return UVindex24; } 157 set { UVindex24 = value; } 158 } 159 160 string UVindex48 = string.Empty; 161 [DataMember] 162 /// <summary> 163 /// 48小时紫外线指数 164 /// </summary> 165 public string UVIndex48 166 { 167 get { return UVindex48; } 168 set { UVindex48 = value; } 169 } 170 171 string carWashIndex = string.Empty; 172 [DataMember] 173 /// <summary> 174 /// 洗车指数 175 /// </summary> 176 public string CarWashIndex 177 { 178 get { return carWashIndex; } 179 set { carWashIndex = value; } 180 } 181 182 string turismIndex = string.Empty; 183 [DataMember] 184 /// <summary> 185 /// 旅游指数 186 /// </summary> 187 public string TurismIndex 188 { 189 get { return turismIndex; } 190 set { turismIndex = value; } 191 } 192 193 string comfortIndex = string.Empty; 194 [DataMember] 195 /// <summary> 196 /// 舒适指数 197 /// </summary> 198 public string ComfortIndex 199 { 200 get { return comfortIndex; } 201 set { comfortIndex = value; } 202 } 203 204 string morningExerciseIndex = string.Empty; 205 [DataMember] 206 /// <summary> 207 /// 晨练指数 208 /// </summary> 209 public string MorningExerciseIndex 210 { 211 get { return morningExerciseIndex; } 212 set { morningExerciseIndex = value; } 213 } 214 215 string dryingIndex = string.Empty; 216 [DataMember] 217 /// <summary> 218 /// 晾晒指数 219 /// </summary> 220 public string DryingIndex 221 { 222 get { return dryingIndex; } 223 set { dryingIndex = value; } 224 } 225 226 string allergyIndex = string.Empty; 227 [DataMember] 228 /// <summary> 229 /// 过敏指数 230 /// </summary> 231 public string AllergyIndex 232 { 233 get { return allergyIndex; } 234 set { allergyIndex = value; } 235 } 236 }
2、天气实体类
View Code
1 /// <summary>
2 /// 天气实体类
3 /// </summary>
4 public class Weather
5 {
6 string celsius = string.Empty;
7 [DataMember]
8 /// <summary>
9 /// 摄氏温度
10 /// </summary>
11 public string Celsius
12 {
13 get { return celsius; }
14 set { celsius = value; }
15 }
16
17 string fahrenheit = string.Empty;
18 [DataMember]
19 /// <summary>
20 /// 华氏温度
21 /// </summary>
22 public string Fahrenheit
23 {
24 get { return fahrenheit; }
25 set { fahrenheit = value; }
26 }
27
28 string weatherDescription = string.Empty;
29 [DataMember]
30 /// <summary>
31 /// 天气描述
32 /// </summary>
33 public string WeatherDescription
34 {
35 get { return weatherDescription; }
36 set { weatherDescription = value; }
37