Android 大众点评的接入

这里介绍的是大众点评的团购中的一个接口。就是全部团购信息,其它的接口的实现是大同小异的。

首先,登录大众点评的开发平台->大众点评 。

然后获取到自己的应用的appkey和secret。这个是开发必备的。能够下载大众点评提供的demo->demo 。

获取全部的团购信息:

DZDPApiTool.java 大众点评提供的Api工具类(请求api -> requestApi这种方法)

public class DZDPApiTool {
	/**
     * 获取请求字符串
     * 
     * @param appKey
     * @param secret
     * @param paramMap
     * @return
     */
    public static String getQueryString(String appKey, String secret, Map<String, String> paramMap)
    {
        String sign = sign(appKey, secret, paramMap);

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("appkey=").append(appKey).append("&sign=").append(sign);
        for (Entry<String, String> entry : paramMap.entrySet())
        {
            stringBuilder.append('&').append(entry.getKey()).append('=').append(entry.getValue());
        }
        String queryString = stringBuilder.toString();
        return queryString;
    }

    /**
     * 获取请求字符串,參数值进行UTF-8处理
     * 
     * @param appKey
     * @param secret
     * @param paramMap
     * @return
     */
    public static String getUrlEncodedQueryString(String appKey, String secret, Map<String, String> paramMap)
    {
        String sign = sign(appKey, secret, paramMap);

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("appkey=").append(appKey).append("&sign=").append(sign);
        for (Entry<String, String> entry : paramMap.entrySet())
        {
            try
            {
                stringBuilder.append('&').append(entry.getKey()).append('=').append(URLEncoder.encode(entry.getValue(),
                                                                                                      "UTF-8"));
            }
            catch (UnsupportedEncodingException e)
            {
            }
        }
        String queryString = stringBuilder.toString();
        return queryString;
    }

    /**
     * 请求API
     * 
     * @param apiUrl
     * @param appKey
     * @param secret
     * @param paramMap
     * @return
     */
    public static String requestApi(String apiUrl, String appKey, String secret, Map<String, String> paramMap)
    {
        String queryString = getQueryString(appKey, secret, paramMap);

        StringBuffer response = new StringBuffer();
        HttpClientParams httpConnectionParams = new HttpClientParams();
        httpConnectionParams.setConnectionManagerTimeout(1000);
        HttpClient client = new HttpClient(httpConnectionParams);
        HttpMethod method = new GetMethod(apiUrl);

        try
        {
            if (queryString != null && !queryString.isEmpty())
            {
                // Encode query string with UTF-8
                String encodeQuery = URIUtil.encodeQuery(queryString, "UTF-8");
                method.setQueryString(encodeQuery);
            }

            client.executeMethod(method);
            BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), "UTF-8"));
            String line = null;
            while ((line = reader.readLine()) != null)
            {
                response.append(line).append(System.getProperty("line.separator"));
            }
            reader.close();
        }
        catch (URIException e)
        {
        }
        catch (IOException e)
        {
        }
        finally
        {
            method.releaseConnection();
        }
        return response.toString();

    }

    /**
     * 签名
     * 
     * @param appKey
     * @param secret
     * @param paramMap
     * @return
     */
    public static String sign(String appKey, String secret, Map<String, String> paramMap)
    {
        // 參数名排序
        String[] keyArray = paramMap.keySet().toArray(new String[0]);
        Arrays.sort(keyArray);

        // 拼接參数
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(appKey);
        for (String key : keyArray)
        {
            stringBuilder.append(key).append(paramMap.get(key));
        }

        stringBuilder.append(secret);
        String codes = stringBuilder.toString();

        // SHA-1签名
        // For Android
        String sign = new String(Hex.encodeHex(DigestUtils.sha(codes))).toUpperCase();

        return sign;
    }
}
然后调用接口

Map<String, String> paramMap = new HashMap<String, String>();
					paramMap.put("city", city);
					paramMap.put("limit", 1);
					paramMap.put("page", offset + "");
					paramMap.put("region", region);

DZDPApiTool.requestApi(http://api.dianping.com/v1/deal/find_deals, appkey, sign, paramMap);
參数:(引用大众点评)

  • 必选參数

    名称 类型 说明
    appkey string App Key,应用的唯一标识
    sign string 请求签名,生成方式见《API请求签名生成文档》
    city string 包括团购信息的城市名称。可选范围见相关API返回结果
  • 可选參数

    名称 类型 说明
    destination_city string 指定目的地城市名称。适用于“酒店”、“旅游”等分类,可选范围见相关API返回结果
    latitude float 纬度坐标,须与经度坐标同一时候传入
    longitude float 经度坐标,须与纬度坐标同一时候传入
    radius int 搜索半径,单位为米,最小值1,最大值5000。如不传入默觉得1000
    region string 包括团购信息的城市区域名,可选范围见相关API返回结果(不含返回结果中包括的城市名称信息)
    category string 包括团购信息的分类名,支持多个category合并查询,多个category用逗号切割。

    可选范围见相关API返回结果

    is_local int 依据是否是本地单来筛选返回的团购。1:是。0:不是
    keyword string 关键词,搜索范围包含商户名、商品名、地址等
    sort int 结果排序,1:默认,2:价格低优先。3:价格高优先。4:购买人数多优先,5:最新公布优先。6:即将结束优先。7:离经纬度坐标距离近优先
    limit int 每页返回的团单结果条目数上限。最小值1,最大值40,如不传入默觉得20
    page int 页码。如不传入默觉得1,即第一页
    format string 返回数据格式,可选值为json或xml,如不传入,默认值为json




posted @ 2017-05-12 10:39  lytwajue  阅读(345)  评论(0编辑  收藏  举报