ToB企服应用市场:ToB评测及商务社交产业平台

标题: .NET程序获取当前IP经纬度,并通过经纬度实现天气查询功能 [打印本页]

作者: 伤心客    时间: 2024-10-12 08:09
标题: .NET程序获取当前IP经纬度,并通过经纬度实现天气查询功能
 创建一个.net 8的webapi项目备用
 编辑一个实体类,该实体类用于存储获取ip地址的经纬度数据利用
 继承编辑三个类,用来存储对应经纬度的详细天气数据包:
 改造默认的天气控制器,内里写成我们自己的。例如先写个获取IP的经纬度坐标的请求
 运行一下,看下现在的效果,可以看到获取到ip的详细信息,包括运营商、经纬度坐标等。
 继承拓展内容,根据经纬度获取天气数据
 运行,可以看到一些天气信息
 以下是返回的详细json报文,供参考:
  1. {
  2.   "latitude": 22.5,
  3.   "longitude": 114,
  4.   "generationtime_ms": 0.05698204040527344,
  5.   "utc_offset_seconds": 0,
  6.   "timezone": "GMT",
  7.   "timezone_abbreviation": "GMT",
  8.   "elevation": 37,
  9.   "current_weather_units": {
  10.     "time": "iso8601",
  11.     "interval": "seconds",
  12.     "temperature": "°C",
  13.     "windspeed": "km/h",
  14.     "winddirection": "°",
  15.     "is_day": "",
  16.     "weathercode": "wmo code"
  17.   },
  18.   "current_weather": {
  19.     "time": "2024-10-11T09:45",
  20.     "interval": 900,
  21.     "temperature": 26.1,
  22.     "windspeed": 6.6,
  23.     "winddirection": 131,
  24.     "is_day": 1,
  25.     "weathercode": 2
  26.   }
  27. }
复制代码
 
 数据字段剖析基本信息
当前天气单元current_weather_units 部门用于表明当前天气数据中每个字段的单元。
当前天气环境current_weather 部门提供了实际的天气数据。
WMO 天气代码详解根据 WMO(世界景象组织)的尺度,weathercode 字段提供了天气状况的详细信息。以下是一些常见的 WMO 天气代码:
天气形貌在当前的数据中,weathercode 为 2,这表示天气状况为“部门多云”。 获取经纬度和天气的在线请求代码:
  1. LocationInfo locationInfo = null;
  2. using (var httpClient = _httpClientFactory.CreateClient())
  3. {
  4.     httpClient.Timeout = TimeSpan.FromSeconds(100);
  5.     var res = httpClient.GetAsync("http://ip-api.com/json/").GetAwaiter().GetResult();
  6.     res.EnsureSuccessStatusCode();
  7.     var location = res.Content.ReadAsStringAsync().GetAwaiter().GetResult();
  8.     if (!string.IsNullOrEmpty(location))
  9.     {
  10.         locationInfo = JsonConvert.DeserializeObject<LocationInfo>(location);
  11.     }
  12. }
  13. if (locationInfo != null)
  14. {
  15.     using (var httpClient = _httpClientFactory.CreateClient())
  16.     {
  17.         httpClient.Timeout = TimeSpan.FromSeconds(100);
  18.         var res = httpClient.GetAsync($"https://api.open-meteo.com/v1/forecast?latitude={locationInfo.lat}&longitude={locationInfo.lon}&current_weather=true").GetAwaiter().GetResult();
  19.         res.EnsureSuccessStatusCode();
  20.         var weather = res.Content.ReadAsStringAsync().GetAwaiter().GetResult();
  21.         if (!string.IsNullOrEmpty(weather))
  22.         {
  23.             WeatherResponse weatherInfo = JsonConvert.DeserializeObject<WeatherResponse>(weather);
  24.             return Ok(weatherInfo);
  25.         }
  26.     }
  27. }
复制代码
 
 如果必要完备源码,可以在公众号【Dotnet Dancer】内回复“天气查询”即可获取源码地址。

以上就是本文章全部内容,如果有帮助,欢迎点赞、在看、转发分享或评论,谢谢大佬们捧场~
 
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4