微信小程序开发笔记—天气获取显示

简介: 本文主要介绍了如何实现微信小程序的天气获取和显示功能,内容全面,而且附有实现程序,有一定的参考价值。


🎀 文章作者:二土电子
🐸 期待大家一起学习交流!


一、实现效果

本人的需求比较简单,只是一个页面用来显示两个人所在地的实时天气信息,主要信息包括所在省份、所在地区、天气、实时气温、风向、风力、空气湿度和发布时间,可以根据实时天气信息显示相应天气图标,下面是实现效果
980db5458fc553cc9583ea1f153a7aca_253e21e447044201b5f8d2bddaed35e6.png

二、天气查询API

本人使用的是高德的天气查询API,相关文档可点击链接查看。高德的天气查询API是一个简单的HTTP接口,可以根据用户输入的城市编码获取相应地区的天气情况,但是使用前需要申请自己的key,具体申请方法可以点击这篇大佬的文章查看微信小程序开发——调用免费天气api接口(高德、天气API)

使用高德天气查询API是免费的,而且可查询次数非常多,完全足够普通的个人开发者使用。

三、微信小程序设计思路

1、页面跳转

看过之前文章的应该清除,本人的小程序是分三个部分,最中间是首页,也就是公共部分,查询天气是常用的功能,因此直接放在了公共部分的页面,点击天气图标可以进入上面的天气显示页面,公共页面如下图
994dcd0256c47e42f7752b8dadfb44d4_dd7f8b56ea114d2cbdb10f92cf3426d1.png

点击图中的天气图标即可,音乐是另外一个功能,但是由于时间有限,本文只介绍天气查询功能的实现,音乐功能后续会另外介绍,此外还有已经基本实现的记事本功能,期待的小伙伴们可以关注一下专栏呀,希望大家互相学习,共同进步。

2、获取天气信息

跳转到天气页面后需要获取天气信息,根据高德的开发指南,需要知道两个人所在地区的城市编码,城市编码可以根据高德开发指南里的城市编码表确定。此外,根据开发指南,不仅可以获取实况天气,还可以获取预报天气,也就是未来几天的天气,本人尝试过,获取预报天气时只有白天天气、夜间天气、白天温度、夜间温度、白天风力、风向和夜间风力、风向这些信息,没有发布时间、实时气温、空气湿度这些信息。

3、信息显示

正如最开始的效果图,本人的需求只是显示两个人的实时天气,所以在信息显示方面设计的较为简单,为了不那么单一,特地加上了两个头像,大家也可以根据自己的想法进行渲染修饰。

天气图标的话是利用wx:if函数判别当前天气情况然后显示的,实现方法较为粗暴,如果大佬有更好的方法可以评论区交流呀。

四、程序实现

1、页面跳转功能

页面跳转功能实现较为简单,只是插入了一张图片,给图片加入了点击触发的跳转函数,当然还有其他方法,这里就暂时不做介绍了,后续记事本的文章会介绍另一种方法。

主页.wxml代码如下

<!-- 天气 -->
 <view class="app">
 <image src="../../image/weather_cover/weather.png" bindtap="weather" style="width: 133rpx; height: 129rpx; display: inline-block; box-sizing: border-box; position: relative; left: -60rpx; top: -300rpx"></image>
 <text style="position: relative; left: -155rpx; top: -260rpx">天气</text>
 </view>

咳咳,本人由于能力有限,在调整图标位置和大小时使用了微信开发工具的可视化开发功能,所以导致整体代码有些长,希望大家多多指教,虽然后来发现可以通过在.wxss文件增加对应的样式可以达到这种调整大小的效果,但是在尝试的过程中发现对于位置的调节并没有达到预期效果,需要继续学习。

页面跳转.wxss文件代码如下

.app{
  width: auto;
  height: auto;
}

页面跳转.ts文件代码如下

weather:function(){
    wx.navigateTo({url:'/pages/weather/weather'})
  },

2、获取天气信息

获取天气信息需要上面申请的key和所在地的城市编码,还是按照惯例,先上程序

2.1、变量声明

