2024年夏季《移动软件开发》实验报告
注意事项:
1、本实验中,需要使用和风天气 API,需要注册用户,大家请自行阅读和风天气官 方文档:https://dev.qweather.com/docs/api/weather/weather-now/
2、实验中需要的天气图片、utils.js 下载地址为:https://gaopursuit.oss-cnbeijing.aliyuncs.com/2022/demo2_file.zip
3、因为要向和风天气发送请求,如果保持登录状态将无法发送请求,切换为游客模式即可。
一、实验目标
1、掌握服务器域名 配置和临时服务器部署;
2、掌握 wx.request 接口的用法。
二、实验步骤
1.首先新建images
pages
index
文件夹及app.js
app.json
app.wxss
文件
如下图所示:
2.在app.json
中添加背景颜色等信息,修改界面样式
app.json
代码如下:
{
"pages": [
"pages/index/index",
"pages/logs/logs",
"pages/aaa"
],
"window": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "今日天气",
"navigationBarBackgroundColor": "#3883FA"
}
}
结果如下:
3.在index.wxss
文件中添加小程序信息,包括地区名、温度、天气等,并添加恰当的wxss样式,调整页面布局大小等
地区初始化为“北京市,北京市,东城区”,N/A图片是在网上找的一张图,表示暂时没有天气信息,其他信息为0;
index.wxml
代码如下:
<view class='container'>
<!-- 选择地区 -->
<picker>
<view style='font-size:50rpx'>北京市,北京市,东城区</view>
</picker>
<!-- 文本区域 -->
<text>0℃</text>
<!-- 图片区域 -->
<image src="/images/1.svg"></image>
<!-- 多行天气信息 -->
<view class='detail'>
<view class='bar'>
<view class='box'>湿度</view>
<view class='box'>气压</view>
<view class='box'>能见度</view>
</view>
<view class='bar'>
<view class="box">0%</view>
<view class="box">0hPa</view>
<view class='box'>0</view>
</view>
<view class='bar'>
<view class='box'>风向</view>
<view class='box'>风速</view>
<view class='box'>风力</view>
</view>
<view class='bar'>
<view class="box">0</view>
<view class="box">0 Km/h</view>
<view class="box">0 级</view>
</view>
</view>
</view>
index.wxss
代码如下:
.container{
height:100vh;
display:flex;
flex-direction:column;
align-items:center;
}
.detail{
width:100%;
display:flex;
flex-direction:column;
}
.bar{
display:flex;
flex-direction:row;
margin:20rpx 0;
}
.box{
width:33.3%;
text-align:center;
}
text{
font-size:80rpx;
color:#3C5F81;
}
image{
width:300rpx;
}
结果如下:
4.在app.wxss
文件中调整页面布局,使信息分散一些,不凑在一起
app.wxss
代码如下:
/**app.wxss**/
.container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 200rpx 0;
box-sizing: border-box;
}
结果如下:
5.在index.wxml
的“选择地区”里选择picker中的region,并添加bindchange函数,写入index.js
文件中
picker为从底部弹起的滚动选择器,本程序选用其中的省市区选择器;
bindchange为函数,可以更换城市信息,要自己写;
index.wxml
更改的代码如下:
<!-- 选择地区 -->
<picker mode='region' bindchange='changeRegion'>
<view style='font-size:50rpx'>北京市,北京市,东城区</view>
</picker>
index.js
代码如下:
data: {
region:['北京市','北京市','东城区']
},
changeRegion:function(e){
this.setData({
region:e.detail.value
})
this.getWeater();
},
结果如下:
在这里插入图片描述
6.进入和风天气官网->控制台->应用管理->新建应用,完成后复制key,保存起来
结果如下:
7.下载天气图片,并解压至images
中
注:实验中需要的天气图片、utils.js 下载地址为:https://gaopursuit.oss-cnbeijing.aliyuncs.com/2022/demo2_file.zip
8.获取常规天气数据:和风天气->文档->开发文档->实时天气->实时天气 for API,获取URL
以北京市为例的URL:
https://devapi.qweather.com/v7/weather/now?location=101010100&key=657a0142f0f04062a57f1d515f05bae0
9.登录微信公众平台->开发管理->服务器域名,添加 https://devapi.qweather.com和https://geoapi.qweather.com为request合法域名
结果如下:
10.在index.wxml
文件中将天气信息改为变量,并在index.js
文件中添加 getWeather 函数,获取任意地区的天气信息
index.wxml
改后代码如下:
<view class='container'>
<!-- 区域1:地区选择器 -->
<picker mode='region' bindchange='changeRegion'>
<view style='font-size:50rpx'>{{region}}</view>
</picker>
<!-- 区域2:文本区域 -->
<text>{{now.temp}}℃{{now.txt}}</text>
<!-- 区域3:图片区域 -->
<image src="/images/{{now.icon}}.svg"></image>
<!-- 区域4:多行天气信息 -->
<view class='detail'>
<view class='bar'>
<view class='box'>湿度</view>
<view class='box'>气压</view>
<view class='box'>能见度</view>
</view>
<view class='bar'>
<view class="box">{{now.humidity}}%</view>
<view class="box">{{now.pressure}}hPa</view>
<view class='box'>{{now.vis}}</view>
</view>
<view class='bar'>
<view class='box'>风向</view>
<view class='box'>风速</view>
<view class='box'>风力</view>
</view>
<view class='bar'>
<view class="box">{{now.windDir}}</view>
<view class="box">{{now.windSpeed}} Km/h</view>
<view class="box">{{now.windScale}} 级</view>
</view>
</view>
</view>
index.js
添加完后 data getWeather和 changeRegion 函数代码如下:
data: {
region:['北京市','北京市','东城区'],
now:{
temp:0,
icon:1,
cond_txt:'未知',
cond_code:'999',
humidity:0,
pressure:0,
vis:0,
windDir:0,
windSpeed:0,
windScale:0
}
},
changeRegion:function(e){
this.setData({
region:e.detail.value
})
this.getWeater();
},
getWeater: function(){
var that=this;//this不可以直接在wxAPI中使用
wx.request({
url: 'https://geoapi.qweather.com/v2/city/lookup',
data:{
location:that.data.region[1],
key:'657a0142f0f04062a57f1d515f05bae0'
},
success:function(res){
console.log(res.data)
that.setData({
Place_ID:res.data.location[0].id
})
wx.request({
url:'https://devapi.qweather.com/v7/weather/now?',
data:{
location:that.data.Place_ID,
key:'657a0142f0f04062a57f1d515f05bae0'
},
success:function(res){
console.log(res.data.now)
that.setData({
now:res.data.now
})
}
})
}
})
},
结果如下:
三、程序运行结果
切换城市前:
在这里插入图片描述
切换城市后:
四、问题总结与体会
1.描述实验过程中所遇到的问题,以及是如何解决的
和风天气API:
获取城市 id:https://geoapi.qweather.com/v2/city/lookup?
获取城市天气:https://devapi.qweather.com/v7/weather/now?
在利用 wx.request 的 API 和风天气的两个 API获取实况天气数据时,一直出错,经过在网上查找发现, 通过第一个 API 获取当前城市的 id,获取 id 成功后再将 id 和 key 作为参数通过第 二个 API 上传到和风天气服务器获取当前 id 城市的天气状况。
参考文章如下:
2023暑假小程序开发 实验2:天气查询小程序_微信小程序是如何获取天气的?-CSDN博客
2.收获和体会
学会了制作天气查询小程序的基础知识,虽然花费了很长时间,但是最终做出来了,觉得很有意义。
取天气的?-CSDN博客](https://blog.csdn.net/zhangyihuai123/article/details/132453188?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-132453188-blog-124496509.235v43pc_blog_bottom_relevance_base6&spm=1001.2101.3001.4242.1&utm_relevant_index=3)
2.收获和体会
学会了制作天气查询小程序的基础知识,虽然花费了很长时间,但是最终做出来了,觉得很有意义。