微信小程序天气预报实战

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

api接口用的和风天气

代码如下

// pages/weather/weather.js

Page({

  /**

   * 页面的初始数据

   */

  data: {

    apiKey: "1f5e75b8a3f0472aaf2f618268b30b4e",

    City: '',

    Country:'',

    locationid:"",

    latlongFlag: false

  },

  /**

   * 生命周期函数--监听页面加载

   */

  onLoad(options) { 

    this.checkAuth()

  },

  checkAuth(){

    // 将当前页面的 this 赋值给 vm, 以区别于下面回调函数中的 this 

    const that = this

    wx.getSetting({

      success(res) {

        console.log(res)

        // 1. scope.userLocation 为真, 代表用户已经授权

        //第一次判断的时候scope.userLocation为undefined,需要运行一次wx.getLocation才可以设置位置允许

        if ((typeof (res.authSetting['scope.userLocation']) == "undefined") ||

          (res.authSetting['scope.userLocation'])) {

          wx.getLocation({

            type: 'wgs84',

            success(res){

              that.setData({

                latitude: res.latitude,

                longitude:res.longitude,

                latlongFlag: true

              })

              console.log(res)

              console.log(that.data.longitude,that.data.latitude)

              that.getCityByLoaction()

            }

          })

        }else {

          // 2. 用户未授权的情况下, 打开授权界面, 引导用户授权.

          that.requireLocation()

        }

      }

    })

  },

  requireLocation(){

    const that = this

    wx.showModal({

      title: '提示',

      content: '需要获取您的位置信息,请前往设置界面开启位置权限。',

      success: function (res) {

        if (res.confirm) {

          // 用户点击确定按钮,打开设置界面

          wx.openSetting({

            success: (settingRes) => {

              console.log("settingRes",settingRes)

              if (settingRes.authSetting['scope.userLocation']) {

                // 用户已经同意授权

                wx.showToast({

                  title: '授权成功',

                  icon: 'success',

                  duration: 2000

                });

                that.checkAuth()

              } else {

                // 用户依然拒绝授权

                wx.showToast({

                  title: '授权失败',

                  icon: 'none',

                  duration: 2000

                });

              }

            }

          });

        } else if (res.cancel) {

          // 用户点击取消按钮

          wx.showToast({

            title: '您取消了授权',

            icon: 'none',

            duration: 2000

          });

        }

      }

    });

  },

  queryWeather(){

    this.weather_now()

  },

 //通过经纬度获取城市的id

  getCityByLoaction() {

      var that = this

      wx.request({

        url: 'https://geoapi.qweather.com/v2/city/lookup?', 

        method: 'GET',

        data: {

          key: this.data.apiKey,

          location: that.data.longitude.toString() + ',' + that.data.latitude.toString()

        },

        success: (res) => {

          if(res.data.code === "200"){

            this.setData({

              locationid: res.data.location[0].id,

              City:res.data.location[0].name,

              Country:res.data.location[0].country

            })

            // Fetch weather information using locationid

            this.getWeatherInfo(this.data.locationid);

          }else{

            console.log("fail to input city")

          }

        },

      })

  },

  //通过输入城市名获取城市的id

  weather_now(){

    wx.request({

      url: 'https://geoapi.qweather.com/v2/city/lookup?', 

      method: 'GET',

      data: {

        key: this.data.apiKey,

        location: this.data.city

      },

      success: (res) => {

        if(res.data.code === "200"){

          this.setData({

            locationid: res.data.location[0].id,

            City:res.data.location[0].name,

            Country:res.data.location[0].country

          })

          // Fetch weather information using locationid

          this.getWeatherInfo(this.data.locationid);

        }else{

          console.log("fail to input city")

        }

      },

    });

  },

  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

  },

  // 根据空气质量值返回对应的颜色类

  getAqiCategory(value) {

    // 根据实际情况定义不同的空气质量范围

    if (value <= 50) {

      return 'good';

    } else if (value <= 100) {

      return 'moderate';

    } else if (value <= 150) {

      return 'unhealthy';

    } else {

      return 'severe';

    }

  },

    // 获取天气信息的方法

    getWeatherInfo(locationid) {

      const that = this

      wx.request({

        url: `https://devapi.qweather.com/v7/weather/now?location=${locationid}&key=${that.data.apiKey}`,

        method: 'GET',

        success: (res) => {

          if(res.data.code === "200"){

            that.setData({

              now: res.data.now

            })

          }

          // Handle the weather information response

          console.log('Weather Now:', res.data);

        },

        fail: (error) => {

          // Handle the request failure

          console.error('Failed to fetch weather information:', error);

        }

      });

      wx.request({

        url: `https://devapi.qweather.com/v7/weather/24h?location=${locationid}&key=${that.data.apiKey}`,

        method: 'GET',

        success: (res) => {

          if(res.data.code === "200"){

            res.data.hourly.forEach(function(item){

                item.time = that.formatTime(new Date(item.fxTime)).hourly

            })

            that.setData({

              hourly: res.data.hourly

            })

          }

          // Handle the weather information response

          console.log('Weather 24 hour:', res.data);

        },

        fail: (error) => {

          // Handle the request failure

          console.error('Failed to fetch weather information:', error);

        }

      });

      wx.request({

        url: `https://devapi.qweather.com/v7/weather/7d?location=${locationid}&key=${that.data.apiKey}`,

        method: 'GET',

        success: (res) => {

          if(res.data.code === "200"){

            that.setData({

              daily: res.data.daily

            })

          }

          // Handle the weather information response

          console.log('Weather 7d:', res.data);

        },

        fail: (error) => {

          // Handle the request failure

          console.error('Failed to fetch weather information:', error);

        }

      });

      wx.request({

        url: `https://devapi.qweather.com/airquality/v1/now/${locationid}?key=${that.data.apiKey}`,

        method: 'GET',

        success: (res) => {

          console.log('Aqi Information:', res.data);

          if(res.data.code === "200"){

            that.setData({

              aqiAvailable:true,

              aqi: res.data.aqi[0],

              aqicolor : this.getAqiCategory(res.data.aqi[0].value)

            })

          }else{

            that.setData({

              aqiAvailable:false

            })

          }

        },

        fail: (error) => {

          // Handle the request failure

          console.error('Failed to fetch aqi information:', error);

        }

      });

    },

  //获取输入框的值

  getInutValue(e) {

    console.log(e);

    this.setData({

      city: e.detail.value  //获取页面input输入框输入的值,并传给city

    })

    console.log(this.data.city);

  },

  /**

   * 生命周期函数--监听页面初次渲染完成

   */

  onReady() {

  },

  /**

   * 生命周期函数--监听页面显示

   */

  onShow() {

  },

  /**

   * 生命周期函数--监听页面隐藏

   */

  onHide() {

  },

  /**

   * 生命周期函数--监听页面卸载

   */

  onUnload() {

  },

  /**

   * 页面相关事件处理函数--监听用户下拉动作

   */

  onPullDownRefresh() {

  },

  /**

   * 页面上拉触底事件的处理函数

   */

  onReachBottom() {

  },

  /**

   * 用户点击右上角分享

   */

  onShareAppMessage() {

  }

  

})文章来源地址https://www.toymoban.com/news/detail-825373.html

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

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

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

