package com.iamberry.rst.utils; import com.iamberry.wechat.tools.HttpClient431Util; import net.sf.json.JSONObject; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; import java.util.Map; /** * Created by Administrator on 2017/8/15. */ @Component public class KuaiDi100 { private static Logger LOGGER = LoggerFactory.getLogger(KuaiDi100.class); private static String key = "29833628d495d7a5";//授权密匙key 百度的 /*private static String key = "06d6c2ea1bdb4ee9";//授权密匙key 自己的*/ /* */ public String logisticsConversions(String code){ if(code == null || code.equals("")){ return null; } switch (code){ case "sto": code = "shentong"; break; case "yto": code = "yuantong"; break; case "sf": code = "shunfeng"; break; case "ems": code = "ems"; break; case "eyb": code = "ems"; break; case "zto": code = "zhongtong"; break; case "zjs": code = "zhaijisong"; break; case "yunda": code = "yunda"; break; case "cces": code = "cces"; break; case "pick": code = "pick"; break; case "htky": code = "huitongkuaidi"; break; case "ttkdex": code = "tiantian"; break; case "stars": code = "xingchenjibian"; break; case "jd": code = "jd"; break; case "01": code = "01"; break; case "02": code = "01"; break; case "dbkd": code = "debangwuliu"; break; case "lianhaowuliu": code = "lianhaowuliu"; break; } return code; } /** * 快递对应代码 * EMS ems/eyb * 申通快递 shentong * 顺丰速运 shunfeng * 圆通速递 yuantong * 韵达快运 yunda * 中通快递 zhongtong * 百世快递 huitongkuaidi * 天天快递 tiantian * 宅急送 zhaijisong * 邮政国内包裹 youzhengguonei * 邮政国际包裹 youzhengguoji * EMS国际快递 emsguoji */ public static void main(String[] agrs){ KuaiDi100 kuaidi = new KuaiDi100(); System.out.println(kuaidi.getExpressInfo("ems","9754210807242")); } /** * 查询快递信息 * @param com 快递公司代码 * @param nu 快递单号 * @return */ public JSONObject getExpressInfo(String com , String nu){ JSONObject ret = null; try { com = logisticsConversions(com); StringBuilder sb = new StringBuilder(); sb.append("http://api.kuaidi100.com/api?id="); sb.append(KuaiDi100.key); sb.append("&com=").append(com); sb.append("&nu=").append(nu); sb.append("&show=0&muti=1&order=desc"); URL url= new URL(sb.toString()); URLConnection con=url.openConnection(); con.setAllowUserInteraction(false); InputStream urlStream = url.openStream(); String type = con.guessContentTypeFromStream(urlStream); String charSet=null; if (type == null) type = con.getContentType(); if (type == null || type.trim().length() == 0) return null; if(type.indexOf("charset=") > 0) charSet = type.substring(type.indexOf("charset=") + 8); byte b[] = new byte[10000]; int numRead = urlStream.read(b); String content = new String(b, 0, numRead, "UTF-8"); while (numRead != -1) { numRead = urlStream.read(b); if (numRead != -1) { //String newContent = new String(b, 0, numRead); String newContent = new String(b, 0, numRead, "UTF-8"); content += newContent; } } content = content.replaceAll(":null", ":\"\""); ret = JSONObject.fromObject(content); System.out.println(ret); urlStream.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ret; } /** * 该接口使用与收费的快递公司接口查询 * @param com 快递公司代码 * @param nu 快递单号 * @return */ public static String searchkuaiDiInfo(String com, String nu) { String content = ""; try { StringBuilder sb = new StringBuilder(); sb.append("http://www.kuaidi100.com/applyurl?key=").append(KuaiDi100.key); sb.append("&com=").append(com); sb.append("&nu=").append(nu); URL url = new URL(sb.toString()); URLConnection con = url.openConnection(); con.setAllowUserInteraction(false); InputStream urlStream = url.openStream(); byte b[] = new byte[10000]; int numRead = urlStream.read(b); content = new String(b, 0, numRead); while (numRead != -1) { numRead = urlStream.read(b); if (numRead != -1) { // String newContent = new String(b, 0, numRead); String newContent = new String(b, 0, numRead, "UTF-8"); content += newContent; } } urlStream.close(); } catch (Exception e) { e.printStackTrace(); System.out.println("快递查询错误"); } return content; } /**物流名称替换**/ public static String replace(String code) { String name = ""; switch (code){ case "sto": name= "申通快递"; break; case "yto": name= "圆通快递"; break; case "zto": name= "中通速递"; break; case "sf": name= "顺丰快递"; break; case "ems": name= "邮政EMS"; break; case "eyb": name= "E邮宝"; break; case "zjs": name= "宅急送"; break; case "yunda": name= "韵达快递"; break; case "cces": name= "cces快递"; break; case "pick": name= "上门提货"; break; case "htky": name= "汇通快递"; break; case "ttkdex": name= "天天快递"; break; case "stars": name= "星晨急便"; break; case "jd": name= "京东快递"; break; case "01": name= "其他"; break; case "02": name= "上门送货"; break; case "lbwl": name= "龙邦快递"; break; default: break; case "dbkd": name = "德邦快递"; break; } return name; } /** * 获取快递公司 * @param firm * @return */ public String getPostFirm(String firm) { String postFirm = ""; switch (firm) { case "sto":postFirm = "申通快递";break; case "yto":postFirm = "圆通快递";break; case "sf":postFirm = "顺丰快递";break; case "ems":postFirm = "邮政EMS";break; case "zto":postFirm = "中通快递";break; case "zjs":postFirm = "宅急送";break; case "yunda":postFirm = "韵达快递";break; case "cces":postFirm = "cces快递";break; case "pick":postFirm = "上门提货";break; case "htky":postFirm = "汇通快递";break; case "ttkdex":postFirm = "天天快递";break; case "stars":postFirm = "星晨急便";break; case "jd":postFirm = "京东快递";break; case "01":postFirm = "其他";break; case "02":postFirm = "上门送货";break; case "dbkd":postFirm = "德邦快递";break; default:postFirm = "申通快递";break; } return postFirm; } /** * 将快递100的物流公司编号转为rst的物流编号 * @return */ private String kuaidiToRstCode(String company){ String postFirm = ""; switch (company){ case "shentong":postFirm="STO";break; case "debangwuliu":postFirm="DBL";break; case "youzhengguonei":postFirm="YZBK";break; //9719606885204 省外 case "ems":postFirm="EMS";break; //1170100776910 省内 case "shunfeng":postFirm="SF";break; case "jd":postFirm="jd";break; case "youshuwuliu":postFirm="youshuwuliu";break; //优速 case "zhongtong":postFirm="zto";break; //优速 default: postFirm = company; LOGGER.error("未匹配到物流公司"); break; } return postFirm; } /** * 快递一百 * 根据物流单号查询快递公司--仅能查询快递公司,不能查询快递流程 * @param code * @return */ public String selectCourierCompany(String code) { String courierCompang=""; // Map requestMap = new HashMap(); // requestMap.put("LogisticCode",code); try { Map params = new HashMap(); params.put("nu", code); String url = "http://api.open.baidu.com/pae/common/api/Redirect"; // 发送请求 String html = HttpClient431Util.doGet(params, url); Document doc = Jsoup.parse(html); Element content = doc.getElementById("companyCode"); String value = content.val(); if(value == null || "".equals(value)){ LOGGER.info("=========快递单号:"+code+";查询不到快递公司"); }else{ value = kuaidiToRstCode(value); //转换物流方式 LOGGER.info("=========快递单号:"+code+";查询成功,快递公司:"+code+":"+value); } } catch (Exception e) { e.printStackTrace(); LOGGER.info("=========快递单号:"+code+";处理报错"); } return courierCompang; } /** * 写入文件 * @param path * @param s */ public static void writeTxt(String path,String s){ File file = new File(path); try{ FileWriter fw = new FileWriter(file, true); if(!file.exists()){ file.createNewFile(); } BufferedWriter bw = new BufferedWriter(fw); PrintWriter pw = new PrintWriter(bw); pw.println(s); pw.flush(); fw.flush(); pw.close(); fw.close(); }catch (Exception e){ e.printStackTrace(); } } }