前言
最近在学小程序开发,刚好学到天气预报功能的制作,于是给大家分享下。
效果图
天气API获取
这里我用的是和风天气的API,打开官网注册或者登陆你的账号
进入控制台,新建应用
这是刚刚我们创建好的应用,点击添加KEY
选择WebAPI
这注册好我们的API了
微信小程序后台域名配置
登陆小程序后台,分别点击开发和开发设置
点击修改,将我们API的域名添加到request合法域名里面https://free-api.heweather.net
页面代码
.wxml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | < view class = "header" > < view class = "top" > < view class = "city" > {{city}} </ view > < view class = "search" > < input placeholder = "输入城市名" bindinput = "bindKeyInput" placeholder-style = "color:white" ></ input > < view class = "bt_search" bindtap = "search" > < icon type = "search" size = "18" color = "white" ></ icon > </ view > </ view > </ view > < view class = "center" > < view class = "tmp" > {{tmp}}° </ view > < image mode = "widthFix" class = "cond-image" src = "https://moyv.top/wechat/images/weather/{{imgsrc}}.png" > </ image > </ view > < view class = "bottom" > < view >{{wind_dir}} {{wind_sc}}级</ view > < view >湿度 {{hum}}%</ view > < view >气压 {{pres}}Pa</ view > </ view > </ view > < view class = "container" > < view class = "hourly_title" >24小时预报</ view > < scroll-view scroll-x = "true" class = "hourly" > < view class = "h_item" wx:for = "{{hourly}}" wx:key = "index" > < text class = "h_time" >{{item.time}}</ text > < view class = "h_img" > </ view > < text class = "h_tmp" >{{item.tmp}}°</ text > < text class = "h_wind_dir" >{{item.wind_dir}}</ text > < text class = "h_wind_sc" >{{item.wind_sc}}级</ text > </ view > </ scroll-view > < view class = "hourly_title" >7天预报</ view > < scroll-view scroll-x = "true" class = "daily" > < view class = "d_item" wx:for = "{{daily_forecast}}" wx:key = "index" > < text class = "d_txt" >{{item.d_txt}}</ text > < text class = "d_date" >{{item.d_date}}</ text > < view class = "h_img" > </ view > < text class = "h_tmp" >{{item.tmp_min}}°~{{item.tmp_max}}°</ text > < view class = "h_img" > </ view > < text class = "d_wind_dir" >{{item.wind_dir}}</ text > < text class = "d_wind_sc" >{{item.wind_sc}}级</ text > </ view > </ scroll-view > </ view > < view class = "footer" > -天气数据来自和风天气api- </ view > |
.wxss
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 | page { background-color : #f6f6f6 ; } .header { background-color : #64c8fa ; /* background-image: linear-gradient(to right, #64a0f8, #64c8fa); */ height : 450 rpx; padding-top : 32 rpx; text-align : center ; } . top { display : flex; justify- content : space-between; align- content : center ; align-items: center ; } .city { text-align : center ; color : white ; display : inline- block ; font-size : 52 rpx; margin-left : 32 rpx; } .search { margin-right : 32 rpx; border-radius: 8 rpx; display : inline-flex; justify- content : center ; align- content : center ; align-items: center ; background-color : rgba( 0 , 0 , 0 , 0.1 ); height : 70 rpx; } .search input { width : 200 rpx; padding : 18 rpx 32 rpx; text-align : left ; color : white ; display : inline- block ; } .bt_search { border-radius: 0 8 rpx 8 rpx 0 ; height : 100% ; background-color : rgba( 0 , 0 , 0 , 0.1 ); display : inline-flex; justify- content : center ; align- content : center ; align-items: center ; } .bt_search icon { margin : 8 rpx 18 rpx; } . center { display : flex; justify- content : space-between; align- content : center ; align-items: center ; } .tmp { margin-left : 18 rpx; display : inline- block ; font-size : 180 rpx; color : white ; } .cond-image{ width : 200 rpx; margin-right : 32 rpx; margin-top : 32 rpx; } . bottom { display : flex; justify- content : space-between; align- content : center ; align-items: center ; } . bottom view{ color : white ; margin : 32 rpx; } .hourly_title{ font-weight : bold ; font-size : 42 rpx; padding : 18 rpx 32 rpx; } .hourly { width : 718 rpx; margin : 0 18 rpx; border-radius: 18 rpx; box-shadow: 0.1 rem 0.1 rem 0.5 rem rgba( 0 , 0 , 0 , 0.15 ); white-space : nowrap ; background-color : white ; } .h_item { margin : 18 rpx 0 ; display : inline- block ; width : 143.5 rpx; text-align : center ; font-size : 28 rpx; } .h_img { margin : 64 rpx 0 ; } .h_img image { width : 60 rpx; } .h_item text { display : block ; } .h_time { color : gray ; } .h_wind_dir { margin-top : 32 rpx; } .h_wind_sc { color : gray ; } .h_tmp { color : #027aff ; } .daily { width : 718 rpx; white-space : nowrap ; margin : 0 18 rpx; background-color : white ; border-radius: 18 rpx; box-shadow: 0.1 rem 0.1 rem 0.5 rem rgba( 0 , 0 , 0 , 0.15 ); } .d_item { margin : 18 rpx 0 ; display : inline- block ; width : 179.5 rpx; text-align : center ; font-size : 28 rpx; } .d_item text { display : block ; } .d_date { color : gray ; } .d_wind_dir { margin-top : 32 rpx; } .d_wind_sc { color : gray ; } .footer{ font-size : 28 rpx; color : gray ; text-align : center ; margin-top : 50 rpx; margin-bottom : 18 rpx; } |
.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | Page({ /** * 页面的初始数据 */ data: { search_city: '' , imgsrc:100 }, /** * 根据城市获取天气预报 */ getWeather(city) { let that = this //获取实况天气 wx.request({ success: function (res) { if (res.data.HeWeather6[0].status == 'unknown location' ) { wx.showToast({ title: '抱歉!没有该城市的天气预报' , icon: 'none' , duration: 2000 }) return ; } console.log(res) that.setData({ city: city, tmp: res.data.HeWeather6[0].now.tmp, imgsrc: res.data.HeWeather6[0].now.cond_code, wind_dir: res.data.HeWeather6[0].now.wind_dir, wind_sc: res.data.HeWeather6[0].now.wind_sc, hum: res.data.HeWeather6[0].now.hum, pres: res.data.HeWeather6[0].now.pres }) //获取24小时天气预报 wx.request({ success: function (res) { var arr = res.data.HeWeather6[0].hourly var hourly = [] for ( var i = 0; i < arr.length; i++) { hourly[i] = { "imgsrc" : arr[i].cond_code, "tmp" : arr[i].tmp, "time" : arr[i].time.substring(11), "wind_dir" : arr[i].wind_dir, "wind_sc" : arr[i].wind_sc } } that.setData({ hourly: hourly }) var weekArray = new Array( "周日" , "周一" , "周二" , "周三" , "周四" , "周五" , "周六" ); //获取未来7天天气预报 wx.request({ success: function (result) { //console.log(result) var arr = result.data.HeWeather6[0].daily_forecast var daily_forecast = [] for ( var i = 0; i < arr.length; i++) { daily_forecast[i] = { d_txt: i == 0 ? "今天" : weekArray[ new Date(arr[i].date).getDay()], d_date: arr[i].date.substring(5), imgsrc_d: arr[i].cond_code_d, imgsrc_n: arr[i].cond_code_n, wind_dir: arr[i].wind_dir, wind_sc: arr[i].wind_sc, tmp_max: arr[i].tmp_max, tmp_min: arr[i].tmp_min, cond_txt_d: arr[i].cond_txt_d } } that.setData({ daily_forecast: daily_forecast }) } }) } }) } }) }, bindKeyInput(e) { this .setData({ search_city: e.detail.value }) }, search() { this .getWeather( this .data.search_city) }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { this .getWeather( "广州" ) }, }) |
.json
1 2 3 4 | { "usingComponents" : {}, "navigationBarTitleText" : "天气预报" } |
注意问题(必看)
由于我的项目有用到天气预报的逐小时预报和7天预报,和风天气又必须实名才能获取到此数据,所以请登录和风天气后台进行实名认证
到此这篇关于微信小程序实现天气预报功能(附源码)的文章就介绍到这了,更多相关小程序实现天气预报内容请搜索自学编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学编程网!
- 本文固定链接: https://zxbcw.cn/post/201861/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)