微信公衆平臺開發--天氣查詢和發送

 今天一頓努力,終於完成了微信發送天氣,當然這要多謝柳峯老師的博客http://blog.csdn.net/lyq8479/article/details/9141467對我有很大的幫助.別的不多說 就說一下我實現的過程,主要思路就是發送天氣,首先要根據城市的名稱得到城市的查詢天氣的編碼,然後拼接成url訪問中國氣象局提供的返回數據的頁面,我的博客中有提到的.下面就直接上代碼了

import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;


import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.json.JSONException;
import org.json.JSONObject;


public class WeatherSearch {
private static LogMessage log =LogMessage.getInstance();


/**
* @param url
* @return  得到訪問頁面的返回的數據
*/
public static String AccesPage(String url){
String info = null;
if(url != null&& !url.equals("")){
try{
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(url);
client.getHttpConnectionManager().closeIdleConnections(1);
int statusCode  = client.executeMethod(method);

//用的http
info = method.getResponseBodyAsString();
} catch(Exception e){
log.error("accesPage error:"+e.getLocalizedMessage());
}

}
return info;
}

/**
* @param xml
* @return 解析json得到想要的數據
*/
public static String getReturnInfo(String xml){
StringBuffer bf = new StringBuffer();
try {
JSONObject json = new JSONObject(xml).getJSONObject("weatherinfo");
bf.append(json.get("date_y").toString());
bf.append(" "+json.get("week").toString());
bf.append(" "+json.get("temp1").toString());
bf.append(" "+json.get("weather1").toString());
bf.append(" "+json.get("wind1").toString());
bf.append("\n");
bf.append(getDateAddOne(json.get("date_y").toString()));
bf.append(" "+getWeekAddOne(json.get("week").toString()));
bf.append(" "+json.get("temp2"));
bf.append(" "+json.get("weather2"));
bf.append(" "+json.get("wind2"));
bf.append("\n");
bf.append(getDateAddOne(getDateAddOne(json.get("date_y").toString())));
bf.append(" "+getWeekAddOne(getWeekAddOne(json.get("week").toString())));
bf.append(" "+json.get("temp3"));
bf.append(" "+json.get("weather3"));
bf.append(" "+json.get("wind3"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bf.toString();
}
/**
* @param date
* @return  日期加一
*/
public static String getDateAddOne(String datest){
SimpleDateFormat ft = new SimpleDateFormat("yyyy年MM月dd日");
 Date date=new Date();
try {
date = ft.parse(datest);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar   calendar   =  Calendar.getInstance(); 
    calendar.setTime(date); 
    calendar.add(calendar.DAY_OF_MONTH,1);
    date=calendar.getTime(); 
    return ft.format(date);
}
public static String getWeekAddOne(String week){
Map<Integer,String> map = new HashMap<Integer, String>();
map.put(1, "星期一");
map.put(2, "星期二");
map.put(3, "星期三");
map.put(4, "星期四");
map.put(5, "星期五");
map.put(6, "星期六");
map.put(7, "星期日");
String weekNow =null;
   for (Map.Entry<Integer, String> MapString : map.entrySet()) { 
     Integer key=MapString.getKey();//次方法獲取鍵值對的名稱 
     String value=MapString.getValue();//次方法獲取鍵值對的值 
     if(value.equals(week)){
                   if(key==7){
                  weekNow = map.get(1);
                   }else{
                  weekNow =map.get(key+1);
                   }     
     break;
     }
   
return weekNow;
}

/**
* @param cityName
* @return  
*/
public static String getCityCode(String cityName){
String requestUrl = "http://someapi.sinaapp.com/citycode/?city={CITY}";  
       requestUrl = requestUrl.replace("{CITY}", urlEncodeUTF8(cityName));  
       // 處理空格  
       requestUrl = requestUrl.replaceAll("\\+", "%20");  
       String cityCode = AccesPage(requestUrl);
return cityCode;
}

 /** 
     * UTF-8編碼 
     *  
     * @param source 
     * @return 
     */  
    private static String urlEncodeUTF8(String source) {  
        String result = source;  
        try {  
            result = java.net.URLEncoder.encode(source, "UTF-8");  
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        }  
        return result;  
    }  
  //傳人citycode 得到 weather  json
    public static String getWeatherByCity(String cityCode){
    String url="http://m.weather.com.cn/data/"+cityCode.trim()+".html";
    return AccesPage(url);
    }
    //整合一下
    public static String getIntegration(String cityName){
    return  getReturnInfo(getWeatherByCity(getCityCode(cityName)));
    }
}

其中的 getWeekAddOne(String week)和 getDateAddOne(String datest)方法是因爲中國氣象局提供的接口返回的json中只有當天的日期和星期,但是有六天的天氣情況(http://m.weather.com.cn/data/101010100.html)

所以要得到得到後兩天的日期和星期.

實現的效果 就是發送三天的天氣預報,點擊就進入中國氣象局網站.

發佈了12 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章