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查询您的阿里云资源
【2月更文挑战第33天】要利用阿里云控制API查询您的阿里云资源
103 3
|
1月前
|
监控 网络协议 API
阿里云BssOpenAPI是一个基于阿里云开放API的服务
【2月更文挑战第24天】阿里云BssOpenAPI是一个基于阿里云开放API的服务
229 6
|
1月前
|
缓存 API 定位技术
使用Python调用百度地图API实现地址查询
使用Python调用百度地图API实现地址查询
170 0
|
11天前
|
SQL Java API
Java一分钟之-JPA查询:JPQL与Criteria API
【6月更文挑战第14天】本文探讨了Java Persistence API (JPA)中的两种查询方式:JPQL和Criteria API。JPQL是面向对象的SQL,适用于简单查询,而Criteria API则提供类型安全的动态查询构造。文章指出了每种方法的常见问题和避免策略,如混淆实体属性与数据库字段、参数绑定错误、过度复杂化和性能问题。建议开发者根据需求选择适当的方法,并关注查询的可读性、可维护性和性能优化。
26 2
|
14天前
|
安全 Java API
Java一分钟之-GraphQL:查询语言与API设计
【6月更文挑战第11天】GraphQL,一种革命性的查询语言,正在改变Web开发中的API构建和使用方式。它允许客户端按需请求数据,减少冗余,提升性能。本文概述了GraphQL的核心理念,如声明式查询、强类型和统一入口,并讨论了Java开发者常遇问题:过度查询、Schema设计和安全性。解决方案包括使用Dataloader、优化Schema和实现授权机制。通过理解原理、关注性能、重视安全和持续实践,开发者能更好地利用GraphQL构建高效API。
23 2
|
17天前
|
人工智能 自然语言处理 搜索推荐
Elasticsearch 开放 inference API 增加了对 Azure OpenAI 嵌入的支持
【6月更文挑战第8天】Elasticsearch 推出开放 inference API,支持 Azure OpenAI 嵌入,强化搜索和数据分析能力。此更新使用户能灵活集成 AI 技术,实现智能精准搜索。Azure OpenAI 的语言理解能力优化了用户查询处理,提升搜索相关性。示例代码显示了如何结合两者处理查询。该创新提升数据检索效率,适用于智能客服和推荐系统,但也带来数据安全和模型准确性等挑战。这标志着搜索和数据分析领域的智能化新阶段,期待更多创新应用。未来,我们需要持续探索和完善,以发挥技术的最大潜力。
29 3
|
1月前
|
存储 缓存 运维
DataWorks操作报错合集之DataWorks根据api,调用查询文件列表接口报错如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
1月前
|
缓存 前端开发 JavaScript
【专栏】GraphQL,Facebook 开发的API查询语言,正在前端开发中崭露头角
【4月更文挑战第27天】GraphQL,Facebook 开发的API查询语言,正在前端开发中崭露头角。它提供强类型系统、灵活查询和实时更新,改善数据获取效率和开发体验。掌握GraphQL涉及学习基础概念、搭建开发环境和实践应用。结合前端框架,利用缓存和批量请求优化性能,与后端协作设计高效API。尽管有挑战,但GraphQL为前端开发开辟新道路,引领未来趋势。一起探索GraphQL,解锁前端无限可能!
|
1月前
|
人工智能 自然语言处理 API
零一万物API开放平台,正式向开发者开放了!
零一万物API开放平台向开发者开放,提供多领域AI模型,包括自然语言处理、图像识别和语音识别,助力开发者轻松实现智能化功能。平台以简单API调用实现易用性,高性能计算资源保证服务稳定性。按需付费模式降低成本,免费体验机会鼓励尝试。全面的开发者支持包括详细文档、技术支持和定期技术交流会,构建友好社区。开发者需注意账户余额管理。访问平台:&lt;https://platform.lingyiwanwu.com/playground&gt;。
97 6
零一万物API开放平台,正式向开发者开放了!
|
7月前
|
域名解析 监控 安全
接口开放太麻烦?试试阿里云API网关吧
我在[多方合作时,系统间的交互是怎么做的?](https://www.cnblogs.com/wlovet/p/17466812.html)这篇文章中写过一些多方合作时接口的调用规则和例子,然而,接口开放所涉及的安全、权限、监控、流量控制等问题,可不是简简单单就可以解决的,这一般需要专业的开放平台来支撑。但为了开放几个接口就要做一个开放平台,实在是不合算。为此阿里云为了解决这类需求推出了一款强大的工具——API网关。本文将介绍阿里云API网关的特点和优势,以及如何使用API网关来简化接口开放的过程。
251 0
接口开放太麻烦?试试阿里云API网关吧