Java中如何獲取天氣信息

import java.io.IOException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
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();
//System.out.println("city========="+city);
String hostUrl = "http://www.google.cn/search?hl=zh-CN&q=tq%20" + URLEncoder.encode(city);
//System.out.println("hostUrl========="+hostUrl);
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 5px 5px 0;float:left\">(.+?)</div></div>");
String weatherDetail = readText(result, "<div style=\"font-size:140%\">(.+?)%");
weatherDetail = weatherDetail.replaceAll("<div>", "").replaceAll("</div>", "").replaceAll("<br>", "").replace(":", ":");
weatherDetail = weatherDetail.replaceAll(" / ","℃~");
weatherDetail = weatherDetail.replaceAll("<b>","");
weatherDetail = weatherDetail.replaceAll("</b>","  ");
weatherDetail = weatherDetail.replaceAll("°C","℃");
weatherDetail = weatherDetail.replaceAll("當前: ","");
weatherDetail = weatherDetail.replaceAll("當前:","");
return weatherDetail;
}


public static Map getWeatherBySale(String saleName) {
String weather = "";
Map resMap=null;
String city = saleName.substring(0,2);
weather = WeatherReport.getInputStream(city);
if (weather==null || weather.equals("")){
city = saleName.substring(0,3);
weather = WeatherReport.getInputStream(city);
if (weather==null || weather.equals("")){
city = saleName.substring(0,4);
weather = WeatherReport.getInputStream(city);
}
}
if (weather!=null && !weather.equals("")){
resMap=new HashMap();
weather = weather.replaceAll("\n", "").replaceAll("\t", "").replaceAll("\r", "");;
weather = weather.replaceAll(" ", "");
weather = weather.substring(0,weather.indexOf("溼度"));
// weather = city + "  " + weather;
resMap.put("city", city);
resMap.put("weather", weather);
}
return resMap;
}
public static void main(String args[]){
System.out.println(WeatherReport.getWeather("呼和浩特"));
}
}

也可採用第二種方式:用地一個插件
http://www.thinkpage.cn/調用該網站提供的插件模板

可以添加股票的信息 通過如下代碼:
<iframe src="http://www.thinkpage.cn/stock/widget.htm?mo=1&or=1&an=1" frameborder="0" scrolling="no" width="200" height="200" allowTransparency="true"></iframe>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章