阿里天气数据接口调用实现(Java和JS)

来源:互联网 发布:js绑定事件on方法 编辑:程序博客网 时间:2024/05/22 17:30

Java实现方式

主要代码:

package com.wheather;import java.util.HashMap;import java.util.Map;import org.apache.http.HttpResponse;import org.apache.http.util.EntityUtils;/** * 根据经度和纬度获取天气 * @author znph_张春玲 * */public class AliWheather {    public static void main(String[] args) {        String host = "https://ali-weather.showapi.com";        String path = "/gps-to-weather";        String method = "GET";        // appcode是你自己申请得到的        String appcode = "acacbfc4fac247384439033848332996b28490cd77c8be";        Map<String, String> headers = new HashMap<String, String>();        headers.put("Authorization", "APPCODE " + appcode);        Map<String, String> querys = new HashMap<String, String>();        // 获取几天的数据        querys.put("from", "5");        // 经纬度        querys.put("lat", "40.242266");        querys.put("lng", "116.2278");        //         querys.put("need3HourForcast", "0");        querys.put("needAlarm", "0");        querys.put("needHourData", "0");        querys.put("needIndex", "0");        querys.put("needMoreDay", "0");        try {            /**             * 重要提示如下: HttpUtils请从             * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java             * 下载             *             * 相应的依赖请参照             * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml             */            HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);            System.out.println(response.toString());            System.out.println("123456789");            // 获取response的body            System.out.println(EntityUtils.toString(response.getEntity()));            System.out.println("end---");        } catch (Exception e) {            e.printStackTrace();        }    }}

调用的HttpUtils代码:

package com.wheather;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.List;import java.util.Map;import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import org.apache.commons.lang3.StringUtils;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpDelete;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpPut;import org.apache.http.entity.ByteArrayEntity;import org.apache.http.entity.StringEntity;import org.apache.http.message.BasicNameValuePair;public class HttpUtils {    /**     * get     *      * @param host     * @param path     * @param method     * @param headers     * @param querys     * @return     * @throws Exception     */    public static HttpResponse doGet(String host, String path, String method,             Map<String, String> headers,             Map<String, String> querys)            throws Exception {              HttpClient httpClient = wrapClient(host);        HttpGet request = new HttpGet(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {            request.addHeader(e.getKey(), e.getValue());        }        return httpClient.execute(request);    }    /**     * post form     *      * @param host     * @param path     * @param method     * @param headers     * @param querys     * @param bodys     * @return     * @throws Exception     */    public static HttpResponse doPost(String host, String path, String method,             Map<String, String> headers,             Map<String, String> querys,             Map<String, String> bodys)            throws Exception {              HttpClient httpClient = wrapClient(host);        HttpPost request = new HttpPost(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {            request.addHeader(e.getKey(), e.getValue());        }        if (bodys != null) {            List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();            for (String key : bodys.keySet()) {                nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));            }            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");            formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");            request.setEntity(formEntity);        }        return httpClient.execute(request);    }       /**     * Post String     *      * @param host     * @param path     * @param method     * @param headers     * @param querys     * @param body     * @return     * @throws Exception     */    public static HttpResponse doPost(String host, String path, String method,             Map<String, String> headers,             Map<String, String> querys,             String body)            throws Exception {              HttpClient httpClient = wrapClient(host);        HttpPost request = new HttpPost(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {            request.addHeader(e.getKey(), e.getValue());        }        if (StringUtils.isNotBlank(body)) {            request.setEntity(new StringEntity(body, "utf-8"));        }        return httpClient.execute(request);    }    /**     * Post stream     *      * @param host     * @param path     * @param method     * @param headers     * @param querys     * @param body     * @return     * @throws Exception     */    public static HttpResponse doPost(String host, String path, String method,             Map<String, String> headers,             Map<String, String> querys,             byte[] body)            throws Exception {              HttpClient httpClient = wrapClient(host);        HttpPost request = new HttpPost(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {            request.addHeader(e.getKey(), e.getValue());        }        if (body != null) {            request.setEntity(new ByteArrayEntity(body));        }        return httpClient.execute(request);    }    /**     * Put String     * @param host     * @param path     * @param method     * @param headers     * @param querys     * @param body     * @return     * @throws Exception     */    public static HttpResponse doPut(String host, String path, String method,             Map<String, String> headers,             Map<String, String> querys,             String body)            throws Exception {              HttpClient httpClient = wrapClient(host);        HttpPut request = new HttpPut(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {            request.addHeader(e.getKey(), e.getValue());        }        if (StringUtils.isNotBlank(body)) {            request.setEntity(new StringEntity(body, "utf-8"));        }        return httpClient.execute(request);    }    /**     * Put stream     * @param host     * @param path     * @param method     * @param headers     * @param querys     * @param body     * @return     * @throws Exception     */    public static HttpResponse doPut(String host, String path, String method,             Map<String, String> headers,             Map<String, String> querys,             byte[] body)            throws Exception {              HttpClient httpClient = wrapClient(host);        HttpPut request = new HttpPut(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {            request.addHeader(e.getKey(), e.getValue());        }        if (body != null) {            request.setEntity(new ByteArrayEntity(body));        }        return httpClient.execute(request);    }    /**     * Delete     *       * @param host     * @param path     * @param method     * @param headers     * @param querys     * @return     * @throws Exception     */    public static HttpResponse doDelete(String host, String path, String method,             Map<String, String> headers,             Map<String, String> querys)            throws Exception {              HttpClient httpClient = wrapClient(host);        HttpDelete request = new HttpDelete(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {            request.addHeader(e.getKey(), e.getValue());        }        return httpClient.execute(request);    }    private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {        StringBuilder sbUrl = new StringBuilder();        sbUrl.append(host);        if (!StringUtils.isBlank(path)) {            sbUrl.append(path);        }        if (null != querys) {            StringBuilder sbQuery = new StringBuilder();            for (Map.Entry<String, String> query : querys.entrySet()) {                if (0 < sbQuery.length()) {                    sbQuery.append("&");                }                if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {                    sbQuery.append(query.getValue());                }                if (!StringUtils.isBlank(query.getKey())) {                    sbQuery.append(query.getKey());                    if (!StringUtils.isBlank(query.getValue())) {                        sbQuery.append("=");                        sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));                    }                                   }            }            if (0 < sbQuery.length()) {                sbUrl.append("?").append(sbQuery);            }        }        return sbUrl.toString();    }    private static HttpClient wrapClient(String host) {        HttpClient httpClient = new DefaultHttpClient();        if (host.startsWith("https://")) {            sslClient(httpClient);        }        return httpClient;    }    private static void sslClient(HttpClient httpClient) {        try {            SSLContext ctx = SSLContext.getInstance("TLS");            X509TrustManager tm = new X509TrustManager() {                public X509Certificate[] getAcceptedIssuers() {                    return null;                }                public void checkClientTrusted(X509Certificate[] xcs, String str) {                }                public void checkServerTrusted(X509Certificate[] xcs, String str) {                }            };            ctx.init(null, new TrustManager[] { tm }, null);            SSLSocketFactory ssf = new SSLSocketFactory(ctx);            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);            ClientConnectionManager ccm = httpClient.getConnectionManager();            SchemeRegistry registry = ccm.getSchemeRegistry();            registry.register(new Scheme("https", 443, ssf));        } catch (KeyManagementException ex) {            throw new RuntimeException(ex);        } catch (NoSuchAlgorithmException ex) {            throw new RuntimeException(ex);        }    }}

二 JS实现方式

var storageKey = "weather";var oldWeatherTimeKey = "oldTime";var addressKey = "address";// 根据经纬度从阿里获取天气数据function getWeatherMsg(lon, lat) {    var url = "https://ali-weather.showapi.com/gps-to-weather?from=5&lat=" + lat + "&lng=" + lon + "&need3HourForcast=0&needAlarm=0&needHourData=0&needIndex=0&needMoreDay=1";    $.ajax({        url : url,        type : "get",        beforeSend : function(req) {            req.setRequestHeader("Authorization", "APPCODE acacbfc4fac24722996q34b284935353562340cd77c8be");        },        dataType : "json",        success : function(data) {            // 加入缓存            localStorage.setItem(storageKey, JSON.stringify(data));            localStorage.setItem(oldWeatherTimeKey, new Date().getTime());            // 时间加入            //storage.setItem(oldWeatherTimeKey, new Date());            // 展示天气数据            showWeatherMsg(data);        },        error : function(e) {            alert("网络异常,请重试");        }    });}
原创粉丝点击