建立一個.net 8的webapi專案備用
編輯一個實體類,該實體類用於儲存獲取ip地址的經緯度資料使用
繼續編輯三個類,用來儲存對應經緯度的具體天氣資料包:
改造預設的天氣控制器,裡面寫成我們自己的。例如先寫個獲取IP的經緯度座標的請求
執行一下,看下現在的效果,可以看到獲取到ip的具體資訊,包括運營商、經緯度座標等。
繼續擴充內容,根據經緯度獲取天氣資料
執行,可以看到一些天氣資訊
以下是返回的具體json報文,供參考:
{ "latitude": 22.5, "longitude": 114, "generationtime_ms": 0.05698204040527344, "utc_offset_seconds": 0, "timezone": "GMT", "timezone_abbreviation": "GMT", "elevation": 37, "current_weather_units": { "time": "iso8601", "interval": "seconds", "temperature": "°C", "windspeed": "km/h", "winddirection": "°", "is_day": "", "weathercode": "wmo code" }, "current_weather": { "time": "2024-10-11T09:45", "interval": 900, "temperature": 26.1, "windspeed": 6.6, "winddirection": 131, "is_day": 1, "weathercode": 2 } }
資料欄位解析
基本資訊
- latitude: 22.5 - 緯度。表示該地點的緯度位置。
- longitude: 114 - 經度。表示該地點的經度位置。
- generationtime_ms: 0.05698204040527344 - 資料生成的時間,單位是毫秒。表示從資料請求到資料生成所用的時間。
- utc_offset_seconds: 0 - 與 UTC 時間的偏移,單位為秒。這裡為 0 表示該資料是在 GMT 時區下計算的。
- timezone: "GMT" - 時區,表示為 GMT。
- timezone_abbreviation: "GMT" - 時區縮寫,這裡也是 GMT。
- elevation: 37 - 表示該地點的海拔高度為 37 米。
當前天氣單位
current_weather_units 部分用於解釋當前天氣資料中每個欄位的單位。
- time: "iso8601" - 時間格式遵循 ISO 8601 標準。
- interval: "seconds" - 時間間隔單位為秒。
- temperature: "°C" - 溫度單位為攝氏度。
- windspeed: "km/h" - 風速單位為每小時公里數。
- winddirection: "°" - 風向單位是角度,以度數表示。
- is_day: "" - 此欄位沒有單位,僅用來指示是否是白天(通常為 0 或 1)。
- weathercode: "wmo code" - 表示天氣情況的程式碼,使用 WMO(世界氣象組織)標準程式碼。
當前天氣情況
current_weather 部分提供了實際的天氣資料。
- time: "2024-10-11T09:45" - 表示觀測的具體時間點,格式為 ISO 8601,即 2024 年 10 月 11 日 09:45。此處我們要換算成自己的東八區時間,要增加8小時,則是下午17點45分。
- interval: 900 - 表示觀測間隔為 900 秒,即 15 分鐘。
- temperature: 26.1 - 當前溫度為 26.1°C。
- windspeed: 6.6 - 當前風速為 6.6 km/h。
- winddirection: 131 - 當前風向為 131 度。風向用度數表示,0 度表示正北,90 度表示正東,131 度則大致為東南方向。
- is_day: 1 - 表示當前觀測是在白天,1 代表白天,0 通常代表夜晚。
- weathercode: 2 - 當前的天氣程式碼為 2,按照 WMO 的天氣程式碼標準,2 通常表示“部分多雲”。
WMO 天氣程式碼詳解
根據 WMO(世界氣象組織)的標準,weathercode 欄位提供了天氣狀況的具體資訊。以下是一些常見的 WMO 天氣程式碼:
- 0: 晴朗
- 1: 主要晴朗
- 2: 部分多雲
- 3: 多雲
- 4: 陰天
- 45: 有霧
- 48: 有濃霧
- 51: 輕微毛毛雨
- 53: 中等毛毛雨
- 55: 強毛毛雨
- 61: 輕微陣雨
- 63: 中等陣雨
- 65: 強陣雨
- 71: 輕雪
- 73: 中雪
- 75: 強雪
- 95: 雷陣雨,可能有輕微的降水
- 99: 雷陣雨,伴有強降水
天氣描述
在當前的資料中,weathercode 為 2,這表示天氣狀況為“部分多雲”。
獲取經緯度和天氣的線上請求程式碼:
LocationInfo locationInfo = null; using (var httpClient = _httpClientFactory.CreateClient()) { httpClient.Timeout = TimeSpan.FromSeconds(100); var res = httpClient.GetAsync("http://ip-api.com/json/").GetAwaiter().GetResult(); res.EnsureSuccessStatusCode(); var location = res.Content.ReadAsStringAsync().GetAwaiter().GetResult(); if (!string.IsNullOrEmpty(location)) { locationInfo = JsonConvert.DeserializeObject<LocationInfo>(location); } } if (locationInfo != null) { using (var httpClient = _httpClientFactory.CreateClient()) { httpClient.Timeout = TimeSpan.FromSeconds(100); var res = httpClient.GetAsync($"https://api.open-meteo.com/v1/forecast?latitude={locationInfo.lat}&longitude={locationInfo.lon}¤t_weather=true").GetAwaiter().GetResult(); res.EnsureSuccessStatusCode(); var weather = res.Content.ReadAsStringAsync().GetAwaiter().GetResult(); if (!string.IsNullOrEmpty(weather)) { WeatherResponse weatherInfo = JsonConvert.DeserializeObject<WeatherResponse>(weather); return Ok(weatherInfo); } } }
如果需要完整原始碼,可以在公眾號【Dotnet Dancer】內回覆“天氣查詢”即可獲取原始碼地址。
以上就是本文章全部內容,如果有幫助,歡迎點贊、在看、轉發分享或評論,謝謝大佬們捧場~