public void Awake() {
StartCoroutine(GetLocationInfoNew());
}
/// <summary>
/// 利用bilibili的接口通过ip直接获取城市信息
/// </summary>
IEnumerator GetLocationInfoNew() {
//UnityWebRequest publicIpReq = UnityWebRequest.Get(@"https://api.live.bilibili.com/client/v1/Ip/getInfoNew");
var publicIpReq = new UnityWebRequest("https://api.live.bilibili.com/client/v1/Ip/getInfoNew", UnityWebRequest.kHttpVerbGET);
publicIpReq.downloadHandler = new DownloadHandlerBuffer();
yield return publicIpReq.SendWebRequest();
if (!string.IsNullOrEmpty(publicIpReq.error)) {
Debug.Log($"获取城市信息失败:{publicIpReq.error}");
yield break;
}
var info = publicIpReq.downloadHandler.text;
Debug.Log(info);
//将json解析为object
var resData = JsonUtility.FromJson<ResponseRootData>(info);
Debug.Log($"address:{resData.data.addr}|province:{resData.data.province}|city:{resData.data.city}");
}
#region 用于接收返回值json的反序列化数据
[System.Serializable]
public class ResponseRootData {
public int code;
public string message;
public ResponseData data;
}
[System.Serializable]
public class ResponseData {
public string addr;
public string country;
public string province;
public string city;
public string isp;
public string latitude;
public string longitude;
}
#endregion
lua代码
local info = request.downloadHandler.text
log:Info(info)
local json_parser_ = RapidJsonParser.new()
info = json_parser_:Decode(info)
if IsNull(info) or IsNull(info.data) then
return
end
local addr = info.data.addr
local city = info.data.city
local province = info.data.province
if IsNull(addr) or IsNull(city) or IsNull(province) then
return
end
log:Info("IP:" .. addr .. "|城市:" .. city .. "|省份:" .. province)
1.2 利用baidu api 【配额超限,需要扩充配额,需要联系官方】
string url = "http://api.map.baidu.com/location/ip?ak=bretF4dm6W5gqjQAXuvP0NXW6FeesRXb&coor=bd09ll";
void Start() {
StartCoroutine(Request());
}
IEnumerator Request() {
WWW www = new WWW(url);
yield return www;
if (string.IsNullOrEmpty(www.error)) {
//TODO:结果为:{"status":302,"message":"天配额超限,限制访问"} ,
Debug.Log(www.text);
ResponseBody req = JsonConvert.DeserializeObject<ResponseBody>(www.text);
if (req.content != null) {
Debug.Log(req.content.address_detail.city + " X: " + req.content.point.x + " Y: " + req.content.point.x);
}
}
else {
Debug.Log(www.error);
}
}
public class ResponseBody {
public string address;
public Content content;
public int status;
}
public class Content {
public string address;
public Address_Detail address_detail;
public Point point;
}
public class Address_Detail {
public string city;
public int city_code;
public string district;
public string province;
public string street;
public string street_number;
public Address_Detail(string city, int city_code, string district, string province, string street, string street_number) {
this.city = city;
this.city_code = city_code;
this.district = district;
this.province = province;
this.street = street;
this.street_number = street_number;
}
}
public class Point {
public string x;
public string y;
public Point(string x, string y) {
this.x = x;
this.y = y;
}
}