You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gym/BaiduUtil.java

109 lines
5.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.utils; // 声明包名
// 导入用于缓冲读取字符流的类
import java.io.BufferedReader;
// 导入用于将字节流转换为字符流的类
import java.io.InputStreamReader;
// 导入用于创建 HTTP 连接的类
import java.net.HttpURLConnection;
// 导入用于表示 URL 的类
import java.net.URL;
// 导入用于创建哈希映射的类
import java.util.HashMap;
// 导入用于表示列表的接口
import java.util.List;
// 导入用于表示映射的接口
import java.util.Map;
// 导入用于处理 JSON 对象的类
import org.json.JSONObject;
// 定义一个公共类 BaiduUtil
public class BaiduUtil {
// 静态方法,根据经纬度获取省市区信息
public static Map<String, String> getCityByLonLat(String key, String lng, String lat) {
// 将纬度和经度拼接成符合要求的字符串
String location = lat + "," + lng;
try {
// 拼接请求的 URL
String url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=" + key + "&output=json&coordtype=wgs84ll&location=" + location;
// 调用 HttpClientUtils 类的 doGet 方法发送请求并获取结果
String result = HttpClientUtils.doGet(url);
// 将返回的结果字符串转换为 JSON 对象
JSONObject o = new JSONObject(result);
// 创建一个用于存储地区信息的哈希映射
Map<String, String> area = new HashMap<>();
// 从 JSON 对象中提取省份信息并放入映射
area.put("province", o.getJSONObject("result").getJSONObject("addressComponent").getString("province"));
// 从 JSON 对象中提取城市信息并放入映射
area.put("city", o.getJSONObject("result").getJSONObject("addressComponent").getString("city"));
// 从 JSON 对象中提取区域信息并放入映射
area.put("district", o.getJSONObject("result").getJSONObject("addressComponent").getString("district"));
// 从 JSON 对象中提取街道信息并放入映射
area.put("street", o.getJSONObject("result").getJSONObject("addressComponent").getString("street"));
// 返回存储地区信息的映射
return area;
} catch (Exception e) {
// 打印异常堆栈信息
e.printStackTrace();
}
// 若出现异常则返回 null
return null;
}
// 静态方法,用于获取 API 访问令牌
public static String getAuth(String ak, String sk) {
// 定义获取令牌的基础 URL
String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
// 拼接完整的获取令牌的 URL
String getAccessTokenUrl = authHost
// 固定参数 grant_type
+ "grant_type=client_credentials"
// 百度云官网获取的 API Key
+ "&client_id=" + ak
// 百度云官网获取的 Secret Key
+ "&client_secret=" + sk;
try {
// 创建 URL 对象
URL realUrl = new URL(getAccessTokenUrl);
// 打开与 URL 之间的连接
HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
// 设置请求方法为 GET
connection.setRequestMethod("GET");
// 建立连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有响应头字段
for (String key : map.keySet()) {
// 打印响应头字段及其对应的值
System.err.println(key + "--->" + map.get(key));
}
// 创建 BufferedReader 用于读取响应内容
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
// 用于存储响应结果的字符串
String result = "";
// 用于存储每行响应内容的字符串
String line;
// 逐行读取响应内容并拼接
while ((line = in.readLine()) != null) {
result += line;
}
// 打印响应结果
System.err.println("result:" + result);
// 将响应结果字符串转换为 JSON 对象
org.json.JSONObject jsonObject = new org.json.JSONObject(result);
// 从 JSON 对象中提取访问令牌
String access_token = jsonObject.getString("access_token");
// 返回访问令牌
return access_token;
} catch (Exception e) {
// 打印获取令牌失败的提示信息
System.err.printf("获取token失败");
// 打印异常堆栈信息
e.printStackTrace(System.err);
}
// 若出现异常则返回 null
return null;
}
}