Unity 接入高德开放API - 天气查询

简介: Unity 接入高德开放API - 天气查询

接入接口前首先申请应用密钥Key,登录高德开发者开放平台,创建应用,获取密钥。

image.gif

天气查询API服务地址:https://restapi.amap.com/v3/weather/weatherInfo?parameters,需以Get请求方式调用,parameters代表所有参数,参数以&进行分隔。

image.gif

前两个参数为必填参数,extensions传入base代表实况天气,all代表预报天气,定义枚举用以区分:

publicenumGetDataType{
/// <summary>/// 获取实况天气/// </summary>Lives,
/// <summary>/// 获取预报天气/// </summary>Forecast}

image.gif

这里我们以JSON格式解析接口响应数据,所以output传入JSON。最终封装Weather天气类:

usingSystem;
usingUnityEngine;
usingSystem.Collections;
usingUnityEngine.Networking;
[AddComponentMenu("")]
publicclassWeather : MonoBehaviour{
privatestaticWeatherinstance;
publicstaticWeatherInstance    {
get        {
if (instance==null)
            {
instance=newGameObject("[Weather]").AddComponent<Weather>();
DontDestroyOnLoad(instance);
            }
returninstance;
        }
    }
//密钥 于高德开发者平台创建应用申请获得privateconststringkey="";
publicenumGetDataType    {
/// <summary>/// 获取实况天气/// </summary>Lives,
/// <summary>/// 获取预报天气/// </summary>Forecast    }
/// <summary>/// 获取天气数据/// </summary>/// <param name="city">城市编码</param>/// <param name="callback">回调函数</param>publicvoidGet(stringcity, GetDataTypetype, Action<string>callback)
    {
StartCoroutine(SendWebRequest(city, type, callback));
    }
privateIEnumeratorSendWebRequest(stringcity, GetDataTypetype, Action<string>callback)
    {
//url拼接stringurl=string.Format("https://restapi.amap.com/v3/weather/weatherInfo?key={0}&city={1}&extensions={2}", key, city, type==GetDataType.Lives?"base" : "all");
//GET方式调用API服务using (UnityWebRequestrequest=UnityWebRequest.Get(url))
        {
DateTimebeginTime=DateTime.Now;
yieldreturnrequest.SendWebRequest();
DateTimeendTime=DateTime.Now;
if (request.result==UnityWebRequest.Result.Success)
            {
Debug.Log($"{beginTime} 发起网络请求 于 {endTime} 收到响应:\r\n{request.downloadHandler.text}");
callback.Invoke(request.downloadHandler.text);
            }
else            {
Debug.Log($"发起网络请求失败:{request.error}");
            }
        }
    }
privatevoidOnDestroy()
    {
instance=null;
    }
}

image.gif

调用实况天气数据测试(320115代表南京市江宁区,具体城市区域编码参考城市编码表,于高德开放平台下载):

Weather.Instance.Get("320115", Weather.GetDataType.Lives, data=> { });

image.gif

image.gif

调用预测天气数据测试:

Weather.Instance.Get("320115", Weather.GetDataType.Forecast, data=> { });

image.gif

image.gif

最终运用接口响应的数据,需要定义响应数据结构,将字符串数据反序列化为我们定义的类,参数说明:

image.gif

usingSystem;
[Serializable]
/// <summary>/// 天气API响应数据结构/// </summary>publicclassWeatherResponse{
/// <summary>/// 返回状态 1成功/0失败/// </summary>publicintstatus;
/// <summary>/// 返回结果总数目/// </summary>publicintcount;
/// <summary>/// 返回的状态信息/// </summary>publicstringinfo;
/// <summary>/// 返回状态说明 10000代表正确/// </summary>publicintinfoCode;
/// <summary>/// 实况天气数据信息/// </summary>publicWeatherLive[] lives;
/// <summary>/// 预报天气信息数据/// </summary>publicWeatherForecast[] forecast;
}
[Serializable]
/// <summary>/// 实况天气数据/// </summary>publicclassWeatherLive{
/// <summary>/// 省份名/// </summary>publicstringprovince;
/// <summary>/// 城市名/// </summary>publicstringcity;
/// <summary>/// 区域编码/// </summary>publicstringadcode;
/// <summary>/// 天气现象(汉字描述)/// </summary>publicstringweather;
/// <summary>/// 实时气温 单位:摄氏度/// </summary>publicinttemperature;
/// <summary>///风向描述 /// </summary>publicstringwinddirection;
/// <summary>/// 风力级别 单位:级/// </summary>publicintwindpower;
/// <summary>/// 空气适度/// </summary>publicinthumidity;
/// <summary>/// 数据发布时间/// </summary>publicstringreporttime;
}
[Serializable]
/// <summary>/// 预报天气数据/// </summary>publicclassWeatherForecast{
/// <summary>/// 省份名称/// </summary>publicstringprovince;
/// <summary>/// 城市名称/// </summary>publicstringcity;
/// <summary>/// 城市编码/// </summary>publicintadcode;
/// <summary>/// 预报发布时间/// </summary>publicstringreporttime;
/// <summary>/// 预报数据列表/// </summary>publicCastInfo[] casts;
}
[Serializable]
publicclassCastInfo{
/// <summary>/// 日期/// </summary>publicstringdate;
/// <summary>/// 星期几/// </summary>publicintweek;
/// <summary>/// 白天天气现象/// </summary>publicstringdayweather;
/// <summary>/// 晚上天气现象/// </summary>publicstringnightweather;
/// <summary>/// 白天温度/// </summary>publicintdaytemp;
/// <summary>/// 晚上温度/// </summary>publicintnighttemp;
/// <summary>/// 白天风向/// </summary>publicstringdaywind;
/// <summary>/// 晚上风向/// </summary>publicstringnightwind;
/// <summary>/// 白天风力/// </summary>publicintdaypower;
/// <summary>/// 晚上风力/// </summary>publicintnightpower;
}

