[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

使用 Wea​​ther API 获取天气数据

感谢您的辛勤工作。
我是系统开发室的松山。

这次,我想使用“Weather API”创建一个天气检查应用程序。
以前我认为有必要从日本气象厅购买天气信息,但
现在似乎有一个API可以免费使用,所以我就使用它。

顺便说一句,日本气象厅似乎也在免费分发天气数据,但
由于它基本上是气象数据(雨、风、温度等),因此它似乎与天气数据不同。
(已发布过往天气信息)

要求

① 使用 Rakuten Rapid API 的开放天气地图
② 在之前创建的基础上重复使用 HTTP 通信
③ 从 GPS 位置信息获取附近城市的天气数据
④ 在屏幕上显示纬度、经度、城市名称和天气图标 显示
* Created with Unity 2019.4 .11f1

乐天快速API

Rakuten Rapid API 是一项允许您使用和开发各种功能的 API 的服务。
虽然需要注册帐户,但有很多功能可以免费使用,因此您可以尝试各种功能。
乐天快速API

打开天气地图

使用 Rakuten Rapid API 中的开放天气地图获取天气数据。
打开天气地图

有多个 API,但如果您想获取当前天气,可以使用当前天气数据 API。

您可以在浏览器上进行测试,因此最好在调整参数的同时进行尝试。
请注意,即使在测试中,它也会被计入调用次数中。 (每月免费500次)

作为API请求信息,需要以下信息。
・请求标头(固定)

request.AddHeader("x-rapidapi-host", "community-open-weather-map.p.rapidapi.com"); // 主机地址 request.AddHeader("x-rapidapi-key", "xxxxxxxxxxxxxxxxx"); // 为每个账户颁发的API密钥

・请求参数
q:城市ID(*必填)
即使没有其他可选参数,似乎也没有问题。

您可以
在此处您的城市 ID 您可以获得注册城市的天气数据。

HTTP通讯

按照上述要求,我们将按照以往创建的流程进行实施。
点击此处查看往期文章


・ApiBase.cs
・CoroutineHandler.cs
・SigletonMonoBehaviour.cs
・Network.cs
・ApiSample.cs
复制源关于此区域

添加/调整功能以支持 OpenWeatherMap。

1. 对应GET方法

为了支持 GET 方法,通过将 JSON 中传递的请求参数连接到 URL 将其转换为字符串。
虽然比较试探,但还是以下面的形式实现。

私有字符串 convGetParam(string json) { string jsonTrim = json.Trim('{', '}'); jsonTrim = jsonTrim.Replace("\"", ""); string[] jsonArry = jsonTrim.Split(', '); string bool isFirst = true (var data in jsonArry) { if (!data.Contains(":")) if (!isFirst) { retStr += "&"; } else { isFirst = false; } string[] paramAry = data.Split(':'); retStr += paramAry[0] + "=" + paramAry[1] }

2.设置请求头

这里,如上所述,设置主机地址和API密钥。
*数值显示在 OpenWeatherMap 屏幕上

3.定义HTTP请求和响应参数

在Script/Api下创建一个用于获取天气数据的类。
这次它是使用 Wea​​therApi.cs 创建的。

■ 请求
请求只是城市名称。

[可序列化] public struct Request { public string q }

■回应
回应有点长,不过会这样展开。
实际上,您所需要的只是 Weather 结构,但为了以防万一,我可以获取它。

[可序列化] 公共结构坐标 { 公共浮点 lat } [可序列化] 公共结构天气 { 公共 int 公共字符串主要; } [可序列化] 公共浮动温度; ; 公共浮动 temp_min; 公共 int 湿度; } [Serialized] public struct Wind { public float speed; } [Serialized] public struct Rain { ; // 1h 不能用作元素名称 } [Serialized] public struct Clouds { public int all; } [Serialized] public struct Sys { public int id; public int sunrise; ; } [可序列化] public struct Response { public Coord coord;<Weather>天气; // 公共字符串基; // 基不能用作元素名称 public Main main; public Rain rain; public Sys sys;公共 int id; 公共字符串名称; }

*有一些不能使用的名字已经被注释掉了,但是这次我们不用担心它们,因为这些信息不会被使用^^;

目前来看,我认为沟通相关的准备工作是可以的。

使用全球定位系统

对于 GPS,我们还将参考我们过去创建的代码编写必要的代码。
点击此处查看往期文章

这次需要的GPS处理是:

输入.location.Start(); 输入.compass.enabled = true;

首先执行此操作,

Input.location.lastData.longitude; // 经度 Input.location.lastData.latitude; // 纬度

只需使用lastData 即可获取纬度和经度。
* 严格来说,我们还会判断是否可以使用GPS。

Input.location.isEnabledByUser; // 是否允许使用 GPS Input.location.status; // 运行状态下可以使用

另外,不要忘记在 ProjectSettings 中填写位置使用说明。

天气数据

如上所述,为了获取天气数据,需要指定注册城市,因此
为了验证目的,我们从47个都道府县中提取了1个城市数据,并
从GPS获取的经纬度中选择了最近的一个来实现。获取城市天气数据的流程。

首先,创建城市数据。
作为城市数据,在以下结构中定义都道府县名称、城市名称、城市名称(用于 API)、纬度和经度。

private struct Data { public string prefecture; // 城市名称 public string name; // 经度 public double lat;

将其转换为这样的数据。

静态私有列表<Data>数据=新列表<Data>{ 新数据 { 县 = "北海道", city = "札幌市", name = "札幌", lon = 141.346939, lat = 43.064171 }, 新数据 { prefecture = "青森县", city = "青森市", name =“青森”,lon = 140.740005,lat = 40.82444},新数据{县=“岩手县”,城市=“盛冈市”,名称=“盛冈”,lon = 141.152496,lat = 39.703609},新数据{县=“宫城县”,城市=“仙台市”,名称=“仙台”,lon=140.871933,纬度=38.26889},新数据{县=“秋田县”,城市=“秋田市”,名称=“秋田” , lon = 140.116669, lat = 39.716671 }, 新数据 { prefecture = “山形县”, city = “山形市”, name = “山形”, lon = 139.821671, lat = 38.721668 }, 新数据 { prefecture = “福岛县” ", city = "福岛市", name = "福岛", lon = 140.383331, lat = 37.400002 }, // // 省略 // 新数据 { prefecture = "鹿儿岛县", city = "鹿儿岛市", name = "鹿儿岛", lon = 130.558136, lat = 31.560181 }, new Data { prefecture = "冲绳县", city = "那霸市", name = "那霸", lon = 127.681107, lat = 26.2125 } };

接下来,根据您当前的位置(纬度和经度)搜索最近的城市数据。
如果有这样的功能就好了?

static public Info NearbyCity(double lon, double lat) { Info info = new Info(); float dist = 9999f; foreach(Data dat in datas) { double z = (dat.lat - lat) * Lat2Km;是南 double x = (dat.lon - lon) * Lat2Km; // +x 是东 Vector3 v = new Vector3((float)x, 0, (float)z); if(v.magnitude < dist) { dist = v.magnitude; info.city = dat.prefecture + dat.city; info.name = dat.name;

返回值结构体中包含用于显示的城市名称和用于API的城市名称。

公共结构信息 { 公共字符串城市 公共字符串名称; }

在屏幕上显示纬度、经度、城市名称和天气图标

在 Unity 中配置屏幕。
大概就是这个图

剩下要做的就是显示使用 GPS 和 API 获取的信息,这就是成品。

您可以在此处查看天气 ID 和天气图标等信息。
天气数据详情

概括

虽然有点仓促,但我认为这是一个大致显示天气的示例。
天气数据的获取本身可以通过单个 API 来实现,但注册城市和当前位置之间的链接(数据转换)可能会有点麻烦。
这次我也将示例项目上传到 GitHub。
我希望这会对您有所帮助。
统一示例

Rakuten Rapid Api 还有其他功能,所以我想下次使用它。

最后

我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)

好了,现在就这些了。

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
10,061
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

松山贤章

他长期在一家游戏开发公司工作,从事程序和项目管理工作。
2019年加入超越株式会社。
在横滨办事处工作。 主要负责服务器端开发工作的项目管理。
(有时编程)我的爱好是骑自行车(公路赛车)和观看赛马。