web端项目根据城市获取城市天气信息

一、项目需求

          在web页面,根据当前城市显示当天天气情况,比如:深圳市,多云。

二、需求分析

          本来以为这个需求很简单的(其实应该也是很简单,只不过自己对天气和地图这部分不熟悉而已),参考了网上的一些资源,发现踩了一些坑,在这记录一下。

           这个需求有2点,需要2个接口就可以了:

(1)获取天气的接口:

       网上有很多接口,比如和风天气接口,这个接口要自己注册私钥,比较麻烦。由于项目对天气要求不高,我选择了比较简单的公用接口:http://wthrcdn.etouch.cn/weather_mini?city=深圳

(2)获取城市的接口:

        在网上百度了下,很多人推荐某度地图,我也接入用了下,踩了很多坑之后,终于接入成功,结果获取的城市一直是“全国”, 真让人无语。最终只能作罢,换高德地图。

三、接口接入

   1.获取天气接口

      这个就不多说了,取到数据,直接解析就可以了,当然网上反馈获取信息乱码,我用的axios获取的(推荐用这个,返回的数据是json格式,我也用过jQuery获取,数据不是json格式),获取到的数据没出现乱码,大家如果遇到,可以自行百度一下。

获取的数据格式:

2.获取城市接口

   我这使用的高德地图接口,这里简单介绍一下:

(1)注册账号(如果没有的话):高德地图官网

(2)创建key:  控制台 -- 应用管理 --- 创建新应用 -- 添加key

(3) 调用

    由于我这个一进入页面就要获取,官网的api提供了js的异步获方法,获取AMap

官网api截图如下:

通过ip地址去定位

结合这2个api,实习方法:

    获取AMap类:

//接口回调函数
window.onLoad  = function(){
    AMap.plugin('AMap.CitySearch', function() {
          var citySearch = new AMap.CitySearch()
          citySearch.getLocalCity(function(status, result) {
            if (status === 'complete' && result.info === 'OK') {
              // 查询成功

              //获取当前城市天气信息
              let url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + result.city
              axios.get(url).then((res) => {
                 ......
              })
            }
          })
     })
}

//通过javaScript获取AMap对象
var url = 'https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值&callback=onLoad';
var jsapi = document.createElement('script');
jsapi.charset = 'utf-8';
jsapi.src = url;
document.head.appendChild(jsapi);

      这篇文章主要用于记录自己踩的一些坑,同时也希望能帮助到一些跟我一样需要的人,都是个人经验总结,大神轻喷,欢迎探讨。

对于分布式应用程序开发,您可以使用微服务架构来实现获取城市当天天气的功能。具体来说,您可以创建一个天气微服务,它负责获取城市天气信息并将其返回给调用方。 以下是一个简单的天气微服务的示例代码,它使用 OpenWeatherMap 的天气 API 获取城市天气信息,并通过 RESTful API 将其返回给调用方: ```csharp [Route("api/[controller]")] [ApiController] public class WeatherController : ControllerBase { private readonly string _apiKey = "your_api_key_here"; // 请替换成您的 API Key [HttpGet("{cityName}")] public async Task<ActionResult<string>> GetWeather(string cityName) { string apiUrl = $"http://api.openweathermap.org/data/2.5/weather?q={cityName}&appid={_apiKey}"; try { using (var client = new WebClient()) { string json = await client.DownloadStringTaskAsync(apiUrl); dynamic data = JsonConvert.DeserializeObject(json); string weather = $"{data.weather[0].description}, 温度 {data.main.temp}℃, 湿度 {data.main.humidity}%"; return Ok(weather); } } catch (WebException ex) { return BadRequest($"获取天气信息失败: {ex.Message}"); } } } ``` 您可以将此代码部署到一个独立的 ASP.NET Core Web API 项目中,并使用 Docker 或 Kubernetes 等工具来进行容器化和部署。然后,您可以在应用程序中通过 HTTP 客户调用此微服务来获取城市天气信息。例如,您可以使用 HttpClient 类在 C# 中调用此微服务的示例代码: ```csharp private async Task<string> GetWeatherAsync(string cityName) { using (var client = new HttpClient()) { string apiUrl = $"http://weather-service/api/weather/{cityName}"; var response = await client.GetAsync(apiUrl); if (response.IsSuccessStatusCode) { return await response.Content.ReadAsStringAsync(); } else { throw new Exception($"调用天气微服务失败: {response.StatusCode}"); } } } ``` 请注意,此示例代码中的 apiUrl 变量应该替换为您的微服务的实际 URL。此外,您需要在调用方应用程序中添加对 Microsoft.Extensions.Http 和 Newtonsoft.Json 库的引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值