中间件课程学习(2)——Rocketmq

api接口翻译

百度翻译开放平台(baidu.com)

 

用签名 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)

<b>|</b>

t2.get("instruction")).replaceAll("        ", ""));

    }

}

因为最后输出的结果有<b>和</b>所以要用正则表达替换掉他们

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值