data: {
    lin_weather_inform:{},
  },

声明一个变量用来存储查询到的天气信息。

2.2、获取所在地区天气信息

onLoad:function(){
    var that = this;
    // 获取小林所在地区温度
    wx.request({
      url: 'https://restapi.amap.com/v3/weather/weatherInfo',
      data:{
        'key': '自己申请的key',   //改为自己申请的Key
        'city': '210911',
      },
      success:function(res){
        that.setData({
          lin_weather_inform: res.data,
        })
      }
    })
  }

在对应位置填入自己申请的key和城市编码即可,url的网址可以直接用同一个。

3、天气信息显示

这里先解释一下,本人为了实现天气图标显示并且能够根据实况天气显示对应图标,加入了一个判断过程,所以显得程序非常繁杂,如果大佬有好的方法还请评论区指教呀。

天气显示代码如下

<!-- 小林天气 -->
<view class="lin_weather">
  <image src="../../image/weather_cover/lin.png" style="width: 232rpx; height: 227rpx; display: inline-block; box-sizing: border-box; position: absolute; left: 473rpx; top: 30rpx"></image>
  <view class="info" style="position: absolute; left: 55rpx; top: 120rpx"> 所在省份:{
    
    {
    
    lin_weather_inform.lives[0].province}}</view>
  <view class="info" style="position: absolute; left: 55rpx; top: 190rpx"> 城市:{
    
    {
    
    lin_weather_inform.lives[0].city}}</view>
  <view class="info" style="position: absolute; left: 55rpx; top: 250rpx">天气:{
    
    {
    
    lin_weather_inform.lives[0].weather}}</view>
  <!-- 天气图标判断显示 -->
  <image class="weather_icon" wx:if="{
    
    {lin_weather_inform.lives[0].weather == ('')}}" src="../../image/weather_cover/fine.png" style="position: absolute; left: 220rpx; top: 250rpx"></image>
  <image class="weather_icon" wx:if="{
    
    {lin_weather_inform.lives[0].weather == ('')}}" src="../../image/weather_cover/cloudy_yin.png" style="position: absolute; left: 220rpx; top: 250rpx"></image>
  <image class="weather_icon" wx:if="{
    
    {lin_weather_inform.lives[0].weather == ('多云')}}" src="../../image/weather_cover/cloudy.png" style="position: absolute; left: 220rpx; top: 250rpx"></image>
  <image class="weather_icon" wx:if="{
    
    {lin_weather_inform.lives[0].weather == ('') || lin_weather_inform.lives[0].weather == ('阵雨') || lin_weather_inform.lives[0].weather == ('小雨') || lin_weather_inform.lives[0].weather == ('中雨') || lin_weather_inform.lives[0].weather == ('大雨') || lin_weather_inform.lives[0].weather == ('暴雨')}}" src="../../image/weather_cover/rain.png" style="position: absolute; left: 220rpx; top: 250rpx"></image>
  <image class="weather_icon" wx:if="{
    
    {lin_weather_inform.lives[0].weather == ('雷阵雨') || lin_weather_inform.lives[0].weather == ('雷阵雨并伴有冰雹')}}" src="../../image/weather_cover/thunderstorm.png" style="position: absolute; left: 220rpx; top: 250rpx"></image>
  <image class="weather_icon" wx:if="{
    
    {lin_weather_inform.lives[0].weather == ('') || lin_weather_inform.lives[0].weather == ('阵雪') || lin_weather_inform.lives[0].weather == ('小雪') || lin_weather_inform.lives[0].weather == ('中雪') || lin_weather_inform.lives[0].weather == ('大雪') || lin_weather_inform.lives[0].weather == ('暴雪')}}" src="../../image/weather_cover/snow.png" style="position: absolute; left: 220rpx; top: 250rpx"></image>
  <image class="weather_icon" wx:if="{
    
    {lin_weather_inform.lives[0].weather == ('')}}" src="../../image/weather_cover/fog.png" style="position: absolute; left: 220rpx; top: 250rpx"></image>
  <view class="info" style="position: absolute; left: 55rpx; top: 310rpx"> 实时气温:{
    
    {
    
    lin_weather_inform.lives[0].temperature}}</view>
  <view class="info" style="position: absolute; left: 55rpx; top: 370rpx"> 风向:{
    
    {
    
    lin_weather_inform.lives[0].winddirection}}</view>
  <view class="info" style="position: absolute; left: 55rpx; top: 430rpx"> 风力:{
    
    {
    
    lin_weather_inform.lives[0].windpower}}</view>
  <view class="info" style="position: absolute; left: 55rpx; top: 490rpx"> 空气湿度:{
    
    {
    
    lin_weather_inform.lives[0].humidity}}%</view>
  <view class="info" style="position: absolute; left: 55rpx; top: 550rpx"> 发布时间:{
    
    {
    
    lin_weather_inform.lives[0].reporttime}}</view>
