“微天气” - 一个基于微信小程序的智能天气预报体验

news/2025/2/19 8:15:55/

“微天气” - 一个基于微信小程序的智能天气预报体验

一、引言

微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发,与我们一起共同发力推动微信小程序的发展,微信小程序应用数量超过了一百万,覆盖200多个细分的行业,日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。本文以设计了天气预报的的微信小程序,实现对全国各地天气情况的快速查询。

二、项目内容

该项目是基于微信小程序实现了一个实时显示天气状况的系统,该系统所研究的的问题如下:

  1. 系统运行平台的选取。该系统主要采用Javascript进行web开发。

  2. 确定系统的基本功能,该设计主要包括基本天气显示模块、预报城市模块和其他天气指标。基本天气显示模块有图标、温度和天气情况;预报城市模块包含手动设置和自动设置;其他天气指标单元,主要包括湿度、气压、能见度、风向、风速和风力等情况。

  3. 实时天气API网络接口配置。系统需要从云端实时的获取全国4000+个市县区天气数据,并对获取的数据进行解析。

  4. 对系统进行详细的介绍和分析。根据系统所实现的功能,进行模块前后端的设计。

三、项目实现

3.1 环境准备

在开发微信小程序前要做好相应的环境,包括账号注册、APPID的获取和开发环境(微信开发者工具)的安装。

在这里插入图片描述
图1:微信开发平台界面

2.2 项目构建

扫码登录后,就可以创建项目,并进行信息配置,主要包括项目名称、位置和APPID等。之后便可以进入主界面,主要包括五个分区,编译生成页面区、资源目录区、代码编辑区、调试输出区和基本设置分区,这五大分区协同实现系统设计。

在这里插入图片描述

图2:微信开发平台编辑界面

3.3 小程序框架目录

小程序框架提供了自救的视觉图层描述语言WXML和WXSS,以及JavaScript;并在视图层和逻辑层之间提供数据传输和时间系统,让开发者能够专注于逻辑和数据。

系统一共有三个全局文件,分别是app.json,app.js和app.wxss,三者名字不可更改。其中app.json用来对微信小程序进行全局配置,决定页面的路径、窗口表现、设置网络超时时间、设置多Tab等。app.js作为项目的入口文件,用于创建应用程序对象。app.wxss是一个全局的样式文件,在这个文件里面定义的样式,对每个页面均有效。

Pages字段用于描述当前小程序所有页面的路径,是为了让微信客户端知道当前小程序定义在那个目录下。且每个页面也包含4个配置文件,以index为例,则有index.ts,index.json,index.wxml和index.wxss,它们分别负责页面的逻辑实现、标题栏和状态栏、管理页面内容和页面排布等。

3.4 页面设计

该模块主要包括基本天气显示模块、预报城市模块和其他天气指标。基本天气显示模块主要包括文字内容和图标等,采用的主要语法为’内容’和,其中前者主要负责显示文本内容,后者显示对应路径下的图片。

便于实现对全国多个城市的选择预报,我们引入了一个选择组件,它是从底部弹起的滚动选择器组件,目前根据mode属性值的不同共支持5种选择器,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器。若省略mode值不写,则默认效果是普通选择器。当mode=’region’时为省市区选择器效果。

为了提供更加丰富的天气信息,该系统也报告了城市的湿度、气压、能见度、风向、风速和风力等情况,也采用’内容’组件时间。最后通过index.wxss实现对页面的优化排布,实现如图3所示。

在这里插入图片描述

图3:城市选择界面(左);天气预报系统主界面(右)

3.5 数据的获取于处理

该系统的目标是根据用户需要,能够从云端实时的获取全国各个市县区天气数据,和风天气提供了全国4000+个市县区和海外15万个城市实时天气数据,包括实时温度、体感温度、风力风向、相对湿度、大气压强、降水量、能见度、露点温度、云量等数据。本实验通过API网络接口配置,实现对所需数据(温度,湿度等)的读取。

请求。URL为https://devapi.qweather.com/v7/weather/now?[请求参数],该链接用于获取所需天气数据,其中请求参数包括必选和可选参数,如不填写可选参数将使用其默认值,参数之间使用&进行分隔。必选参数有key 和location ,Key是用户通过网站认证获得的,而且还支持数字签名的方式进行认证。为了实现对特定城市的数据获取,我们需要得到查询地区的LocationID,本设计主要通过请求URL:https://geoapi.heweather.net/v2/city/lookup?[请求参数]来获取LocationID,之后再通过上述https://devapi.qweather.com/v7/weather/now?[LocationID]&key来获得编号为LocationID的城市天气情况,以北京的实况天气为例,在浏览器中输入https://devapi.qweather.com/v7/weather/now?location=101010100&key=3d14f494489d4552a3114c1fdc2688b0,可获得北京天气的实时数据。如下:

{"code":"200",
"updateTime":"2022-06-07T21:12+08:00"
"fxLink":"http://hfx.link/2ax1",
"now":{
"obsTime":"2022-06-07T21:06+08:00",
"temp":"22",
"feelsLike":"16",
"icon":"104",
"text":"阴",
"wind360":"135",
"windDir":"东南风",
"windScale":"5",
"windSpeed":"33",
"humidity":"42",
"precip":"0.0",
"pressure":"1002",
"vis":"26",
"cloud":"100",
"dew":"7"},
"refer":{
"sources":["QWeather","NMC","ECMWF"],
"license":["no commercial use"
]}}

