api接口翻译
用签名 sign 加密接口加密方法:
(appid+翻译的内容+salt 随机值+密钥)作 MD5运算
String appid="20240401002012048";//appid
String salt = "1435660288";//随机数,可以自己更改
String key = "dezjtMXPpLZ7a9Pru4Cr";//密钥
Scanner scanner = new Scanner(System.in);
String sign = MD5(appid+query+salt+key);
URL url = new
URL("https://api.fanyi.baidu.com/api/trans/vip/translate?q=" +query+
"&from=auto&to=zh&appid=" +appid+
"&salt=" +salt+
"&sign=" +sign
);
把整个过程封装成函数
public static String MD5(String input) { if(input == null || input.length() == 0) { return null; } try { MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(input.getBytes()); byte[] byteArray = md5.digest();
BigInteger bigInt = new BigInteger(1, byteArray); // 参数16表示16进制 String result = bigInt.toString(16); // 不足32位高位补零 while(result.length() < 32) { result = "0" + result; } return result; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } |
发送请求,返回的字段中dst字段为翻译的结果
JSONObject jobj = JSON.parseObject(content.toString());
JSONArray value = (JSONArray) jobj.get("trans_result"); JSONObject jsonObject = (JSONObject) value.get(0); in.close(); con.disconnect(); return (String) jsonObject.get("dst");
封装函数 Translate(String query),中间件程序直接调用该函数
api接口导航
效果
输入起始点和终止点的经纬度坐标,自动输出导航路线
Step1:地理逆编码输出经纬度对应的位置
全球逆地理编码rgc 反 geo 检索 | 百度地图 API SDK (baidu.com)
{"result":{"formatted_address":"北京市门头沟区 S3701(京蔚高
速)","business":"","sematic_description":"","cityCode":131,"roads":[],"formatted_add ress_poi":"","location":{"lng":116.0126867033211,"lat":40.00715402160796},"edz":
{"name":""},"poiRegions":[],"pois":[],"addressComponent":{"city_level":2,"country"
:"中国","town":"妙峰山镇","distance":"","city":"北京市
","adcode":"110109","country_code_iso":"CHN","country_code_iso2":"CN","countr y_code":0,"town_code":"110109108","province":"北京市","street":"S3701(京蔚高速)","district":"门头沟区","street_number":"","direction":""}},"status":0}
位置名字在 result 字段里面的字段里获取起始地点名字
String ak = "9pr6nzTlDUdGMDsb5zjlOM3GcfzPr5i3"; System.out.println("请输入起始位置经纬度坐标"); Scanner scanner = new Scanner(System.in); Double startx = scanner.nextDouble(); Double starty = scanner.nextDouble(); URL url = new URL("https://api.map.baidu.com/reverse_geocoding/v3/?ak="+ak+"&output =json&coordtype=wgs84ll&location="+startx+","+starty ); |
StringBuilder json = new StringBuilder(); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine1; StringBuffer content = new StringBuffer(); while ((inputLine1 = in.readLine()) != null) { content.append(inputLine1); } JSONObject jobj = JSON.parseObject(content.toString()); System.out.println(jobj); JSONObject value = (JSONObject) jobj.get("result"); in.close(); con.disconnect(); System.out.println("起始位置名字:"); System.out.println(value.get("formatted_address")); |
获取目的地名字过程与此类似
Step2:输出路线共有多少条
轻量级路线规划 | 百度地图 API SDK (baidu.com)
System.out.println("规划步行路线"); url = new URL("https://api.map.baidu.com/directionlite/v1/walking?origin="+star tx+","+starty+"&destination="+endx+","+endy+"&ak="+ak); json = new StringBuilder(); con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine3; content = new StringBuffer(); while ((inputLine3 = in.readLine()) != null) { content.append(inputLine3); } in.close(); con.disconnect(); jobj = JSON.parseObject(content.toString()); value = (JSONObject) jobj.get("result");
JSONArray routes = (JSONArray) value.get("routes"); System.out.println(routes.size()); |
JSONArray 存放不同的路线,所以多少条路线就是routes.size()
Step3:循环输出每条路线的每条距离、长度和每一步
for(int i=0;i<routes.size();i++){//循环输出每条路线 JSONObject t1 = (JSONObject) routes.get(i); System.out.println("第"+(i+1)+"条路线"); System.out.println("距离:"+t1.get("distance")+"米"); System.out.println("耗时:"+t1.get("duration")+"秒"); JSONArray steps = (JSONArray) t1.get("steps"); for(int j=0;j<steps.size();j++){//循环输出每条路线的每一段 System.out.println("第"+(j+1)+"段"); JSONObject t2 = (JSONObject) steps.get(j); System.out.println(((String)
t2.get("instruction")).replaceAll(" ", "")); } } |
因为最后输出的结果有<b>和</b>所以要用正则表达替换掉他们