相关文章

  • “微天气” - 一个基于微信小程序的智能天气预报体验

    微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发

    2024年02月09日
    浏览(48)
  • Flutter开发微信小程序实战:构建一个简单的天气预报小程序

    微信小程序是一种快速、高效的开发方式,Flutter则是一款强大的跨平台开发框架。结合二者,可以轻松地开发出功能丰富、用户体验良好的微信小程序。 这里将介绍如何使用Flutter开发一个简单的天气预报小程序,并提供相应的代码示例。 在开始之前,确保你已经安装了Fl

    2024年02月12日
    浏览(55)
  • 微信小程序开发--利用和风天气API实现天气预报小程序

    本来是参照《微信小程序开发实战》做一个天气预报小程序的,实际运行的时候提示错误,code 400,参数错误。说明问题应该出在查询API的语句上,没有返回结果。 查阅后才知道,可能书籍出版时间较早,现在的和风获取天气的API出现了一些调整,具体见实时天气 for API | 和

    2023年04月27日
    浏览(90)
  • 【小程序】微信开发者工具+心知天气API实现天气预报

    问:为什么使用心知天气的天气数据API而不是其他产品? 答: 心知天气为我们提供了一款通过标准的Restful API接口进行数据访问的天气数据API产品; 心智天气官网为我们提供了足够详细的开发文档和用户手册,方便我们快速上手进行开发; 心知天气旗下的天气数据API针对不

    2024年01月16日
    浏览(74)
  • 天气预报小程序的设计与实现

    实验目的 1、 天气预报 项目的设计与实现; 实验环境 个人手机、与因特网连接的计算机网络系统;主机操作系统为Windows或MAC;微信开发者工具、IE等软件。 数据支持: 进制数据天气预报api   腾讯地图逆地址解析:   实验 项目需求 获取用户位置权限 获取当前位置 根据当

    2024年02月10日
    浏览(67)
  • 面对洪水困境,如何利用Python编写天气预报程序?

    洪水是一种自然灾害,给人们的生活和财产带来极大的威胁。在遭遇洪灾时,及时了解天气预报成为保护自身安全的关键。而如何利用Python编写一个简单但功能强大的天气预报程序,为我们提供准确的天气信息呢?本文将介绍一种方法来实现这一目标。 首先,我们需要安装一

    2024年02月14日
    浏览(38)
  • ESP8266获取天气预报信息,并使用CJSON解析天气预报数据

    当前文章介绍如何使用ESP8266和STM32微控制器,搭配OLED显示屏,制作一个能够实时显示天气预报的智能设备。将使用心知天气API来获取天气数据,并使用MQTT协议将数据传递给STM32控制器,最终在OLED显示屏上显示。 心知天气是一家专业的气象数据服务提供商,致力于为全球用户

    2024年02月10日
    浏览(54)
  • Android制作天气预报软件 —— 天气查询

    天气查询功能包括信息显示和地区选择两个版块,二者均通过调用极速数据的相关接口进行实现。其中,信息显示界面作为软件首页,默认先显示系统设置的地区天气情况,用户可通过地区选择的界面进行修改信息。对于天气信息,受接口调用次数限制,系统设置每24小时更

    2024年02月12日
    浏览(45)
  • 【小项目】微信定时推送天气预报Github项目使用及原理介绍-包含cron、天气预报、常用api...

    一、资料链接 1、github地址 https://github.com/qq1534774766/wx-push 2、教程地址 https://blog.csdn.net/qq15347747/article/details/126521774 3、易客云API(自动发送天气) https://yikeapi.com/account/index 4、apispace-各种接口(名人名言) https://www.apispace.com/console/api?orgId=6356 5、微信公众平台 https://mp.weixin.qq.com/d

    2024年02月02日
    浏览(47)
  • QT实现天气预报

    public:     MainWindow(QWidget* parent = nullptr);     ~MainWindow();    protected: 形成文本菜单来用来右键关闭窗口     void contextMenuEvent(QContextMenuEvent* event); 鼠标被点击之后此事件被调用     void mousePressEvent(QMouseEvent *ev); 移动窗口     void mouseMoveEvent(QMouseEvent* ev);     //重写过滤器方法

    2024年02月12日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包