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

目录
相关文章
|
2月前
|
缓存 JSON API
VIN车辆识别码查询车五项 API 实践指南:让每一俩车有迹可循(Python代码示例)
VIN(车辆识别代码)是全球唯一的17位汽车标识码,可快速获取车架号、发动机号、品牌型号等核心信息。在二手车交易、保险理赔、维修保养等场景中,准确解析VIN有助于提升效率与风控能力。本文介绍VIN码结构、适用场景,并提供Python调用示例及优化建议,助力企业实现车辆信息自动化核验。
446 1
|
2月前
|
JSON API PHP
近义词反义词查询API接口使用指南
本文详细介绍接口盒子提供的近义词反义词查询免费API接口的使用方法,涵盖PHP和Python两种语言的调用示例,适用于语言学习、内容创作及文本分析场景。
|
2月前
|
JSON API PHP
化学元素信息,元素周期表查询免费API完整指南
本接口提供权威化学元素的100+项参数查询服务,涵盖原子结构、物理性质、分布数据等科研级参数。支持中文名称、元素符号(区分大小写)或原子序数查询,适用于教育软件、化学工具和科研系统开发。数据版权归属接口盒子。
|
2月前
|
安全 API Python
详解手机状态查询API实战指南
手机状态查询API是一款高效接口,可实时识别手机号状态(实号、空号、风险号等),帮助企业筛选有效号码,提升业务触达率与客户体验。
300 0
|
2月前
|
JSON API PHP
ICP备案查询免费API接口使用教程
本文介绍如何通过接口盒子提供的免费API接口查询域名ICP备案信息,包含请求地址、参数说明及PHP和Python调用示例,适用于开发者快速集成备案查询功能。
|
2月前
|
JSON API UED
汇率查询API实战指南:通过Python调用获取多国汇率信息
本文介绍如何通过 Python 快速集成多币种汇率查询接口,实现实时获取全球主要货币汇率数据。适用于跨境电商价格换算、国际贸易结算等场景,帮助提升用户体验并规避汇率波动风险。
538 0
汇率查询API实战指南:通过Python调用获取多国汇率信息
|
2月前
|
JSON API 数据库
产品详情查询API接口
产品详情查询API是现代电商与软件开发中的关键工具,基于RESTful架构,通过HTTP协议获取产品信息如名称、价格、库存等。本文详解其概念、原理、实现方法与应用示例,助力开发者快速掌握。
100 0
|
2月前
|
API 开发工具 开发者
快速获取线下场景POI数据,分享场景查询API体验指南
本文介绍了如何通过“场景查询(名称关键词)”API快速获取POI数据。该API只需输入场景关键词即可返回丰富的POI信息,如名称、地址、经纬度等,支持品牌、分类、城市等多维度筛选,并提供分页功能。接口简洁易用,响应速度快,适合用于竞品分析、门店扩展等场景。开发者可通过开放平台注册获取API Key,并使用SDK快速集成。推荐有POI查询需求的开发者体验使用。
|
2月前
|
JSON API 数据安全/隐私保护
车辆五项信息查询 API 的实践指南:通过Python调用赋能车辆信息标准化
本API通过车牌号快速获取车辆五项核心信息,包括品牌、登记日期、车架号等,助力二手车评估、维修、保险等场景实现数字化转型。数据源自权威公安交管库,日更同步,毫秒级响应,满足高并发需求,符合隐私保护规范,是推动汽车后市场智能化的重要工具。
126 0
|
3月前
|
API Python
VIN码查询API的实战指南:获取二手车信息以Python为例
随着机动车保有量上升,中国二手车市场迎来发展机遇。本文介绍如何通过VIN码查询API获取车辆详细信息,提升交易透明度与安全性。
71 1