抓出问天网的城市天气

 package com.zdao.weather.util;  
 
import java.io.BufferedReader;  
import java.io.InputStreamReader;  

import java.net.URL;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern; import com.zdao.weather.bean.Weather;  
 
public class OpenUrl {  
   
public static void main(String[] args){  
        OpenUrl openUrl
= new OpenUrl();  
        Weather w
= openUrl.getWeatherByUrl("http://weather.tq121.com.cn/detail.php?city=武汉");  
        System.out.println(w.getDate1());  
        System.out.println(w.getTemperature1());  
        System.out.println(w.getWeather1());  
        System.out.println(w.getWind1());  
          
        System.out.println(w.getDate2());  
        System.out.println(w.getTemperature2());  
        System.out.println(w.getWeather2());  
        System.out.println(w.getWind2());  
          
        System.out.println(w.getDate3());  
        System.out.println(w.getTemperature3());  
        System.out.println(w.getWeather3());  
        System.out.println(w.getWind3());  
          
        System.out.println(w.getDate4());  
        System.out.println(w.getTemperature4());  
        System.out.println(w.getWeather4());  
        System.out.println(w.getWind4());  
          
        System.out.println(w.getDate5());  
        System.out.println(w.getTemperature5());  
        System.out.println(w.getWeather5());  
        System.out.println(w.getWind5());  
    }  
      
   
/**  
     * 根据连接抓出5天天气  
    
*/  
   
public Weather getWeatherByUrl(String url){  
        Weather weather
= new Weather();  
       
try {  
           
long l1 = System.currentTimeMillis();  
 
            String content
= getContent(url);  
            weather
= getDateTemperature(content , weather);  
            weather
= getWind3(content , weather);  
            weather
= getWeather3(content , weather);  
            weather
= getDate(content , weather);  
            weather
= getTemperature(content , weather);  
            weather
= getWind2(content , weather);  
            weather
= getWeather2(content , weather);  
           
long l2 = System.currentTimeMillis();  
            System.out.println(l2
- l1);  
        }
catch (Exception e){  
            System.out.println(e);  
        }  
       
return weather;  
    }  
 
   
/**  
     * 根据连接地址抓出页面内容  
     *
@param 根据一个连接地址  
     *
@return 页面内容  
    
*/  
   
private String getContent(String strUrl){  
       
try{  
            URL url
= new URL(strUrl);  
            BufferedReader br
= new BufferedReader(new InputStreamReader(url.openStream()));  
            String s
= "";  
            StringBuffer sb
=new StringBuffer();  
           
while((s = br.readLine())!=null){  
                sb.append(s
+"/r/n");  
            }  
            br.close();  
           
return sb.toString();  
        }
catch(Exception e){  
           
return "error open url" + strUrl;  
        }  
    }  
 
   
/**  
     * 取当前3天内的温度和时间  
     * 返回一个天气bean  
     * 0和1 2个参数为第一天时间和温度 后面相同  
     * content 为页面内容  
     * weather 为天气bean  
    
*/  
   
private Weather getDateTemperature(String content , Weather weather) throws Exception{  
        String[] s
= analysis("<td width=/"215/" align=/"center/" valign=/"middle/"><span class=/"big-cn/">(.*?)</span></td>", content , 6);  
        weather.setDate1(s[
0].trim());  
        weather.setTemperature1(s[
1].trim());  
        weather.setDate2(s[
2].trim());  
        weather.setTemperature2(s[
3].trim());  
        weather.setDate3(s[
4].trim());  
        weather.setTemperature3(s[
5].trim());  
       
return weather;  
    }  
 
   
/**  
     * 取前3天的风向  
     * content 为页面内容  
     * weather 为天气bean  
    
*/  
   
private Weather getWind3(String content , Weather weather){  
        String[] s
= analysis("<td width=/"215/" align=/"center/" valign=/"middle/"><span class=/"cn/">(.*?)</span></td>", content , 3);  
        weather.setWind1(s[
0].trim());  
        weather.setWind2(s[
1].trim());  
        weather.setWind3(s[
2].trim());  
       
return weather;  
    }  
      
   
/**  
     * 取前3天的天气情况  
     * content 为页面内容  
     * weather 为天气bean  
    
*/  
   
private Weather getWeather3(String content , Weather weather){  
        String[] s
= analysis("align=/"center/" valign=/"top/"><img src=/"../images/a(.*?).gif/" width=/"70/" height=/"65/"></td>" , content , 6);  
        s
= ConversionWeather(s);  
        weather.setWeather1(s[
0]);  
        weather.setWeather2(s[
1]);  
        weather.setWeather3(s[
2]);  
       
return weather;  
    }  
      
   
/**  
     * 取后2天的日期  
    
*/  
   
private Weather getDate(String content , Weather weather){  
        String[] s
= analysis("<td width=/"121/"><span class=/"cn/">(.*?)</span></td>" , content , 2);  
        weather.setDate4(s[
0].trim());  
        weather.setDate5(s[
1].trim());  
       
return weather;  
    }  
      
   
/**  
     * 取后天2天的温度  
    
*/  
   
private Weather getTemperature(String content , Weather weather){  
        String[] s
= analysis("<td width=/"86/" class=/"cn/"><span class=/"wendu/">(.*?)</span></td>" , content , 2);  
        weather.setTemperature4(s[
0].trim());  
        weather.setTemperature5(s[
1].trim());  
       
return weather;  
    }  
      
   
/**  
     * 取后天2天的风向  
    
*/  
   
private Weather getWind2(String content , Weather weather){  
        String[] s
= analysis("<td width=/"157/"><span class=/"cn/">(.*?)</span></td>" , content , 2);  
        weather.setWind4(s[
0].trim());  
        weather.setWind5(s[
1].trim());  
       
return weather;  
    }  
      
   
/**  
     *   
    
*/  
   
private Weather getWeather2(String content , Weather weather){  
        String[] s
= analysis("<img src=/"../images/b(.*?).gif/" width=/"50/" height=/"46/"></td>" , content , 4);  
        s
= ConversionWeather(s);  
        weather.setWeather4(s[
0]);  
        weather.setWeather5(s[
1]);  
       
return weather;  
    }  
 
   
/**  
     * 根据页面内容和正则表达式来分析页面,得到分析结果  
     *
@param pattern 正则表达式  
     *
@param match 页面内容  
     *
@return content 结果  
    
*/  
   
private String[] analysis(String pattern, String match , int i){  
        Pattern sp
= Pattern.compile(pattern);  
        Matcher matcher
= sp.matcher(match);  
        String[] content
= new String[i];  
       
for (int i1 = 0; matcher.find(); i1++){  
            content[i1]
= matcher.group(1);  
        }  
       
return content;  
    }  
 
   
/**  
     * 转换天气情况  
     *
@param s第1张图片  
     *
@return 天气情况  
    
*/  
   
private String[] ConversionWeather(String s[]){  
        String[] s1
= {"晴天", "多云", "", "阵雨", "雷阵雨", "雷阵雨并伴有冰雹", "雨加雪", "小雨", "中雨", "大雨", "暴雨", "大暴雨", "特大暴雨", "阵雪", "小雪", "中雪", "大雪", "暴雪", "", "冻雨", "沙尘暴", "小雨-中雨", "中雨-大雨", "大雨-暴雨", "暴雨-大暴雨", "大暴雨-特大暴雨", "小雪-中雪", "中雪-大雪", "大雪-暴雪", "浮尘", "扬沙", "强沙尘暴"};  
        String[] s2
= new String[s.length/2];  
       
int i1 = 0;  
       
for (int i = 0; i < s.length; i += 2){  
           
if (s[i].trim().equals(s[i+1].trim())){  
                s2[i1]
= s1[Integer.parseInt(s[i])];  
            }
else {  
                s2[i1]
= s1[Integer.parseInt(s[i])] + "" + s1[Integer.parseInt(s[i+1])];  
            }  
            i1
++;  
        }  
       
return s2;  
    }  


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值