自己做个天气小工具

自己的手机上下了个天气工具,感觉非常棒!自己就想实现一下!
目前的想法就是从提供天气信息的网站上获得相关信息并提取!
http://www.weather.com.cn/
这个网站提供的天气信息非常好,格式也非常符合标准!
信息抓取工具:HttpWatcher

装好HttpWatcher后,在网页中启动HttpWatcher,在IE中输入http://www.weather.com.cn/,并选中一个城市,闭关会抓取网页信息。

这个就不详述了。。。

通过对抓取到的信息的分析,得到一个城市的天气的网页URL为http://www.weather.com.cn/weather/101190101.shtml
我的是江苏南京南京(不要奇怪为什么南京要重复两次,因为南京市还有江宁,浦口。。。)
101190101是什么呢?肯定是所选城市的唯一ID啦~
其实根据实际,我们也应该让用户选择所关心的城市。
所以,我们应该先得到关于所感兴趣的城市的代码。

根据分析,一个所选地区的ID有三层
第一层:所属省份
[img]http://dl.iteye.com/upload/picture/pic/92036/77e6f5e6-41e8-33aa-8bdb-60d2e00cb263.bmp[/img]

第二层:所属城市
[img]http://dl.iteye.com/upload/picture/pic/92038/6d110223-adf6-3d10-869a-024884003650.bmp[/img]

第三层:所在区
[img]http://dl.iteye.com/upload/picture/pic/92040/c4109177-16e1-3f1f-8d29-e80e92e2cc41.bmp[/img]

具体的组织结构就像我们的资源管理器

中国
|____陕西
| |____西安
| | |____西安
| | |____ 户县
|_____江苏
| |___南京
|____南京
|____浦口
|____江宁

通过http://www.weather.com.cn/data/citydata/china.html可以得到省份信息
当然是实用URLConnection得到,当然也可以实用HttpClient!
我们得到的信息:
{"10101":"北京","10102":"上海","10103":"天津","10104":"重庆","10105":"黑龙江","10106":"吉林","10107":"辽宁","10108":"内蒙古","10109":"河北","10110":"山西","10111":"陕西","10112":"山东","10113":"新疆","10114":"西藏","10115":"青海","10116":"甘肃","10117":"宁夏","10118":"河南","10119":"江苏","10120":"湖北","10121":"浙江","10122":"安徽","10123":"福建","10124":"江西","10125":"湖南","10126":"贵州","10127":"四川","10128":"广东","10129":"云南","10130":"广西","10131":"海南","10132":"香港","10133":"澳门","10134":"台湾"}
实用正则表达式提取出来就好了~
得到城市,区都是一样的!
今天先写到这里!
(*^__^*) 嘻嘻……

全部代码:
其中URLs保存了我们需要使用到的URL
MyRegex保存了我们需要提取信息的正则表达式
package WeatherReport.util;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ProvinceAndCity {

public static Map<String, String> GetProvince() {

Map<String, String> provinceMap = new HashMap<String, String>();
// Map<String, String> tmpMap = new HashMap<String, String>();
// 得到省份
String content = WebHelper.getHtmlDoc(URLs.ProvinceURL);
String[] provinces = content.split(",");
// 构建提取省份的正则表达式
Pattern proPattern = Pattern.compile(MyRegex.proRegex);
for (String province : provinces) {
Matcher proMatcher = proPattern.matcher(province);
while (proMatcher.find()) {
String id = proMatcher.group(1);
String pro = proMatcher.group(2);
provinceMap.put(pro, id);
// System.out.println(id+":"+pro);
}
}
CityMapUtil.savePropertiesInHashMap("config/province.txt", provinceMap);
return provinceMap;
}

// 得到城市信息,需要先得到省份信息
public static Map<String, String> GetCity() {
// 得到省份信息
Map<String, String> proMap = GetProvince();
Set<String> proSet = proMap.keySet();
Iterator<String> iter = proSet.iterator();
Map<String, String> cityMap = new HashMap<String, String>();
while (iter.hasNext()) {
Map<String, String> tmpMap = new HashMap<String, String>();
String proID = iter.next();
String cityURL = URLs.CityURL + proID + ".html";
String content = WebHelper.getHtmlDoc(cityURL);
String[] cities = content.split(",");
// 构建提取城市的正则表达式
Pattern cityPattern = Pattern.compile(MyRegex.cityRegex);
for (String city : cities) {
Matcher proMatcher = cityPattern.matcher(city);
while (proMatcher.find()) {
String id = proMatcher.group(1);
String pro = proMatcher.group(2);
cityMap.put(proID + id, pro);
tmpMap.put(pro, proID + id);
// System.out.println(proID+id+":"+pro);
}
}
CityMapUtil.savePropertiesInHashMap("config/" + proID + ".txt",
tmpMap);
}
return cityMap;
}

// 根据指定的省份得到相应的城市
public static Map<String, String> GetCity(String provinceID) {
Map<String, String> cityMap = new HashMap<String, String>();
String cityURL = URLs.CityURL + provinceID + ".html";
String content = WebHelper.getHtmlDoc(cityURL);
String[] cities = content.split(",");
// 构建提取城市的正则表达式
Pattern cityPattern = Pattern.compile(MyRegex.cityRegex);
for (String city : cities) {
Matcher proMatcher = cityPattern.matcher(city);
while (proMatcher.find()) {
String id = proMatcher.group(1);
String cityName = proMatcher.group(2);
cityMap.put(cityName, provinceID+id);
}
}
return cityMap;
}

// 得到区域信息
public static Map<String, String> GetState() {
// 先得到城市信息
Map<String, String> cityMap = GetCity();
Set<String> citySet = cityMap.keySet();
Iterator<String> iter = citySet.iterator();
Map<String, String> stateMap = new HashMap<String, String>();
while (iter.hasNext()) {
Map<String, String> tmpMap = new HashMap<String, String>();
String cityID = iter.next();
String stateURL = URLs.StateURL + cityID + ".html";
String content = WebHelper.getHtmlDoc(stateURL);
// System.out.println("stateURL:"+stateURL);
String[] states = content.split(",");
// 构建提取城市的正则表达式
Pattern cityPattern = Pattern.compile(MyRegex.stateRegex);
for (String state : states) {
Matcher stateMatcher = cityPattern.matcher(state);
while (stateMatcher.find()) {
String id = stateMatcher.group(1);
String name = stateMatcher.group(2);
stateMap.put(cityID + id, name);
tmpMap.put(name, cityID + id);
// System.out.println(cityID+id+":"+name);
}
}
CityMapUtil.savePropertiesInHashMap("config/" + cityID + ".txt",
tmpMap);
}
return stateMap;
}

// 根据制定的城市id,得到区域信息
public static Map<String, String> GetState(String cityID) {
Map<String, String> stateMap = new HashMap<String, String>();
String stateURL = URLs.StateURL + cityID + ".html";
String content = WebHelper.getHtmlDoc(stateURL);
// System.out.println("stateURL:"+stateURL);
String[] states = content.split(",");
// 构建提取城市的正则表达式
Pattern cityPattern = Pattern.compile(MyRegex.stateRegex);
for (String state : states) {
Matcher stateMatcher = cityPattern.matcher(state);
while (stateMatcher.find()) {
String id = stateMatcher.group(1);
String name = stateMatcher.group(2);
stateMap.put(name, cityID+id);
}
}
return stateMap;
}

public static void main(String[] args) {
// System.out.println(ProvinceAndCity.GetState());
// GetState();
System.out.println(GetCity("10130"));
System.out.println(GetState("1013014"));
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值