</view>

五、总结

1、遇到的问题

在利用上述方法实现天气查询时需要在微信小程序开发工具中不校验合法域名这一项勾选,否则会报错,这么设置的话虽然可以正常调试,但是对于需要发布的微信小程序会导致无法发布,要根本解决这个问题需要我们将网址添加到request的合法域名中。
15281ce3a96fd7f39bd98d5dda87099b_1fdaf06c66754e84a24ad2a35967acdd.png

2、后续优化方向

后续可以添加一个按钮,用来查询未来天气,点击可以看到未来几天的天气情况。

3、获取未来天气的方法

首先看一下高德官方文档的介绍
f27e2dc62c389576d8f7858ac6e18cf0_d3e948645b144e288d18c679ce97794b.png

由此可以看出,只需要在wx.request中将气象类型修改成all即可,具体程序如下

wx.request({
      url: 'https://restapi.amap.com/v3/weather/weatherInfo',
      data:{
        'key': '自己的key',   //改为自己申请的Key
        'city': '210911',
        'extensions': 'all',
      },
      success:function(res){
        that.setData({
          lin_weather_inform: res.data,
        })
      }
    })
相关文章
|
1月前
|
人工智能 小程序 前端开发
一个小程序轻量AR体感游戏,开发实现解决方案
针对青少年运动兴趣不足问题,AR体感游戏凭借沉浸式互动体验脱颖而出。结合小程序“AI运动识别”插件与WebGL渲染技术,可实现无需外设的轻量化AR健身游戏,如跳糕、切水果等,兼具趣味性与锻炼效果,适用于儿童健身及职工团建,即开即玩,低门槛高参与。
|
28天前
|
移动开发 小程序 前端开发
小程序开发平台有哪些?哪个好
小程序的开发方式丰富多元,开发团队可根据自身的技术背景、项目具体需求以及资源状况,灵活挑选最为适宜的开发路径。以下将详细介绍几种主流的小程序开发方式。
213 1
|
1月前
|
运维 小程序 数据可视化
小程序开发平台有哪些?SaaS小程序制作平台哪个好
小程序开发模式详解:自主开发、SaaS小程序制作平台与外包全对比 选择合适的小程序开发模式,是项目成功的基石。这三种模式在成本、周期、控制力和灵活性上各有千秋,适用于不同阶段和不同类型的企业。下面我们将逐一深入剖析。
236 7
|
1月前
|
移动开发 小程序 前端开发
小程序快速开发平台有哪些?
小程序开发并非“一刀切”,需结合技术储备、资金预算、时间规划及功能需求等多维度因素综合考量。以下为您详细拆解五种主流开发方案及其适用场景,助您精准匹配开发路径。
158 3
|
1月前
|
移动开发 小程序 前端开发
小程序开发平台有哪些?小程序开发制作软件推荐
小程序开发方案全解析:5种主流方式与选择指南 小程序开发需根据技术能力、预算、时间及功能需求综合决策。以下为5种主流开发方案及适用场景分析:
339 0
|
2月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
3月前
|
小程序 JavaScript API
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
这篇文章介绍了使用uni-halo框架进行微信小程序开发的过程,包括选择该框架的原因、开发目标以及项目配置和部署的步骤。
167 0
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
|
9月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。

热门文章

最新文章