之前我们能得到省份,市,区的唯一ID,则我们可以根据这个ID获得当前想要查看的地区的天气状况。
继续使用我们的HttpWatch分析。例如我们希望知道江苏省南京市南京市区的天气状况。通过之前的城市ID分析,我们知道江苏省ID为10119,南京市ID01,南京市区ID为01,则查询ID为101190101,天气查询URL为:http://www.weather.com.cn/weather/101190101.shtml
这个返回的信息很符合HTML的标准。
我们可以使用HTMLParser提取信息,当然也可以使用正则表达式。
// 制定得到天气的Filter
NodeFilter prosFilter = new TagNameFilter("table");
NodeFilter prosAttrFilter = new HasAttributeFilter("class",
"yuBaoTable");
AndFilter filters = new AndFilter(prosFilter, prosAttrFilter);
// 得到对应的天气
NodeList nodes = parser.extractAllNodesThatMatch(filters);
for (int i = 0; i < nodes.size(); i++) {
Node node = nodes.elementAt(i);
String weatherInfo = node.toPlainTextString();
weatherInfo = weatherInfo.replaceAll("\\s", "");
}
因为提取出来的信息会有很多的空格符,就将其替换为空,weatherInfo.replaceAll("\\s", "");
最终得到的信息为:
15日星期三白天小雨高温23℃东风3-4级夜间阴低温19℃东风3-4级15日,星期三,白天:小雨,高温:高温23℃,风:东风,风力3-4级,夜间:阴,温度:低温19℃,风:东风,风力:3-4级
16日星期四白天阴高温28℃东风3-4级夜间多云低温21℃东南风3-4级16日,星期四,白天:阴,高温:高温28℃,风:东风,风力3-4级,夜间:多云,温度:低温21℃,风:东南风,风力:3-4级
17日星期五白天多云高温31℃东南风3-4级夜间阴低温23℃东南风3-4级17日,星期五,白天:多云,高温:高温31℃,风:东南风,风力3-4级,夜间:阴,温度:低温23℃,风:东南风,风力:3-4级
18日星期六白天雷阵雨高温28℃东风3-4级夜间中雨低温22℃东北风3-4级18日,星期六,白天:雷阵雨,高温:高温28℃,风:东风,风力3-4级,夜间:中雨,温度:低温22℃,风:东北风,风力:3-4级
19日星期日白天中雨高温25℃东北风3-4级夜间阵雨低温21℃东北风3-4级19日,星期日,白天:中雨,高温:高温25℃,风:东北风,风力3-4级,夜间:阵雨,温度:低温21℃,风:东北风,风力:3-4级
20日星期一白天阴高温29℃北风3-4级夜间多云低温22℃东风3-4级20日,星期一,白天:阴,高温:高温29℃,风:北风,风力3-4级,夜间:多云,温度:低温22℃,风:东风,风力:3-4级
21日星期二白天阴高温31℃东风3-4级21日,星期二,白天:阴,高温:高温31℃,风:东风,风力3-4级
为了方便信息,我们将每天的天气信息创建一个类。
类的属性有:日期,星期,白天天气,白天最高温,白天风向,白天风力,夜间天气,夜间最低温,夜间风向,夜间风力。
但是比较不爽的是,不是每天都会有白天信息或者夜间信息。例如21日。
所以在使用正则表达式提取上诉信息的时候分为三种情况:
1.白天和夜间都有
2.只有白天
3.只有夜间
不要抓狂,抓狂的来了。
不是所有的天气状况都是有风向和风力的。
我们得到了如下的天气状况:
15日星期三白天雷阵雨高温32℃无持续风向微风夜间中雨低温19℃无持续风向微风
竟然出现了什么无持续风向和微风。
好吧~使用正则表达式提取信息的时候,我们又得分出一种情况了!
代码如下:
参数content为城市天气信息页面返回的信息;
public static Vector<Day> GetWeather(String content) {
Vector<Day> days = new Vector<Day>();
// 根据所获得的天气网页信息得到未来七天温度信息
Parser parser;
try {
parser = new Parser(content);
// 制定得到天气的Filter
NodeFilter prosFilter = new TagNameFilter("table");
NodeFilter prosAttrFilter = new HasAttributeFilter("class",
"yuBaoTable");
AndFilter filters = new AndFilter(prosFilter, prosAttrFilter);
// 得到对应的天气
NodeList nodes = parser.extractAllNodesThatMatch(filters);
for (int i = 0; i < nodes.size(); i++) {
Node node = nodes.elementAt(i);
String weatherInfo = node.toPlainTextString();
weatherInfo = weatherInfo.replaceAll("\\s", "");
// System.out.print(weatherInfo);
// 得到的天气信息有两种,一种白天和夜间都有,一种只有白天
if (weatherInfo.indexOf("夜") != -1
&& weatherInfo.indexOf("白") != -1) {
String day = "", week = "", h_weather = "", high = "", h_wind = "", h_wind_level = "", l_weather = "", low = "", l_wind = "", l_wind_level = "";
if (weatherInfo.indexOf("风向") != -1) {
Pattern adayPattern = Pattern
.compile(MyRegex.WeatherRegexNoWind);
Matcher adayMatcher = adayPattern.matcher(weatherInfo);
while (adayMatcher.find()) {
day = adayMatcher.group(1);
week = adayMatcher.group(2);
h_weather = adayMatcher.group(3);
high = "高温" + adayMatcher.group(4) + "℃";
h_wind = adayMatcher.group(5) + "风向"; // 白天的风向
h_wind_level = adayMatcher.group(6) + "风"; // 风力
l_weather = adayMatcher.group(7);
low = "低温" + adayMatcher.group(8) + "℃";
l_wind = adayMatcher.group(9) + "风向";
l_wind_level = adayMatcher.group(10) + "风";
}
} else {
Pattern adayPattern = Pattern
.compile(MyRegex.WeatherRegex);
Matcher adayMatcher = adayPattern.matcher(weatherInfo);
while (adayMatcher.find()) {
day = adayMatcher.group(1);
week = adayMatcher.group(2);
h_weather = adayMatcher.group(3);
high = "高温" + adayMatcher.group(4) + "℃";
h_wind = adayMatcher.group(5) + "风"; // 白天的风向
h_wind_level = adayMatcher.group(6) + "级"; // 风力
l_weather = adayMatcher.group(7);
low = "低温" + adayMatcher.group(8) + "℃";
l_wind = adayMatcher.group(9) + "风";
l_wind_level = adayMatcher.group(10) + "级";
}
}
Day aday = new Day(day, week, h_weather, high, h_wind,
h_wind_level, l_weather, low, l_wind, l_wind_level);
days.add(aday);
// System.out.println(aday);
} else if (weatherInfo.indexOf("白") != -1) {
String day = "", week = "", h_weather = "", high = "", h_wind = "", h_wind_level = "";
if (weatherInfo.indexOf("风向") != -1) {
Pattern adayPattern = Pattern
.compile(MyRegex.WeatherDayRegexNoWind);
Matcher adayMatcher = adayPattern.matcher(weatherInfo);
while (adayMatcher.find()) {
day = adayMatcher.group(1);
week = adayMatcher.group(2);
h_weather = adayMatcher.group(3);
high = "高温" + adayMatcher.group(4) + "℃";
h_wind = adayMatcher.group(5) + "风向"; // 白天的风向
h_wind_level = adayMatcher.group(6) + "风"; // 风力
}
} else {
Pattern adayPattern = Pattern
.compile(MyRegex.WeatherDayRegex);
Matcher adayMatcher = adayPattern.matcher(weatherInfo);
while (adayMatcher.find()) {
day = adayMatcher.group(1);
week = adayMatcher.group(2);
h_weather = adayMatcher.group(3);
high = "高温" + adayMatcher.group(4) + "℃";
h_wind = adayMatcher.group(5) + "风"; // 白天的风向
h_wind_level = adayMatcher.group(6) + "级"; // 风力
}
}
Day aday = new Day(day, week, h_weather, high, h_wind,
h_wind_level, "", "", "", "");
days.add(aday);
// System.out.println(aday);
} else {
String day = "", week = "", l_weather = "", low = "", l_wind = "", l_wind_level = "";
if (weatherInfo.indexOf("风向") != -1) {
Pattern adayPattern = Pattern
.compile(MyRegex.WeatherNightRegexNoWind);
Matcher adayMatcher = adayPattern.matcher(weatherInfo);
while (adayMatcher.find()) {
day = adayMatcher.group(1);
week = adayMatcher.group(2);
l_weather = adayMatcher.group(3);
low = "低温" + adayMatcher.group(4) + "℃";
l_wind = adayMatcher.group(5) + "风向";
l_wind_level = adayMatcher.group(6) + "风";
}
} else {
Pattern adayPattern = Pattern
.compile(MyRegex.WeatherNightRegex);
Matcher adayMatcher = adayPattern.matcher(weatherInfo);
while (adayMatcher.find()) {
day = adayMatcher.group(1);
week = adayMatcher.group(2);
l_weather = adayMatcher.group(3);
low = "低温" + adayMatcher.group(4) + "℃";
l_wind = adayMatcher.group(5) + "风";
l_wind_level = adayMatcher.group(6) + "级";
}
Day aday = new Day(day, week, "", "", "", "",
l_weather, low, l_wind, l_wind_level);
days.add(aday);
// System.out.println(aday);
}
}
}
} catch (ParserException e) {
e.printStackTrace();
}
return days;
}
这部分其实就是信息的提取和分析。
目前测试使用的界面
分享到:
相关推荐
<br> RSS工具包 Microsoft提供的RSS工具组件<br> 源代码\SimpleReader.aspx 简单RSS阅读器<br> 源代码\ ComplexRSS.aspx 复杂RSS阅读器<br><br>第6章(\C06)<br>示例描述:本章介绍了在线编辑器的原理及实现。...
文本简繁转换(有台湾省的文档和业务吗)、机密信息的加密解密、文档拼音标注、办公文档批量转文本文件、还有好看实用的图表生成工具(支持二维、三维和靓彩哦,为您的数据表贴上与众不同的图表,看起来绝对不错),...
要创建天气预报Web服务,首先需要选择一个开发工具,如Java的Apache CXF或.NET的ASP.NET Web Services。以下是一个基本步骤概述: 1. 定义服务接口:定义一个接口,该接口声明提供天气预报所需的方法,例如`...
- **应用范围**:适用于快速开发桌面小工具,如天气预报、新闻摘要、股票行情等。 #### 二、Widget Engine 架构与语法 - **XML语法**:Widget Engine使用XML作为描述语言。XML是一种标记语言,具备良好的结构化...
#### 三、天气API接口的使用方法 - **基本URL结构**: - 基础地址:`http://wthrcdn.etouch.cn/` - 接口路径:`weather_mini` 或 `WeatherApi` - 参数:`city=` 或 `citykey=` - **请求示例**: - JSON 格式:...
在这个项目中,HTML文件可能包含了各种页面元素,如标题(`<h1>`至`<h6>`)、段落(`<p>`)、图像(`<img>`)、链接(`<a>`)、列表(`<ul>`和`<ol>`)、表格(`<table>`)等。此外,HTML5引入了更多的语义化标签,...
- **技术选型**:利用`wx.request`请求第三方天气API,使用`<view>`、`<text>`等基础组件展示天气信息。 - **实现步骤**: - 创建新项目,配置API接口。 - 编写页面逻辑代码,处理用户输入。 - 调用API获取天气...
4. **解决冲突**:如果与第三方软件存在冲突,补丁包会尝试自动调整设置,使天气小工具能够正常工作。 使用方法: 1. 下载并解压“WIN7桌面工具‘天气’”压缩包。 2. 关闭所有正在运行的Windows 7系统,并确保...
可能涉及的库和框架有jQuery用于简化DOM操作,Google Maps API用于地图功能,以及可能的第三方API(如OpenWeatherMap)用于天气信息。JavaScript也可以处理用户输入验证,提交表单,甚至与后端进行异步数据交换(如...
5. `characters("<POEM>",15,10)`:处理`<AUTHOR>`标签内的文本。 6. `endElement("AUTHOR")`:遇到`</AUTHOR>`标签时调用。 7. ...以此类推,直到`endDocument()`,表示文档解析结束。 ##### 3. SAX的不足 尽管...
- `<ModulePrefs>`: 包含小工具的元数据,如标题。 - `<Content type="html">`: 指定内容类型为HTML。 - `<![CDATA[...]]>`: 定义CDATA段落,用于包含HTML或JavaScript代码。 #### 六、小工具的组成部分 - **...
1. **语义化标签**:HTML5引入了新的语义化标签,如<header>、<footer>、<article>、<section>和<nav>等,这些标签帮助开发者更清晰地定义页面结构,使内容更容易被理解和解析,对搜索引擎优化(SEO)非常有利。...
在这个项目中,HTML文件可能包含了各种元素,如`<head>`(头部信息)、`<body>`(主体内容)、`<header>`(页眉)、`<nav>`(导航)、`<section>`(分段)、`<article>`(文章)、`<footer>`(页脚)等,用于组织...
《构建桌面天气小工具——基于MFC的实现详解》 在IT行业中,开发实用的桌面应用是提升用户体验的重要途径之一。本篇文章将深入探讨如何利用Microsoft Foundation Classes (MFC)库,结合Visual Studio 2010开发一个...
2. 内容元素:利用<h1>至<h6>定义标题级别,<p>定义段落,<img>插入图片(如天气图标)。此外,<a>标签可以创建链接,让用户能分享当前天气信息到社交媒体。 二、天气信息展示 为了让用户快速获取天气信息,我们...
在本文中,我们将深入探讨如何使用C#编程语言开发一个天气预报小程序,这是一个基于Windows的桌面应用程序,可以显示用户指定城市的当前天气以及未来三天的预报。这个程序利用第三方天气API来获取实时数据,并以用户...
- 常用标签:`<a>`, `<img>`, `<div>`, `<span>`等。 - 表单元素:`<input>`, `<select>`, `<textarea>`等。 - **实践建议:** - 尝试构建简单的个人主页或博客页面。 - 参考W3School等在线资源进行练习。 ###...
可以使用`<header>`标签创建头部区域,`<img>`标签插入Logo图片,`<input>`创建搜索框,用户输入城市名查询天气。 4. **展示天气信息**: 在主体部分,可以创建多个`<section>`或`<article>`元素来分别展示当前...
天天win7桌面天气小工具支持全国各城市天气,有实时天气温度,日历,紫外线强度空气质量,鼠标移动到界面可以显示未来三天内天气情况,外观大方美观,可以做桌面插件使用。 天天win7桌面天气小工具 v3.5更新内容...