Android 大众点评的接入

标签: android 大众点评 | 发表时间:2014-10-09 18:51 | 作者:qianqianyihao
出处:http://blog.csdn.net

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

首先,登录大众点评的开发平台-> 大众点评 。然后获取到自己的应用的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




作者:qianqianyihao 发表于2014-10-9 10:51:33 原文链接
阅读:0 评论:0 查看评论

相关 [android 大众点评] 推荐:

Android 大众点评的接入

- - CSDN博客推荐文章
这里介绍的是大众点评的团购中的一个接口,就是所有团购信息,其他的接口的实现是大同小异的. 首先,登录大众点评的开发平台-> 大众点评 . 然后获取到自己的应用的appkey和secret,这个是开发必备的. 可以下载大众点评提供的demo-> demo . DZDPApiTool.java 大众点评提供的Api工具类(请求api -> requestApi这个方法).

2010:数字盘点大众点评

- - 互联网旁观者
说明:这是一篇旧闻了,转载自大众点评的官方博客( http://blog.dianping.com/archives/77),基本数据还是很有参考意义的. 2010年,有您的支持和关注,大众点评网的各项业务获得高速发展:网站访问获得持续快速增长,成功开拓了团购这一新兴用户服务,并在手机应用这一新兴平台取得了一系列的突破.

口碑网VS大众点评,我的生活谁做主?大众点评!

- wangjia - Tech2IPO
HT实验室观点:口碑网与大众点评均是生活服务类软件,也都是希望为消费者提供一个评论分享、消费指南的平台. 且不管两家在线上线下的服务及数据库等建设如何,就安卓版的App本身来看,大众点评能给用户带来的帮助更大,其用户体验也更好. 因此可以说,我们的生活,暂且应该由大众点评来做主. 大众点评网的定位是“中国最大的本地搜索和城市消费门户网站”;口碑网的定位是“致力于打造生活服务领域的电子商务第一品牌”,并号称是“中国最大的生活搜索引擎”.

戴志康:“撼动大众点评”是个伪命题

- - 产品市场 - UCD大社区
我认为不要去撼动大众点评,它那个就像一本新华字典一样,你碰到不会的字词打开它看看. 所以我认为用大众点评的方式去打败大众点评,这是不可能的,也没必要去探讨. 能探讨的是,我们怎么样用一种差异化的方式在这个市场中赢得自己的一席之地. 口述/腾讯电商控股公司 戴志康. (本文是腾讯电商控股公司、discuz创始人戴志康在“产品家”沙龙的发言).

大众点评网:做O2O+LBS的精准营销

- - 行业资讯
   ●团购是最经典的O2O模式代表,但很多来也匆匆去也匆匆. 李开复曾在专栏公开发文说,“99%的团购网站都要死,不过大众点评例外.   ●底气何来?大众点评网创始人及CEO张涛称,“8年抗战都胜利了,我们坚持了9年. O2O加上LBS,绝对让大众点评如虎添翼.   ●O2O的实质是将发展线下商户、在线支付、营销效果检测这三件事在互联网上有了一个很好的结合.

大众点评数据平台架构变迁

- - leejun_2005的个人页面
最近和其他公司的同学对数据平台的发展题做了一些沟通,发现各自遇到的问题都类似,架构的变迁也有一定的相似性. 以下从 数据&架构&应用的角度对2012.07-2014.12期间大众点评数据平台的架构变迁做一个概括性的总结,希望对还处在数据平台发展初期的同学有一些帮助,欢迎线下沟通. 模型计算程序以python为主.

【干货】大众点评运维架构的图文详解

- - 运维技术的个人空间
今天分享专题大纲如图所示,从5个方面跟大家一起探讨:. 目前我们运维分为4个组,相信跟大部分公司一样,运维团队分为:应用运维、系统运维、运维开发和监控运维,当然还有DBA团队和安全团队,这里就不一一罗列了. 整个运维团队全算上目前是不到40人规模. 应用运维:负责支持线上业务,各自会负责对应的业务线,主要职能是保证线上业务稳定性和同开发共同支撑对应业务,以及线上服务管理和持续优化.

大众点评订单系统分库分表实践

- - 美团点评技术团队
原大众点评的订单单表早就已经突破两百G,由于查询维度较多,即使加了两个从库,优化索引,仍然存在很多查询不理想的情况. 去年大量抢购活动的开展,使数据库达到瓶颈,应用只能通过限速、异步队列等对其进行保护;业务需求层出不穷,原有的订单模型很难满足业务需求,但是基于原订单表的DDL又非常吃力,无法达到业务要求.

UAS:大众点评用户行为系统

- - IT瘾-dev
随着整个中国互联网下半场的到来,用户红利所剩无几,原来粗放式的发展模式已经行不通,企业的发展越来越趋向于精耕细作. 美团的价值观提倡以客户为中心,面对海量的用户行为数据,如何利用好这些数据,并通过技术手段发挥出数据的价值,提高用户的使用体验,是我们技术团队未来工作的重点. 大众点评在精细化运营层面进行了很多深度的思考,我们根据用户在App内的操作行为的频次和周期等数据,给用户划分了不同的生命周期,并且针对用户所处生命周期,制定了不同的运营策略,比如针对成长期的用户,主要运营方向是让其了解平台的核心功能,提高认知,比如写点评、分享、收藏等.

开发者眼中的大众点评开放平台:欲迎还拒

- - ITeye资讯频道
在经过了数月准备之后,大众点评正式宣布开放平台( developer.dianping.com). 这家被称为“慢公司”的互联网公司终于走出了开放的第一步,开始向第三方开放本地商户信息、最新点评、优惠、团购等内容. 一位开发者在详细了解开放细则之后向新浪科技深度吐槽,分享他眼中的大众点评开放平台. 以下为开发者口述,新浪创事记整理.