首先,我们新建一个类,存放天气信息
/* * 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; }
|