自己的手机上下了个天气工具,感觉非常棒!自己就想实现一下!
目前的想法就是从提供天气信息的网站上获得相关信息并提取!
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有三层
第一层:所属省份
第二层:所属城市
第三层:所在区
具体的组织结构就像我们的资源管理器
中国
|____陕西
| |____西安
| | |____西安
| | |____ 户县
|_____江苏
| |___南京
|____南京
|____浦口
|____江宁
通过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"));
}
}
分享到:
相关推荐
vista 天气小工具
为了解决这个问题,"win7 桌面,天气小工具修正补丁包,支持中国城市"应运而生。本文将详细介绍这款补丁包的功能、应用以及如何有效修复天气小工具的问题。 首先,我们来理解为什么会出现天气小工具无法正确显示...
总的来说,"天气小工具 <四>"涵盖了网络编程、数据解析、UI设计、测试策略和项目管理等多个IT领域的知识点,通过学习这个案例,开发者可以提升自己的全栈开发能力,并理解一个实际应用从构思到实现的完整流程。...
这种小工具是Windows 7的一个特色功能,允许用户在桌面上添加各种实用的小程序,如时钟、日历、天气预报等,以方便查看和管理日常信息。 描述中提到的“新版有很多皮肤可以选择”,意味着这个天气小工具提供了丰富...
本篇文章将深入探讨如何利用Microsoft Foundation Classes (MFC)库,结合Visual Studio 2010开发一个简单却功能齐全的桌面天气小工具。这个小工具能够实时从网络获取并显示最新的天气信息,为用户的生活和工作提供...
在这个课程设计中,我们关注的是一个特定的项目——“天气小工具”。这个小工具是针对移动设备设计的,可以提供用户所需的实时天气信息。从标题和描述来看,我们可以提取出几个关键的知识点: 1. **移动应用开发...
与Windows 7系统自带的天气小工具相比,它的一个显著优势在于其皮肤多样性,用户可以根据自己的审美和需求选择不同的界面设计,使桌面更加个性化。 “皮肤多样”这一标签意味着这个小工具提供了丰富的外观选项,...
关于天气小工具的工作原理,它通常会通过互联网连接到一个天气预报服务提供商,获取数据并实时更新到用户的桌面上。这些服务可能需要用户同意某些条款,如隐私政策和数据使用,因此在使用前应仔细阅读相关说明。 在...
win7显示天气的桌面小工具MSNWeather,非常好用,可以选择任何一个城各个国家的城市和地区,并且有未来5天的天气预报。
自动根据IP地址搜索天气,来自中国气象局,很好用
天天win7桌面天气小工具支持全国各城市天气,有实时天气温度,日历,紫外线强度空气质量,鼠标移动到界面可以显示未来三天内天气情况,外观大方美观,可以做桌面插件使用。 天天win7桌面天气小工具 v3.5更新内容...
当这个文件夹或其中的某些文件损坏或丢失时,天气小工具可能无法正确显示天气信息。 修复步骤如下: 1. 首先,你需要下载一个包含"zh-cn"文件夹的压缩包,这个文件夹包含了修复所需的所有中文语言文件。 2. 下载...
Weather Report Online是一款在线实时查询和预报各地天气的小 软件。天气预报服务数据来源于中国气象局http://www.cma .gov.cn/。数据每2.5小时左右自动更新一次,准确可靠。包括 340 多个中国主要城市和 60 多...
【天气查询小工具】是一款专为用户提供便捷天气查询服务的应用程序,主要运行在Android操作系统上。这个小工具允许用户通过输入城市名来获取...通过这个小工具,我们可以深入学习Android开发流程,提升自己的编程技能。
标题中的“win7下好玩的天气小工具”指的是适用于Windows 7操作系统的一类实用程序,这类程序通常以桌面小部件的形式出现,为用户提供便捷的天气查询功能。在Windows 7中,用户可以通过“桌面小工具”功能添加各种小...
总的来说,"Windows 7 小工具[系统自带天气修复]"是一个针对Windows 7系统中天气小工具故障的解决方案,它通过提供替代的系统文件和详细的使用说明帮助用户恢复这一实用功能。确保遵循安全操作规程并备份重要文件,...
用户可以根据自己的位置设置,调整小工具显示的城市,以获取最准确的本地天气信息。 下载吧下载说明.htm和程序使用说明.txt则为用户提供详细的下载和使用指南。下载说明通常会包含下载源、下载方法、文件安全性等...
非常实用的一款win7桌面天气,比自带强大,美观.双击安装即可替换自带天气.运行即可自动更新当地天气.支持多种皮肤更换,时尚个性!
标题中的“WIN7 农历 天气 2小工具”指的是两个专为Windows 7操作系统设计的小应用程序,分别用于显示农历和实时天气信息。这些小工具是Windows 7操作系统特性的一部分,允许用户在桌面上方便地查看这些关键的生活...
这个小工具允许用户在电脑桌面上实时查看全球各地的天气状况,为出行计划提供便利。以下是如何在 Macbook 上设置电脑天气小工具的详细步骤: 1. **开启电脑并进入桌面**:首先,你需要打开你的 Macbook 并进入主...