微信公众号开发(十五):位置消息处理器之周边搜索

续上
/**
 * 周边根据关键字搜索
 * google周边https://maps.googleapis.com/maps/api/place/search/xml?location={$latitude},{$longitude}&radius=3000&sensor=false&key=AIzaSyAoKznDSiW_PzkiRapITcwT-UzwbeMkN1I&language=zh-CN&keyword=餐馆
 * @author 熊诗言
 *
 */
public class BaiduZhoubianSearchService {
    public static final String url = "http://api.map.baidu.com/telematics/v3/local?location=LONGITUDE,LATITUDE&keyWord=KEYWORD&output=json&ak=4Dlcr5PebDTnRuIsv6kChkA5";
    @SuppressWarnings("unused")
    private static String httpRequest(String requestUrl) {
        StringBuffer buffer = new StringBuffer();
        try {
            URL url = new URL(requestUrl);
            HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
    
            httpUrlConn.setDoOutput(false);
            httpUrlConn.setDoInput(true);
            httpUrlConn.setUseCaches(false);
    
            httpUrlConn.setRequestMethod("GET");
            httpUrlConn.connect();
    
            // 将返回的输入流转换成字符串
            InputStream inputStream = httpUrlConn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            
             String str = null;
             while ((str = bufferedReader.readLine()) != null) {
                 buffer.append(str);
             }
             bufferedReader.close();
             inputStreamReader.close();
             // 释放资源
             inputStream.close();
             inputStream = null;
             httpUrlConn.disconnect();
            } catch (Exception e) {
                e.printStackTrace();
            }
        return buffer.toString();
     }
    @SuppressWarnings({ "static-access", "unchecked" })
    public static String searchZhoubian(String latitude,String longitude,String keyWord){
        
        String jsonString = null;
        try {
            String requestUrl = url.replaceAll("LONGITUDE", longitude)
                                .replaceAll("LATITUDE", latitude)
                                .replaceAll("KEYWORD", URLEncoder.encode(keyWord,"utf-8"));
            //System.out.println(requestUrl);
            jsonString = httpRequest(requestUrl);
            //System.out.println(jsonString);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        JSONObject object = JSONObject.fromObject(jsonString);
        
        /**
         * java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.xsy.weixin.domain.zhoubian.Place
         */
        Map<String, Class> classMap = new HashMap<String, Class>();  
        classMap.put("pointList", Place.class);
        classMap.put("link", Link.class);
        
        ZhoubianResult zhoubianResult = (ZhoubianResult) JSONObject.toBean(object,ZhoubianResult.class,classMap);
        AdditionalInformation add = null;
        StringBuffer buffer = new StringBuffer("我为您找到如下"+keyWord+"\n");
        List<Place> places = zhoubianResult.getPointList();
        int num = 0;
        for (Place place:places) {
            if(num++==2){
                break;
            }
            buffer.append("[").append(place.getName()).append("]\n[地址:").append(place.getAddress()).append("][距离:").append(place.getDistance()).append("]\n");
            add = place.getAdditionalInformation();
            if(null!=add){
                buffer.append("[价格:").append(add.getPrice()).append("][电话:").append(add.getTelephone()).append("]\n\n");
                //加上这一段就收不到信息。字数限制
                ///*
                List<Link> links = add.getLink();//网络链接
                if(null!=links){
                    for (int j = 0; j < links.size(); j++) {
                        String linkName = links.get(j).getName();
                        String linkUrl = links.get(j).getUrl();
                        //buffer.append("&lt;a href=&quot;"+linkUrl+"&quot;&gt;"+linkName+"&lt;/a&gt;\n");
                        buffer.append("<a href=\""+linkUrl+"\">"+linkName+"</a>\n");
                    }
                    buffer.append("\n\n");
                }else {
                    buffer.append("\n");
                }//*/
            }
        }
        return buffer.toString();
    }
    @Test
    public void testSearch() throws UnsupportedEncodingException{
        String string = searchZhoubian("41","122","酒店");
        System.out.println(string.getBytes("utf-8").length);
    }
}
public class ZhoubianResult {
    private String status;
  private int total;
  private int count;
  private List<Place> pointList;
  。。。。
}  
    
public class Place {
    private String name;
    private String cityName;
    private Location location;
    private String address;
    private int distance;
    private String district;
    private AdditionalInformation additionalInformation;
    private String type;
    。。。。
}

public class Location {
    private double lng;
    private double lat;
    。。。。
}


public class AdditionalInformation {
    private String name;
    private String telephone;
    private String address;
    private String price;
    private String tag;
    private List<Link> link;
    。。。。。
}


public class Link {
    private String name;
    private String url;
    。。。。
}

你可能感兴趣的:(微信公众号开发(十五):位置消息处理器之周边搜索)