教你实现一个天气实时查询微信小程序

教你实现一个天气实时查询微信小程序文章目录博主绪言组件选择部署阶段组件选择组件变量安排组件布局js后端逻辑处理环节API处理环节函数处理环节结束语博主绪言天气之子app主要功能是选择地区(省,市,区或者县),然后获取当前信息,把所选择的地区信息显示在界面上,然后调用和风天气免费的API,获取当前选择地区的天气信息,并且获取天气图标,把所有获取的这些信息,美观地显示在界面上。以下是示例界面:组件选择部署阶段组件选择根据上…

大家好,又见面了,我是你们的朋友全栈君。

博主绪言

天气之子app主要功能是选择地区(省,市,区或者县),然后获取当前信息,把所选择的地区信息显示在界面上,然后调用和风天气免费的API,获取当前选择地区的天气信息,并且获取天气图标,把所有获取的这些信息,美观地显示在界面上。以下是示例界面:
在这里插入图片描述

组件选择部署阶段

组件选择

根据上面的示例图,我们大概会用到picker组件(具体信息可见picker组件)
在这里插入图片描述

我会会使用到省市区选择器,因此选用这个属性。因为我们还需要根据我们选择的省市区部署到前端上面来,因此我们还需要绑定事件监听器,进行监听器方法的写作,由于地区内容会变,我门还需要在这个地方使用变量,以便于监听器函数对其进行改变。这个界面主要分为四个部分,分别为省市区,温度天气显示,天气图标显示,以及详细天气信息(湿度,气压,能见度,风向,风速,风力显示),因此我门可以使用view视图容器分别写入这四个部分,依此,我门需要的组件有,pinker,文本text,图片image。
我门首先可以建立一个基本的模型,什么都不写,先把界面写出来再说,代码示例:

<view class="container">
<!-- 地区,底部弹起的选择器,mode决定类型,change为选择器所绑定的监听器方法名,region为一个变量,专门显示省市区 -->
<picker mode="region" bindchange="change"> 
<view>{
  
  {region}}</view>
</picker>
<!-- 文本区域,天气如何,天气需要根据监听器方法显示,因此也使用变量表示 -->
<text>{
  
  {now.tmp}}C° {
  
  {now.cond_txt}}</text>
<!-- 图片区域,图标会变,地址采用变量表示(此前我门把需要的图片放在同目录下的image文件当中) -->
<image src="/image/cond-icon-heweather/{
  
  {now.cond_code}}.png"></image>  
<!-- 天气详细信息,都使用变量表示 -->
<view class="detail">
<view class="item1">
<view class="item2">湿度</view>
<view class="item2">气压</view>
<view class="item2">能见度</view>
</view>
<view class="item1">
<view class="item2">{
  
  {now.hum}}%</view>
<view class="item2">{
  
  {now.pres}}Pa</view>
<view class="item2">{
  
  {now.vis}}Km</view>
</view>
<view class="item1">
<view class="item2">风向</view>
<view class="item2">风速</view>
<view class="item2">风力</view>
</view>
<view class="item1">
<view class="item2">{
  
  {now.wind_dir}}</view>
<view class="item2">{
  
  {now.wind_spd}}Km/h</view>
<view class="item2">{
  
  {now.wind_sc}}级</view>
</view>
</view>
</view>

组件变量安排

由于上面都使用变量显示,所有我门需要给变量设置一个初始值,那就以湖南省长沙市岳麓区为例吧,我门上一篇文章《微信小程序从入门到入坑当中》提到过,变量一般都是在js文件当中的data当中修改:

