【小程序】微信开发者工具+心知天气API实现天气预报

这篇具有很好参考价值的文章主要介绍了【小程序】微信开发者工具+心知天气API实现天气预报。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

问:为什么使用心知天气的天气数据API而不是其他产品?

答:

  • 心知天气为我们提供了一款通过标准的Restful API接口进行数据访问的天气数据API产品;

  • 心智天气官网为我们提供了足够详细的开发文档和用户手册,方便我们快速上手进行开发;

  • 心知天气旗下的天气数据API针对不同用户提供了四种产品套餐:免费版、试用版、开发者套餐和企业版;对于处在学习阶段的我们可以选择免费申请试用版进行测试学习;


1.效果图

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端


2.获取心知天气API接口

2.1.获取个人API私钥

心知天气官网链接:心知天气https://www.seniverse.com/

  • 进入心知天气官网注册账号

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端

  • 登录成功后进入控制台页面添加产品(注:这里的试用版和免费版是我已添加过的

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端

  • 免费申请试用版(亦可充值申请开发者套餐进行长期开发,价格也比较划算)

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端

  • 申请成功后点击产品管理=>进入您选择的产品项,在基本信息项获取API私钥

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端

2.2.查询开发文档获取API接口

  • 官网点击文档进入

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端

  • 心知天气API文档链接

3.开发测试

3.1.获取页面素材包

  • 心知天气官方文档提供:(注:本演示代码背景采取浅色系,推荐使用官方文档提供的暗色主题图标)
  • 心知天气官方文档提供的亮色系主题图标链接
  • 心知天气官方文档提供的暗色系主题图标链接

使用原因:

                   

亮色主题图标

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端

                                                                                                           

暗色主题图标

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端

                                                                                    

  • 本文演示代码背景使用浅色系,使用亮色主题图标如图所示,会和浅色背景混合导致图标显示不清,所以推荐使用暗色主题图标;

  • 心知天气提供的素材包命名格式采取code@1x.png格式,code是后文中使用wx.request请求API接口获得的属性,可以避免我们自定义方法切换素材从而增大系统开销;

3.2.main.json

{
  "usingComponents": {},
  "navigationBarBackgroundColor": "#000000",
  "navigationBarTextStyle": "white",
  "navigationBarTitleText": "天气预报",
  "backgroundColor": "#eeeeee",
  "backgroundTextStyle": "light"
}
  • usingComponents:用于引入自定义组件。这里没有引入任何自定义组件,后期可进行二次开发添加组件;

  • navigationBarBackgroundColor:设置小程序导航栏的背景颜色;

  • navigationBarTextStyle:设置小程序导航栏的文字颜色;

  • navigationBarTitleText:设置小程序导航栏中间的标题;

  • backgroundColor:设置小程序页面的背景颜色

  • backgroundTextStyle:设置小程序页面的背景文字颜色,以适应浅色背景


3.3.main.wxml

<view>
  <view class="header-modular"><!--顶部模块的容器-->
    <image class="bg-wave" src="../../images/black/bg_wave.gif"></image><!--背景图片-->
    <view class="row" style="width: 100%;margin: auto;"><!--水平布局的容器-->
      <view class="tmp" id="now_tmp">{{now.temperature}}°</view><!--当前温度-->
      <image class="icon-weather" id="now_icon" src="../../images/black/{{now.code}}@1x.png"></image><!--当前天气图标-->
    </view>
    <view class="tips-wrap" id="now_wind"><!--风力、湿度和气压的容器-->
      <view class='tips'>风力:{{now.wind_scale}} 级</view>
      <view class='tips'>湿度:{{now.humidity}} %</view>
      <view class='tips'>气压:{{now.pressure}}Pa</view>
    </view>
  </view>


  <view class="card-modular"><!--卡片模块容器,24小时预报和7天预报-->
      <view class="title">24小时预报</view><!--标题-->
      <!-- 24小时数据 -->
      <view class="card-wrap" ><!--24小时预报的容器-->
        <view class="item hourly" wx:for="{{hourly}}" wx:key="index"><!--每个小时的预报-->
          <view class="text-gray">{{item.time}}</view><!--时间-->
          <image class="icon" src="../../images/black/{{item.code}}@1x.png"></image><!--天气图标-->
          <view class="text-primary mb-32">{{item.temperature}}°</view><!--温度-->
          <view>{{item.text}}</view><!--天气描述-->
          <view class="text-gray">{{item.wind_direction}}风</view><!--风向-->
        </view>
      </view>
  </view>

  <view class="card-modular">
    <view class="title">7天预报</view><!--7天预报的标题-->
    <view class="card-wrap">  <!--7天预报的容器-->
      <view class="item daily" wx:for="{{daily}}" wx:key="index"><!--每天的预报项-->
        <view>{{item.newDate}}</view><!--星期-->
        <view class="text-gray">{{item.date}}</view><!--日期-->
        <image class="icon" src="../../images/black/{{item.code_day}}@1x.png"></image><!--白天天气图标-->
        <view class="text-primary">{{item.low}}°~{{item.high}}°</view><!--最低温度和最高温度-->
        <image class="icon" src="../../images/black/{{item.code_night}}@1x.png"></image><!--夜晚天气图标-->
        <view>{{item.text_day}}</view><!--天气描述-->
        <view class="text-gray">{{item.wind_scale}}级</view><!--风力等级-->
      </view>
    </view>
  </view>
</view>

3.3.1.header-modular:顶部模块

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端

  • API接口返回的数据格式:

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端
图中信息来源于:心知天气 官方文档
  • {{now.XXX}}:在模板中插入从API接口中请求的动态数据

  • src="../../images/black/{{now.code}}@1x.png":图片素材来源于本地,且使用数据绑定根据API接口返回的code获取属于这段数据的图片素材


3.3.2.二十四小时预报卡片模块

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端

  • API接口返回的数据格式:

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端
图中信息来源于:心知天气 官方文档
  • wx:for{hourly}:列表绑定API接口返回的hourly数据进行循环渲染


3.3.3.七天预报卡片模块

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端

  • API接口返回的数据格式:

【小程序】微信开发者工具+心知天气API实现天气预报,微信小程序开发,微信开放平台,微信小程序,前端
图中信息来源于:心知天气 官方文档

3.4.main.wxss

/* pages/Weather/main.wxss */
body {
  padding-bottom: 60rpx;
}
/* 工具类 */
.row {
  display: flex;
  align-items: center;
}

.mb-32 {
  margin-bottom: 32rpx;
}

/* 页面样式 */
.header-modular {
  height: 400rpx;
  background-color: #64C8FA;
  background: linear-gradient(to bottom, #DCEAFC, #C1CFDF);
  position: relative;
  padding: 30rpx;
}

.header-modular .bg-wave {
  width: 100vw;
  position: absolute;
  bottom: -2rpx;
  left: 0;
  right: 0;
  height: 120rpx;
  mix-blend-mode: screen;
}


.header-modular .location-wrap .icon {
  width: 40rpx;
  height: 40rpx;
  margin-right: 8rpx;
}

.header-modular .tmp {
  font-size: 200rpx;
  font-weight: bold;
  color: #fff;
  margin-right: auto;
}

.header-modular .icon-weather {
  width: 200rpx;
  height: 200rpx;
}

.header-modular .tips-wrap {
  display: flex;
  justify-content: space-between;
}

.header-modular .tips {
  font-size: 28rpx;
  opacity: 0.8;
  color: #da1a1a;
  flex: 1;
}

.header-modular .tips:nth-child(3) {
  text-align: right;
}

.header-modular .tips:nth-child(2) {
  text-align: center;
}

.card-modular {
  padding: 0 30rpx;
  margin-top: 30rpx;
}

.card-modular > .title {
  font-size: 40rpx;
  font-weight: bold;
  position: relative;
  margin-left: 14rpx;
  margin-bottom: 16rpx;
}

.card-modular > .title::before {
  content: "";
  position: absolute;
  left: -14rpx;
  top: 10rpx;
  bottom: 10rpx;
  width: 8rpx;
  border-radius: 10rpx;
  background-color: #2F80ED;
}

.card-modular .card-wrap {
  /*width: 690rpx;*/
  border-radius: 18rpx;
  background-color: #ffffff;
  box-shadow: 0 0 20rpx 0 rgba(0, 0, 0, 0.2);
  overflow-x: auto;
  white-space: nowrap;
}

.card-modular .card-wrap .item {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  font-size: 28rpx;
  padding: 18rpx 0;
}

.card-modular .card-wrap .item.hourly {
  width: 138rpx;
}

.card-modular .card-wrap .item.daily {
  width: 172.5rpx;
}

.card-modular .card-wrap .item .icon {
  width: 60rpx;
  height: 60rpx;
  margin: 64rpx 0;
}

.card-modular .card-wrap .item .text-gray {
  color: gray;
}

.card-modular .card-wrap .item .text-primary {
  color: #2F80ED;
}

3.5.main.js

// pages/Weather/main.js
const private_key = "你的私钥";
Page({

  /**
   * 页面的初始数据
   */
  data: {
    location: '你的城市',
    now: {},
    hourly:[],
    daily:[]
  },
  getWeather() {
    wx.showLoading({
      title: '加载中',
    })
    wx.request({
      url: `https://api.seniverse.com/v3/weather/now.json?key=${private_key}&location=${this.data.location}&language=zh-Hans&unit=c`,
      method: 'GET',
      success: (res) => {
        console.log("总数据", res);
        this.setData({
          now: res.data.results[0].now
        })
      }
    })
    // 24小时天气预报获取
    wx.request({
      url: `https://api.seniverse.com/v3/weather/hourly.json?key=${private_key}&location=${this.data.location}&language=zh-Hans&unit=c&start=0&hours=24`,
      method: 'GET',
      success: (res) => {
        let hourlys =res.data.results[0].hourly;
        console.log(hourlys);
        hourlys.forEach((item)=>{
          item.time = this.formatTime(new Date(item.time)).hourly
        })
        this.setData({
          hourly:hourlys
        })
        console.log("24小时天气",this.data.hourly);
      }
    })
    //七天预报获取
    wx.request({
      url: `https://api.seniverse.com/v3/weather/daily.json?key=${private_key}&location=${this.data.location}&language=zh-Hans&unit=c&start=0&days=7`,
      method: 'GET',
      success: (res) => {
        let dailys =res.data.results[0].daily;
        dailys.forEach((item)=>{
          item.newDate= this.formatTime(new Date(item.date)).dailyToString,
          item.date =this.formatTime(new Date(item.date)).daily
        })
        this.setData({
          daily:dailys
        })
        console.log('7天数据',this.data.daily);
        wx.hideLoading();//关闭等待窗口
      }
    })
  },
  
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getWeather();
  },
  formatTime(date) {
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const day = date.getDate()
    const hour = date.getHours()
    const minute = date.getMinutes()
    const second = date.getSeconds()
    const weekArray = ["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
    const isToday = date.setHours(0, 0, 0, 0) == new Date().setHours(0, 0, 0, 0)
    return {
      hourly: [hour, minute].map(this.formatNumber).join(":"),
      daily: [month, day].map(this.formatNumber).join("-"),
      dailyToString: isToday ? "今天" : weekArray[date.getDay()]
    }
  },
  formatNumber(n) {
    n = n.toString()
    return n[1] ? n : '0' + n
  }
})
  • 声明常量private_key存储私钥,用于在getWeather()方法中向API发送请求时使用${private_key}模板字符串进行插值;
  • 在getWeather()方法中通过wx.request()方法向API发送请求,获取当天天气预报24小时天气预报七天天气预报。请求完成后调用formatTime()方法和formatNumber()方法格式化API接口返回的时间数据以及时间中的数字,将数据存储在页面data中的now、hourly和daily属性中,最后调用wx.hideLoading()方法关闭加载中的提示框;
  • 生命周期函数onLoad()在页面加载时触发,会调用getWeather()方法获取天气数据;

时贰肆年壹月拾日晌午文章来源地址https://www.toymoban.com/news/detail-795157.html

到了这里,关于【小程序】微信开发者工具+心知天气API实现天气预报的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序:微信开发者工具安装less插件

    微信小程序:本文主要是关于如何在微信开发者工具中安装less插件 不知道大家有没有像我一样习惯在vscode里面用惯了less,当需要用微信开发者工具开发小程序时,如果没有这个会有些不习惯,下面就简单介绍一下,如何在微信开发者工具中安装less插件。 less:是一个CSS预处

    2024年02月14日
    浏览(58)
  • 【微信小程序】微信开发者工具安装less插件

    微信小程序:本文主要是关于如何在微信开发者工具中安装less插件 不知道大家有没有像我一样习惯在vscode里面用惯了less,当需要用微信开发者工具开发小程序时,如果没有这个会有些不习惯,下面就简单介绍一下,如何在微信开发者工具中安装less插件。 less:是一个CSS预处

    2024年02月04日
    浏览(46)
  • 【微信小程序】--注册小程序账号&安装开发者工具(一)

    💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘   大家好,又见面了,

    2024年01月17日
    浏览(82)
  • 微信开发者工具开发小程序代码自动热加载/重载/部署

    微信小程序基础库 2.12.2 默认情况下,使用微信开发者工具开发小程序时,每次保存代码都会重启微信小程序,即每次都模拟器都返回到首页。有没有办法既更新模拟器中的小程序,又保持 在当前页呢?有的,启用代码热重载。 从微信小程序基础库(实测) 2.12.2 开始有了“

    2024年02月11日
    浏览(35)
  • 【微信小程序】微信Web开发者工具下载及安装

    🏆今日学习目标:微信Web开发者工具下载及安装 😃创作者:颜颜yan_ ✨个人主页:颜颜yan_的个人主页 ⏰预计时间:25分钟 🎉专栏系列:微信小程序开发 什么是微信小程序? 小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者

    2024年02月09日
    浏览(55)
  • 快速上手微信小程序(纯原生)基于微信开发者工具+云开发

    最近开发一个小程序。因为体量实在不大,两张表,几个接口。便打算写原生的代码。没有使用uniapp等框架。记录一下一个小程序从搭建到审核发布的那些坑和经验做为学习笔记。 几个网站请收藏 你的小程序需要开发工具: 保姆级传送门 你的小程序需要一个身份证: 微信公

    2024年02月10日
    浏览(46)
  • vscode开发小程序项目并在微信开发者工具运行

    需求:vscode开发uniapp之后在微信开发者工具运行,更改的时候微信开发者也同步更改 创建微信小程序所需插件,在vscode的插件管理里面安装就可以了 1.微信小程序开发工具 2.vscode weapp api 3.vscode wxml 4.vscode wechat 1.创建小程序命令 这里的uniapp-vue是项目名称,不能大写 2.选择un

    2024年02月09日
    浏览(42)
  • 微信小程序实现简单的点击切换功能(微信开发者工具)

    📚文章目录 🔗首先创建一个简单的切换按钮📋 如图下  📋wxml代码  📋wxss代码 🔗但是这个元素是无法点击的,所以要添加一个点击事件到这两个元素里面  📋js代码(在page({})里面添加) 📋wxml代码  🔗class使用三元表达式来继续点击判断  🔗使用bindtap绑定事件  事件的

    2024年02月09日
    浏览(62)
  • 微信开发者工具的下载及小程序项目创建

    1.注册并微信扫码登录微信公众平台(微信公众平台) 完成如下所示相关信息(保证所填写信息真实有效,以免后续使用出现不必要的问题) 2.点击“普通小程序开发者工具”,跳转至下图所示页面  3.开发工具的准备 点击“微信开发者工具”,跳转至下图所示页面。选择系

    2024年02月10日
    浏览(45)
  • 微信开发者工具 小程序 navigator组件 url传参

            在微信小程序编写过程当中,为避免内容重复、页面过多造成的代码体量大的问题,笔者通过navigator组件 url传参解决了这个问题:         一、问题描述         A页面中存在a,b,c,d四个按钮,分辨跳转到新页面。但是制作4个新页面明显会造成工作量大和

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包