konhon

忘掉過去,展望未來。找回自我,超越自我。
逃避不一定躲的过, 面对不一定最难过, 孤单不一定不快乐, 得到不一定能长久, 失去不一定不再拥有, 可能因为某个理由而伤心难过, 但我却能找个理由让自己快乐.

Google

BlogJava 首页 新随笔 联系 聚合 管理
  203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks
首先,我们新建一个类,存放天气信息

/*
 * 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;
 }


posted on 2007-03-08 06:56 konhon 优华 阅读(2216) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: