获取天气html,使用htmlparser获取sohu的天气预报
首先,我們新建一個類,存放天氣信息
/*
*?Created?on?2005-3-8
*
*?To?change?the?template?for?this?generated?file?go?to
*?Window>Preferences>Java>Code?Generation>Code?and?Comments
*/
package
org.exoplatform.portlets.chinaweather.component;
/**
*
@author
Administrator
*
*?To?change?the?template?for?this?generated?type?comment?go?to
*?Window>Preferences>Java>Code?Generation>Code?and?Comments
*/
public
class
Weather?{
private
String?city;
private
String?state;
private
String?temperature;
private
String?time;
private
String?wind;
private
String?windpower;
private
long
UpdateTime;
/**
*
@return
*/
public
String?getTemperature()?{
return
temperature;
}
/**
*
@return
*/
public
String?getTime()?{
return
time;
}
/**
*
@return
*/
public
String?getWind()?{
return
wind;
}
/**
*
@return
*/
public
String?getWindpower()?{
return
windpower;
}
/**
*
@param
string
*/
public
void
setTemperature(String?string)?{
temperature
=
string;
}
/**
*
@param
string
*/
public
void
setTime(String?string)?{
time
=
string;
}
/**
*
@param
string
*/
public
void
setWind(String?string)?{
wind
=
string;
}
/**
*
@param
string
*/
public
void
setWindpower(String?string)?{
windpower
=
string;
}
/**
*
@return
*/
public
long
getUpdateTime()?{
return
UpdateTime;
}
/**
*
@param
l
*/
public
void
setUpdateTime(
long
l)?{
UpdateTime
=
l;
}
/**
*
@return
*/
public
String?getState()?{
return
state;
}
/**
*
@param
string
*/
public
void
setState(String?string)?{
state
=
string;
}
/**
*
@return
*/
public
String?getCity()?{
return
city;
}
/**
*
@param
string
*/
public
void
setCity(String?string)?{
city
=
string;
}
}
具體的解析代碼為:
private
Weather?parserWeather()
throws
Exception?{
Weather?w
=
new
Weather();
try
{
//
Parser?parser?=
//
new?Parser("file:
//
localhost/I:/projects/query.html");
Parser?parser
=
new
Parser(
"
http://weather.news.sohu.com/query.php?city=鎮江
"
);
parser.setEncoding(
"
GBK
"
);
Node?nodes[]
=
parser.extractAllNodesThatAre(TableTag.
class
);
TableTag?table
=
(TableTag)?nodes[
3
];
//
temperature
StringNode[]?stringNodes
=
table.digupStringNode(
"
鎮江
"
);
StringNode?name
=
stringNodes[
0
];
w.setCity(name.toPlainTextString());
CompositeTag?td
=
(CompositeTag)?name.getParent();
CompositeTag?tr
=
(CompositeTag)?td.getParent();
int
columnNo
=
tr.findPositionOf(td);
TableColumn?nextColumn
=
(TableColumn)?tr.childAt(
5
);
Node?expectedName
=
nextColumn.childAt(
0
);
Node?expectedName2
=
nextColumn.childAt(
2
);
//
System.out.println(expectedName.getText());
//
System.out.println(expectedName2.getText());
w.setState(expectedName.getText());
w.setTemperature(expectedName2.getText());
//
time
stringNodes
=
table.digupStringNode(
"
時間
"
);
name
=
stringNodes[
0
];
//
System.out.println(name.toPlainTextString());
String?time
=
name
.toPlainTextString()
.substring(
4
,?name.toPlainTextString().length())
.trim();
//
System.out.println(time);
w.setTime(time);
//
wind
stringNodes
=
table.digupStringNode(
"
風向
"
);
name
=
stringNodes[
0
];
//
System.out.println(name.toPlainTextString());
String?wind
=
name
.toPlainTextString()
.substring(
4
,?name.toPlainTextString().length())
.trim();
//
System.out.println(wind);
w.setWind(wind);
//
wind?power
stringNodes
=
table.digupStringNode(
"
風力
"
);
name
=
stringNodes[
0
];
//
System.out.println(name.toPlainTextString());
String?windpower
=
name
.toPlainTextString()
.substring(
4
,?name.toPlainTextString().length())
.trim();
//
System.out.println(windpower);
w.setWindpower(windpower);
w.setUpdateTime(System.currentTimeMillis());
}
catch
(ParserException?e)?{
e.printStackTrace();
}
return
w;
}
解析出來的代碼必須做緩存處理,
private
static
long
TIME_TO_LIVE
=
1000
*
60
*
60
*
12
;
private
Weather?loadWeather()
throws
Exception?{
Weather?weather
=
weather
=
(Weather)?cache_.get(
"
chinaweather
"
);
long
currentTime
=
System.currentTimeMillis();
if
(weather
!=
null
&&
currentTime
<
(weather.getUpdateTime()
+
TIME_TO_LIVE))?{
cache_.remove(
"
chinaweather
"
);
weather
=
null
;
}
if
(weather
==
null
)?{
synchronized
(cache_)?{
weather
=
parserWeather();
cache_.put(
"
chinaweather
"
,?weather);
}
}
return
weather;
}
總結
以上是生活随笔為你收集整理的获取天气html,使用htmlparser获取sohu的天气预报的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php处理ajax post请求超时,p
- 下一篇: MATLAB学习——矩阵