Page({

  /**
   * 页面的初始数据
   */
  data: {
    region: ['湖南省','长沙市','岳麓区'],
    now:''
  },

组件布局

经过上面的组件选择,我是不忍心吧样例图放出来,因为没有组件布局,会一团糟,比较乱,因此适当的组件布局时很重要的。我们可以看到绪论里面的有样例图,里面总体部分时使用flex垂直布局,并且都是居中显示,样例代码如下:

/* pages/index/index.wxss */
.container{                       //整个视图容器的布局
  height: 100vh;                  //视图容器的高
  display: flex;
  flex-direction: column;         //视图容器当中所有组件垂直布局
  align-items: center;            //居中显示
  justify-content: space-around   //组件之间留有一定的间隙
}
.detail{                             //详细天气组件当中的布局
  display: flex;                     //flex布局
  flex-direction: column;           //垂直布局
  width: 100%;                      //整个部分占据屏幕宽度的百分之百
}
.item1{
  display: flex;
  flex-direction: row;
  margin: 20rpx;

}
.item2{
  width: 33.3%;
  text-align: center;
}
text{
  font-size: 50rpx;             //所有文本字体,颜色
  color: royalblue;
}
image{                        //设置图片的宽度高度
  width: 300rpx;
  height: 200rpx;
}

以下是示例图,由于变量需要调用API函数才能够变化,所有我们的示例界面是暂时把变量去掉,使用我们自己写的定制替代,这也初始效果更加好:
在这里插入图片描述

js后端逻辑处理环节

API处理环节

我们使用的天气资源API来源于和风天气,具体可以进去了解点击进入官网,进入官网以后首先注册一个自己的账号,然后绑定微信,实名认证就可以使用了。之后进入开发文档:
在这里插入图片描述

选择API->常规天气处理:
在这里插入图片描述
我们若要在微信小程序当中调用这个接口,首先找到请求URL(个人使用的话还是建议使用免费版的URL),文档里也有说明,里面主要有{weather-type}和{parameters},前者代表天气数据类型,我们需要的是实况天气数据,因此选择now,后者代表请求的数据参数,我们是根据城市地区查询天气的,因此需要location参数即可,具体格式,文档以及说的很清楚了。点击进入,
url:https://free-api.heweather.net/s6/weather/{weather-type}?{parameters}
比如说我需要请求湖南省长沙市的天气数据,请求的url应该为:
https://free-api.heweather.net/s6/weather/now?location=changsha&key=你自己的用户认证key。
用户认证key怎么获取:
进入控制台,点击应用管理,创建应用即可,应用类型选择web API。之后复制你的key即可。
在这里插入图片描述
输入我们的key值以后,我们可以访问上面那个网址,这时会出现一个网页,显示所有当地天气信息:
在这里插入图片描述
怎么让微信小程序访问呢?
我们进入并且登陆微信公众平台,选择开发->开发设置->服务器域名添加,我们需要添加和风天气接口域名:https://free-api.heweather.net
在这里插入图片描述
之后小程序就可以访问API了。

函数处理环节

我们进入核心环节,把之前的定制都改为变量,我们之前定义了一个picker的事件函数change,我们可以在这个方法中调用天气获取的函数,并且把获取的信息:比如地域更新显示在界面上。

Page({

  /**
   * 页面的初始数据
   */
  data: {
    region: ['湖南省','长沙市','岳麓区'],
    now:''                         //各个变量的数据都是now的不同的部分,分别调用
  },
change:function(e){
  this.setData({                 //获得detail.value,即地域信息
    region: e.detail.value
  })
  this.getWeather();    //更新天气

},
getWeather:function(e){
  var that = this;    //this不可以之间在微信API函数内部使用,把this赋值到that里面
  wx.request({  //查询天气时地域会变化,因此url也会变化即里面的parameters参数,我们可以分开处理,如下:
    url: 'https://free-api.heweather.net/s6/weather/now?',   //主要url
    data:{                                 //http请求当中的参数
      // location:that.data.region[1]+that.data.region[2],
      location: that.data.region[1],       //地域参数
      key:'写入你自己的key'                //key参数
    },
    success:function(res){                //如果天气获取函数运行成功,把获取到的结果放入到res对象当中
      // console.log(res.data)
      that.setData({ 
        now:res.data.HeWeather6[0].now        //调用res当中的实时天气数据
      })
    }
  })
}
,

至于这个request函数,开发文档里面也有,大家具体可以参考这里
注意!!!这个时候,有一个问题,就是我们定义了一个变量,那么初始打开程序的时候变量值不知道是啥,又怎么显示呢,这个时候我们就需要在js文件里面的onlaod函数调用天气获取函数:

/**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

     this.getWeather();
  },
//只要页面一加载,小程序一启动,就会触发这个函数,自动调用天气获取函数,就能够得到我们默认的湖南省长沙市岳麓区的天气数据,并且显示在界面上。

最终样例就形成了,至于大家还要添加什么功能或者优化界面就是后续的事。

结束语

既然我们可以这也调用和风天气的API,实时获取数据,那么我们是不是可以获取某一个快递平台API的数据查找快递信息,那么我们是不是可以调用某一个医院API的数据或者国家卫生局API的数据实时调查各个地方疫情数据呢,到底是不是,大家感兴趣的可以去试试,方法大同小异,可以类比这个方法实现,当然其中会遇到很多bug,会很头疼,不要怕,挺过去,咬牙不放,一天时间足够了。最后,希望大家寒假愉快,码出自己的一片天地,用键盘为武汉加油!!!(这篇文章写于寒假,最近从个人博客中导入到CSDN)
与这篇文章一个系列的还有:
微信小程序从入门到入坑
云开发:让你拥有自己的第一个的AI人脸识别小程序
最后,欢迎大家关注我的个人博客,在下所有的文章都是从个人博客导入进来的,文章会首先更新在个人博客里。希望我的博客能够给大家带来收获!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146635.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 冒泡排序详解_超详细电音

    冒泡排序详解_超详细电音1、什么是冒泡排序?冒泡排序的英文BubbleSort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。冒泡排序的原理:每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第2位上的数归位,依次类推下去。如果有n个数进行排序,只需将n-1个数归位,也就是要进行n-1趟操作。而“每一趟”都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面

    2022年10月19日
  • MYSQL 回表、索引覆盖、 索引下推[通俗易懂]

    MYSQL 回表、索引覆盖、 索引下推[通俗易懂]1.索引种类创建数据表&插入数据createtableuser(idint(10)auto_increment,namevarchar(30),agetinyint(4),primarykey(id),indexidx_age(age)USINGBTREE)engine=innodbcharset=utf8mb4;insertintouser(name,age)values(‘张三’,30),

  • 区块链体验的几点建议,CIC共识网络让保险操作更智能

    区块链体验的几点建议,CIC共识网络让保险操作更智能自从双持了iOS和Android之后,就开始了CIC共识网络App在不同平台的玩耍,使用了一段时间之后,掰扯掰扯下自己的使用体验。1、先说下邀请安装体验,邀请人分别网址邀请和二维码邀请,就CIC的邀请方式有2种,比较全面。但根据本人使用的多款区块链APP来看,目前CIC的邀请不论是网址邀请,还是二维码邀请,广告词内容和二维码界面基本没什么特色,只是平白的介绍而已。一是广告词缺乏吸引客户主动注册的文…

  • springboot线程池的使用和扩展「建议收藏」

    springboot线程池的使用和扩展「建议收藏」我们常用ThreadPoolExecutor提供的线程池服务,springboot框架提供了@Async注解,帮助我们更方便的将业务逻辑提交到线程池中异步执行,今天我们就来实战体验这个线程池服务;本文地址:http://blog.csdn.net/boling_cavalry/article/details/79120268实战环境windowns10;jdk1.8;spring

  • 一条语句改变进度条颜色及去掉进度条边框

    一条语句改变进度条颜色及去掉进度条边框 一、        改变进度条颜色 在VC里想改变进度条颜色,在网上找了很多方法,都很麻烦,觉得很郁闷。后来想起在用VB做时,增经用API实现过,很简单。后来再一查,原来是SendMessage这个函数,几经试验,终于成功,高兴,与大家分享!!!!      代码如下:          m_Progress1.SendMessage(PBM_SETBKCOLOR,0,R

  • 数据挖掘之时间序列分析[通俗易懂]

    数据挖掘之时间序列分析[通俗易懂]按时间顺序排列的一组随机变量X1,X2,…,Xt表示一个随机事件的时间序列。时间序列分析的目的是给定一个已被观测了的时间序列,预测该序列的未来值。表1常用的时间序列模型 模型名称 描述 平滑法 常用于趋势分析和预测,利用修匀技术,削弱短期随机波动对序列的影响,使序列平滑化。 根据所用平滑技术的不同,可分为移动平均法和指数平滑法。 趋势拟合法…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号