WEB开发网
开发学院软件开发Java java 获取天气预报 阅读

java 获取天气预报

 2009-09-10 00:00:00 来源:WEB开发网   
核心提示:最近有个项目要用到天气预报,本来我一直就听说过网络上有提供webservice应用的,java 获取天气预报,所以你调用接口很简单的就能拿到数据,但是事实在我做的时候,提交请求去google,然后解析页面,却非常郁闷,在一开始的时候

最近有个项目要用到天气预报,本来我一直就听说过网络上有提供webservice应用的,所以你调用接口很简单的就能拿到数据。但是事实在我做的时候,却非常郁闷。在一开始的时候,我还没发现,因为一开始的时候非常顺利,然后项目在服务器上跑的时候,天气预报这块却出了问题,经过排查,原来人家每天是提供一定量的访问量的,超过了不给数据。我想想挺来气的,这不是浪费我时间嘛。后来找了很多,未果。

最后我想还是用google吧,下面的程序原理,提交请求去google,然后解析页面。

上程序:

package mobi.tuitui.util; 
 
import java.io.IOException; 
import java.net.URLEncoder; 
import java.util.Date; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
 
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; 
import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.HttpException; 
import org.apache.commons.httpclient.HttpStatus; 
import org.apache.commons.httpclient.methods.GetMethod; 
import org.apache.commons.httpclient.params.HttpMethodParams; 
 
public class WeatherReport { 
 
 /** 
 * 发送请求到GOOGLE获取天气信息页面 
 * @param city 
 * @return 
 * @throws Exception 
 */ 
 @SuppressWarnings("deprecation") 
 private static String getInputStream(String city) { 
 try { 
  HttpClient httpClient = new HttpClient(); 
  String hostUrl = "http://www.google.cn/search?hl=zh-CN&q=tq%20" + URLEncoder.encode(city); 
  GetMethod getMethod = new GetMethod(hostUrl); 
  // 使用系统提供的默认的恢复策略 
  getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); 
  try { 
  // 执行getMethod 
  int statusCode = httpClient.executeMethod(getMethod); 
  if (statusCode != HttpStatus.SC_OK) { 
   System.err.println("Method failed: " + getMethod.getStatusLine()); 
  } 
  String result = getMethod.getResponseBodyAsString(); 
  return result; 
  } catch (HttpException e) { 
  // 发生致命的异常,可能是协议不对或者返回的内容有问题 
  System.out.println("Please check your provided http address!"); 
  e.printStackTrace(); 
  } catch (IOException e) { 
  // 发生网络异常 
  e.printStackTrace(); 
  } finally { 
  // 释放连接 
  getMethod.releaseConnection(); 
  } 
 } catch (Exception e) { 
  e.printStackTrace(); 
  return null; 
 } 
 return null; 
 } 
 
 /** 
 * 将获取的包含天气页面的信息解析出相关的天气信息 
 * @param result 
 * @identifier 
 * @return 
 */ 
 public static String readText(String result, String identifier) { 
 Pattern shopNumberPattern = Pattern.compile(identifier); 
 Matcher shopNamMatcher = shopNumberPattern.matcher(result); 
 if (shopNamMatcher.find()) 
  return shopNamMatcher.group(1); 
 return ""; 
 } 
 
 public static String getWeather(String city) { 
 String result = readText(getInputStream(city), "<div style=\"padding:5px;float:left\">(.+?)</div></div>"); 
 String weatherDetail = readText(result, "<div style=\"font-size:140%\">(.+?)%"); 
 weatherDetail = weatherDetail.replaceAll("<div>", "").replaceAll("</div>", "").replaceAll("<br>", "").replace(":", ":"); 
 return weatherDetail; 
 } 
 
}

1 2  下一页

Tags:java 获取 天气预报

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接