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

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


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


一、实现效果

本人的需求比较简单,只是一个页面用来显示两个人所在地的实时天气信息,主要信息包括所在省份、所在地区、天气、实时气温、风向、风力、空气湿度和发布时间,可以根据实时天气信息显示相应天气图标,下面是实现效果
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月前
|
人工智能 小程序
【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,无需后台支持,具有快速、体验好、易集成等特点。本文介绍如何利用插件判断人体与摄像头的远近,确保人体图像在帧内的比例适中,以优化识别效果。通过`whole`检测规则,分别实现人体过近和过远的判断,并给出相应示例代码。
|
1天前
|
小程序 前端开发 关系型数据库
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
|
5天前
|
JSON 小程序 JavaScript
原生微信小程序笔记完整总结
原生微信小程序笔记完整总结
20 1
|
7天前
|
小程序 IDE PHP
圈子源码如何打包生成App小程序/开发一个圈子系统软件所需要的费用体现在哪里?
将PHP源码打包成App的过程涉及多个步骤和技术选择。以圈子源码为例,首先明确需求,确定App功能和目标用户群体,并根据需求开发小程序页面,如用户注册、圈子列表等。源码准备阶段确保源码适用于小程序开发,环境配置需安装IDE(如微信开发者工具)及依赖库。最后在IDE中打包小程序并上传至管理平台,通过审核后发布。费用方面,模板开发成本较低,定制开发则更高,具体取决于需求复杂度和第三方服务费用。
42 0
|
25天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
|
5天前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
12 0
|
1月前
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
1月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】提供人体、运动、姿态检测的AI能力,支持本地原生识别,无需后台服务,具有速度快、体验好、易集成等优点。本文介绍如何使用该插件实现用户上传视频的运动识别,包括视频解码抽帧和人体识别的实现方法。
|
1月前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。
|
1月前
|
人工智能 小程序 JavaScript
【一步步开发AI运动小程序】十四、主包超出2M大小限制,如何将插件分包发布?
本文介绍了如何从零开始开发一个AI运动小程序,重点讲解了通过分包技术解决程序包超过2M限制的问题。详细步骤包括在uni-app中创建分包、配置`manifest.json`和`pages.json`文件,并提供了分包前后代码大小对比,帮助开发者高效实现AI运动功能。