IT评测·应用市场-qidao123.com
标题:
实时获取天气小程序
[打印本页]
作者:
大连密封材料
时间:
2024-10-27 16:09
标题:
实时获取天气小程序
一、实验目标
1、学习使用快速启动模板创建小程序的方法。
2、学习不使用模板手动创建小程序的方法。
3.学习使用微信小程序完整天气查询的工作。
二、实验步骤
1.API密钥申请
起首访问和风天气 | 贸易气象服务商, 天气预报,灾害预警,台风路径,卫星云图,天气API/SDK/APP, 天气插件, 汗青天气, 气象可视化 (qweather.com),然后注册登录,登录后就可以访问https://console.qweather.com/,点击项目管理,然后创建项目即可,最后的结果是这样的:
选择免费订阅:
注册乐成绩是这样:
2.API域名调用
这个是免费订阅的api接口:devapi.qweather.com/v7/weather/now,它需要两个大概更多的参数才能有访问的结果,其中一个是location,另有一个是key,location是对应的都会的编号,而key则是我们免费订阅的密钥,具体可以在此查询:
点击即可查询,但是注意密钥不要泄露。
例如查询devapi.qweather.com/v7/weather/now?location=101010100&key=6c468480cc4e455f9a3930212f5224f5,在浏览器输入即可得到以下回复
这是一些数据的参数和返回值:
3.服务器域名配置
访问微信开发平台,找到开发管理->开发设置,往下滑找到服务器域名,然后在第一个那填写
https://devapi.qweather.com
https://geoapi.qweather.com
保存即可
4.项目创建
1.按照图示创建项目即可,注意不要使用任何模板
2.删除和修改文件:
1)删除index.wxml和index.wxss的全部代码
2)删除index.js的代码,然后输入page补全代码:
3)删除app.js的代码,输入app补全函数,具体操纵同上
3.导航栏设计
在app.json文件中增长以下代码:
{
"pages": [
"pages/index/index"
],
"window": {
"navigationBarBackground": "#3883FA",
"navigationBarTitleText": "今日天气"
}
}
复制代码
最后渲染的结果如下:
4.创建一个imags目次,然后在这个目次下在建一个二级目次weather_icon,然后去和风天气官网下载好天气图片,解压在二级目次下即可,如下图表现:
5.页面设计
起首在index.wxml文件中增长以下代码:
<view class="container">
</view>
复制代码
然后在app.wxss文件中增长以下代码:
.container{
height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
}
复制代码
这样一来我们的容器就设置好了,然后我们需要将index.wxml文件中修改添加一下内容:
<view class="container">
<!-- 区域1:地区选择器 -->
<picker mode="region"bindchange = 'regionChange'>
<view>{{region}}</view>
</picker>
<!-- 区域2:单行天气信息 -->
<text> {{now.temp}}°C {{now.cond_txt}} </text>
<!-- 区域3:天气图标 -->
<image src= "/imags/weather_icon/{{now.icon}}.png" mode="widthFix"></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}} km</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.wxss文件中增长以下内容:
/* 图标样式 */
image{
width: 220rpx;
}
复制代码
这样我们的初始默认结果就是:
6.逻辑实现
起首在index.wxml中增长组件,追加自定义bindchange事件,具体修改如下:
<!-- 区域1:地区选择器 -->
<picker mode="region"bindchange = 'regionChange'>
<view>{{region}}</view>
</picker>
复制代码
然后我们需要再index.js文件中增长内容:
data: {
region:['安徽省','芜湖市','镜湖区']
},
regionChange:function(e){
this.setData({region: e.detail.value});
this.getWeather();
},
复制代码
然后的结果如下表现:
7.获取现实的天气数据
我们需要自定义getWeather函数实时获取天气,所以我们在index.js文件中修改代码:
getWeather:function(){
var that = this;
// 先通过地名获取 Location ID
wx.request({
url: 'https://geoapi.qweather.com/v2/city/lookup',
data: {
location: that.data.region[1], // 使用地名
key: '6c468480cc4e455f9a3930212f5224f5'
},
success: function(res) {
// 获取 Location ID
var locationId = res.data.location[0].id;
// 使用 Location ID 查询天气
wx.request({
url: 'https://devapi.qweather.com/v7/weather/now',
data: {
location: locationId,
key: '6c468480cc4e455f9a3930212f5224f5',
adm: that.data.region[1] // 使用地名
},
success: function(res) {
console.log(res.data);
that.setData({now:res.data.now});
}
})
}
});
},
复制代码
初始流程:
小程序的 getWeather 函数原本直接使用地名(如“芜湖市”)来获取天气信息。然而,和风天气 API 现实上更倾向于通过一个唯一的 Location ID(位置编号)来查询天气,而不是直接使用地名。因此,需要起首将地名转换为相应的编号。
获取 Location ID:
为了实现这一点,起首需要调用和风天气提供的 GeoAPI 接口。这个接口允许用户通过提供地名(例如“芜湖市”)来获取对应的 Location ID。小程序通过发送一个 HTTP 请求,通报地名参数和 API 密钥,查询到地名对应的 Location ID。
使用 Location ID 查询天气:
一旦得到了 Location ID,小程序就可以使用这个 ID 举行天气查询。再一次发出请求,这次是向和风天气的天气查询接口发送请求,提供 Location ID 和 API 密钥来获取对应位置的实时天气数据。
返回实时结果如下:
然后将所有的临时数据修改为{{now.属性}}具体如下:
<view class="container">
<!-- 区域1:地区选择器 -->
<picker mode="region"bindchange = 'regionChange'>
<view>{{region}}</view>
</picker>
<!-- 区域2:单行天气信息 -->
<text> {{now.temp}}°C {{now.cond_txt}} </text>
<!-- 区域3:天气图标 -->
<image src= "/imags/weather_icon/{{now.icon}}.png" mode="widthFix"></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}} km</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>
复制代码
这样这个实验就算是完善完成了。
三、程序运行结果
四、题目总结与领会
题目与解决办法
1.
地名转换为 Location ID
题目:
原始给出的解决办法是使用地名,但是现在调用查询必须是地名的标号,所以我们必须重新写一个程序,将地名转化为编号。
解决办法:
使用https://geoapi.qweather.com/v2/city/lookup来查询地名所对应的编号,然后再查询一次,将编号对应进去,查询新的结果即可。
2.
API 返回错误或无数据
题目:
调用 API 获取天气信息时,返回错误或没有数据(例如 API 返回空对象)。
解决办法:
检查 API 返回值:
在每次请求后,细致检查返回值,捕获和处理大概的错误信息,确保用户可以或许得到准确的反馈。
设置默认数据:
当 API 无法提供数据时,表现默认天气信息或提示用户稍后重试。
劳绩和领会
1.
深入明白 API 使用:
通过调用和风天气 API,将获得如何精确构建和发送 HTTP 请求、处理响应数据的经验。我相识到不同类型的 API 请求和它们的使用场景。
2.
实验对比:
对比上次的实验,我这次发现实验的步骤大差不差,但是有些细节方面的内容变得更加细致,原始的操纵文档也无法满足我们现在的编写要求,文档时间比较久远,比如说查询天气的api的参数:location,文档说明的是地名,但是现在我们所使用的参数则是地名的对应的编号,所以这个地方就和我们之前的区别比较大,另有就是我们对实时数据举行赋值的时候,发现它的数据名字是对不上的,需要自己在调试appdata中找到精确的名字,然后自己修改,通过这次实验,我也加深了自己创建小程序的明白和感悟,对这些知识有了更加多的认识。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4