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

教你实现一个天气实时查询微信小程序文章目录博主绪言组件选择部署阶段组件选择组件变量安排组件布局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)


相关推荐

  • 2014手机号码归属地数据库

    2014手机号码归属地数据库2014手机号码归属地数据库2014年最新版《手机号码归属地数据库》(更新时间:2014年4月6日),总共1万条记录。数据字段:-号码段(即。号码前7位)-省-市-供应商(含,通信协议)演示样例数据:”1300000″,”北京”,”北京”,”中国联通(GSM)””1…

  • goland激活码永久 3月最新注册码[通俗易懂]

    goland激活码永久 3月最新注册码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • java中如何理解类与对象,及局部变量和成员变量的区别

    java中如何理解类与对象,及局部变量和成员变量的区别

  • c语言数组定义(详细)「建议收藏」

    c语言数组定义(详细)「建议收藏」数组:什么是数组:变量的组合,是一种定义变量的手段。定义:类型数组名[数量];数组定义后,默认值同样不确定,因此也需要初始化。intarr[5]<==>intnum1,num2,num3,num4,num5;使用:数组名[编号]编号(下标)从0开始,范围[0,数量-1]遍历:配合for循环从头到尾显示,循环变量i就当做数组的下标。intarr[5];f…

  • 面试题,说说你对spring IOC和AOP的理解

    面试题,说说你对spring IOC和AOP的理解https://blog.csdn.net/s20081294/article/details/44677387在面试中,经常会问,说说你对springIOC和AOP的理解,问题很宽泛,似乎不知道从何说起。回答思路:1.先用通俗易懂的话解释下何为IOC和AOP———》2.各自的实现原理———–》3.自己的项目中如何使用以下是个人的一些总结,仅供参考。1.IOC…

  • ss端口已被占用1080_端口已被占用1080

    ss端口已被占用1080_端口已被占用1080SS端口已被占用1080打开电脑发现ss自动启动后订阅失败,原来又是1080端口被占用了。之前的话总是自不管他,自己就好了。这次却好半天还是有问题,就不得不查一查。然后,使用netstat-ano|findstr”1080″命令可以发现是PID为4700的进程占用了,然后就用tasklist|findstr”4700″查一查这个进程是何妖孽查不出是什么东西,那…

发表回复

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

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