以上数据为北京市的实时天气原始数据,还需要对该数据进行解析,获得本系统所需的关键数据,这些数据的的意义如表1所示。

表1 参数以及意义

参数意义
now.obsTime数据观测时间
now.temp温度,默认单位:摄氏度
now.feelsLike体感温度,默认单位:摄氏度
now.icon天气状况和图标的代码
now.text天气状况的文字描述,包括阴晴雨雪等天气状态的描述
now.wind360风向360角度
now.windDir风向
now.windScale风力等级
now.windSpeed风速,公里/小时
now.humidity相对湿度,百分比数值
now.precip当前小时累计降水量,默认单位:毫米
now.pressure大气压强,默认单位:百帕
now.vis能见度,默认单位:公里
now.cloud云量,百分比数值。可能为空
now.dew露点温度。可能为空

接下来便是如何从天气信息数据库中获取目标信息的代码实现,思路与上文分析一致,需要注意的是需要在微信开发者工具绑定请求网站的域名,如图4(左)所示,这样才能下载到所需的天气信息,如图4(右):

  getWeater:function(){var that=this; //this不可以在微信api使用wx.request({url: 'https://geoapi.heweather.net/v2/city/lookup?',data:{location:that.data.region[2],key:'3d14f494489d4552a3114c1fdc2688b0',},success:function(res){    //如果城市ID找到了,则找对应ID的城市详细信息that.setData({Place_ID:res.data.location[0].id})  //将城市ID用变量存储wx.request({            //寻找城市的详细信息url: 'https://devapi.qweather.com/v7/weather/now?',data: {location:that.data.Place_ID,key:'3d14f494489d4552a3114c1fdc2688b0'},success:function(res){     //如果找到了console.log(res.data)that.setData({now:res.data.now})    //将详细信息用Place_Message存储}})}})}

在这里插入图片描述

图4:服务器域名设置(左);下载获得数据(右)

3.6 实现与验证

在完成所用程序的编写后,需要对其编译获得最终的视图层,本实验将初始所在地定位河南省许昌市禹州市,初始界面如图5(左)所示,之后以查询吉林省长春市净月区天气为例,如图6(中,右)实现系统的验证。

在这里插入图片描述

图5:禹州市天气情况界面(左);选择城市(中);长春市南关区天气情况界面(右)

四、实验总结

本实验设计了一个可查询全国实时天气的微信小程序,使我充分了解了微信小程序这一轻量应用的重要实际意义,也系统学习了小程序设计的基本流程,在一定程度的提升了对问题的解决能力。未来将尝试增加一些新的功能,比如灾难预警和空气质量播报等。


http://www.ppmy.cn/news/41323.html

相关文章

Reactor线程模型

Reactor线程模型1. 概念2.角色3.模型类型单Reactor-单线程单Reactor-多线程⭐主从Reactor-多线程Code design(参考zk)1. 创建服务, 创建服务上下文工厂2. 初始化服务上下文工厂配置3. 启动服务, 从里往外(worker > selector > accept)依次进行启动线程4. Accept Thread中…

Voting_Averaging算法预测银行客户流失率

Voting_Averaging算法预测银行客户流失率 描述 为了防止银行的客户流失,通过数据分析,识别并可视化哪些因素导致了客户流失,并通过建立一个预测模型,识别客户是否会流失,流失的概率有多大。以便银行的客户服务部门更…

【C++】队列模拟问题

文章目录队列模拟问题12.7.1 ATM问题12.7.2 队列类12.7.3 Queue类的接口12.7.4 **Queue类的实现**12.7.5 是否需要其他函数?12.7.6 Customer类queue.hqueue.cpp12.7.7 ATM模拟main.cpp队列模拟问题 12.7.1 ATM问题 Heather银行打算在Food Heap超市开设一个自动柜员…

用Appium进行iOS自动化测试

iOS UI自动化测试方案(Appium) 1. 环境搭建 (1)安装Xcode和Xcode Command Line Tools (2)安装Homebrew (3)安装Node.js (4)安装Appium (5&a…

2020年11月信息系统项目管理师真题(综合+案例)

请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 1、( )使系统的描述及信息模型的表示与客观实体相对应,符合人们的思维习惯,有利于系统开发过程中用户与开发人员的…

【开源项目】BallCat 项目脚手架

简介 🎉🎉🎉 基于 React 和 Ant Design 版本的前端 ballcat-ui-react 已发布,欢迎大家尝鲜使用 BallCat 组织旨在为项目快速开发提供一系列的基础能力,方便使用者根据项目需求快速进行功能拓展。 在以前使用其他后台管…

一、JS01 JavaScript 基础

一、JavaScript 基础 1.1 JavaScript 概述 1.1.1 JavaScript 基本介绍 JavaScript (简称 JS) 是一种具有函数优先级的轻量级、解释型、即时编译型的编程语言JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明…

科普|FCC的卫星标准 为什么又说是FCC Part25呢?

我们今天介绍的FCC的卫星标准,在美国是作为一种法律规定,具有法律效力的标准,通常又称为法规文件。 01 — FCC Part 25 我们先从CFR说起,《美国联邦法规》( Code of Federal Regulations ,简称CFR&#…