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

目录
相关文章
|
6天前
|
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`。
41 21
|
8天前
|
API
天气预报-腾讯天气-7天-地址查询版免费API接口
这是一个免费的腾讯天气API接口,用于查询指定地址的7天天气预报。支持POST和GET请求方式。请求参数包括id、key、province、city、county等。返回参数包含日期、天气状况、温度等信息。 示例请求地址:https://cn.apihz.cn/api/tianqi/tengxun.php?id=88888888&key=88888888&province=四川省&city=绵阳市&county=。
|
5天前
|
网络协议 API
检测指定TCP端口开放状态免费API接口教程
该API用于检测目标主机指定TCP端口是否开放,适用于检测连通状态等场景。支持指定大陆、美国、香港等检测节点。请求地址为 `https://cn.apihz.cn/api/wangzhan/port.php`,支持POST和GET请求方式。请求参数包括 `id`、`key`、`type`、`host` 和 `port`。返回参数包含检测结果和状态码。示例请求:`https://cn.apihz.cn/api/wangzhan/port.php?id=88888888&key=88888888&type=1&host=49.234.56.78&port=80`。
|
22天前
|
API
淘宝API接口( item_detail - 淘宝商品详情查询)
淘宝商品详情查询 API(item_detail)用于获取淘宝商品的详细信息。请求参数包括商品唯一 ID(num_iid)和是否获取促销价(is_promotion)。响应参数包含商品标题、价格、库存、图片链接、品牌等详细信息。
|
1月前
|
数据采集 人工智能 自然语言处理
Python实时查询股票API的FinanceAgent框架构建股票(美股/A股/港股)AI Agent
金融领域Finance AI Agents方面的工作,发现很多行业需求和用户输入的 query都是和查询股价/行情/指数/财报汇总/金融理财建议相关。如果需要准确的 金融实时数据就不能只依赖LLM 来生成了。常规的方案包括 RAG (包括调用API )再把对应数据和prompt 一起拼接送给大模型来做文本生成。稳定的一些商业机构的金融数据API基本都是收费的,如果是以科研和demo性质有一些开放爬虫API可以使用。这里主要介绍一下 FinanceAgent,github地址 https://github.com/AI-Hub-Admin/FinanceAgent
|
2月前
|
API 搜索推荐
|
2月前
|
SQL 分布式计算 BI
Dataphin中集成SelectDB以支持报表分析和API查询
本文介绍了一家零售企业如何利用SelectDB进行BI分析及数据服务API的查询。通过Dataphin的数据集成、SQL研发等功能,将CRM、ERP等系统数据汇聚加工,并推送至SelectDB构建销售数据集市层,以支持报表分析及API查询。SelectDB具备实时、统一、弹性及开放特性,适用于多种实时分析场景。文章详细描述了在Dataphin中集成SelectDB的整体方案、数据源配置、数据集成、数据开发及数据服务流程。
116 0
|
3月前
|
API 开发工具 图形学
PicoVR Unity SDK⭐️五、常用API接口函数一览
PicoVR Unity SDK⭐️五、常用API接口函数一览
|
3月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
119 0
|
4月前
|
开发框架 JSON 前端开发
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理