Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7595898 建立时间:2006年5月29日 |

| |
[Java Open Source]使用htmlparser获取sohu的天气预报 软件技术
lhwork 发表于 2006/9/14 13:20:42 |
首先,我们新建一个类,存放天气信息/* * 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; } |
|
|