image.gif

使用Unity内置序列化/反序列化工具类JsonUtility将数据反序列化:

Weather.Instance.Get("320115", Weather.GetDataType.Forecast, data=>{
WeatherResponseresponse=JsonUtility.FromJson<WeatherResponse>(data);
//TODO});

image.gif

目录
相关文章
|
1月前
|
API
国外地区经纬度查询免费API接口教程
此接口用于查询国外地区的经纬度信息,支持POST和GET请求方式。需提供用户ID、用户KEY、省级名称及具体地点。返回数据包括地区名称(中英文)、国家代码及经纬度等详细信息。示例请求与响应数据详见文档。
90 29
|
1月前
|
API
车牌号归属地查询免费API接口教程
本接口用于根据车牌号查询社会车辆的归属地,不支持军车、使馆等特殊车牌。请求地址为 `https://cn.apihz.cn/api/other/chepai.php`,支持 POST 和 GET 请求。请求参数包括 `id`、`key` 和 `words`,返回数据包含车牌归属地信息。示例请求:`https://cn.apihz.cn/api/other/chepai.php?id=88888888&key=88888888&words=川B1234`。
68 21
|
1月前
|
API
天气预报15日-墨迹天气-地址查询版免费API接口教程
该接口提供15日天气预报服务,通过指定地址获取墨迹天气预报。支持POST或GET请求,需提供用户ID、KEY、省份名称及地点等参数。返回数据包括15天内每天的天气详情,如最高最低温度、天气变化及图标等。示例中使用的ID和KEY为公共测试账号,建议使用个人账号以获得更高调用频率。
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
GLM-4V-Flash:智谱 AI 免费开放的图像理解大模型 API 接口
智谱AI推出的GLM-4V-Flash是一款专注于图像理解的免费开放大模型,提供API接口支持用户上传图片URL或Base64编码图片获取详细的图像描述。该模型通过深度学习和卷积神经网络技术,简化了图像分析流程,提高了开发效率,适用于内容审核、辅助视障人士、社交媒体、教育和电子商务等多个应用场景。
85 14
GLM-4V-Flash:智谱 AI 免费开放的图像理解大模型 API 接口
|
19天前
|
网络协议 API
检测指定TCP端口开放状态免费API接口教程
此API用于检测指定TCP端口是否开放,支持POST/GET请求。需提供用户ID、KEY、目标主机,可选指定端口(默认80)和地区(默认国内)。返回状态码、信息提示、检测主机、端口及状态(开放或关闭)。示例中ID和KEY为公共测试用,建议使用个人ID和KEY以享受更高调用频率。
36 14
|
1月前
|
API
全国行政区划查询免费API接口教程
该接口提供全国(不含港澳台)各级行政区划查询服务,适用于地址填写、资料登记等场景。支持5级划分:省、市、区县、乡镇、村。请求需提供用户ID、KEY及查询级别等参数,返回地名列表或错误信息。 示例中ID和KEY为公共测试用,建议使用个人ID和KEY以享受更高调用频率。
130 23
|
20天前
|
缓存 算法 API
查询域名WHOIS信息免费API接口教程
该API用于查询顶级域名的WHOIS信息,不支持国别域名和中文域名。通过POST或GET请求,需提供用户ID、KEY及待查询域名。返回信息包括域名状态、注册商、时间等详细数据。示例与文档见官网。
|
20天前
|
API
icp备案查询免费API接口教程
该接口用于查询指定域名的ICP备案信息,支持POST或GET请求方式。请求时需提供用户ID、用户KEY及待查询的域名,可选参数为查询通道。响应中包含状态码、消息内容、备案号、备案主体、域名及审核时间等信息。示例中提供了GET和POST请求方式及返回数据样例。
|
1月前
|
API
全国行政区划代码与经纬度查询免费API接口教程
该接口提供全国各行政区划代码及经纬度查询服务。通过POST或GET请求,输入用户ID、KEY及地点名称,可获取地区代码、省份、市级、区县级名称及经纬度等信息。示例URL:https://cn.apihz.cn/api/other/xzqhdm.php?id=88888888&key=88888888&sheng=北京&place=北京。返回数据包含状态码、信息提示及查询结果。
150 14
|
1月前
|
API
天气预报1天-中国气象局-地址查询版免费API接口教程
此接口提供中国气象局官方的当日天气信息,支持POST和GET请求,需提供用户ID、KEY、省份及具体地点。返回数据包括状态码、消息、天气详情等。示例中使用的ID与KEY为公共测试用,建议使用个人ID与KEY以享受更高调用频次。
下一篇
DataWorks