微信小程序云函数发天气预报

要求的是给一群固定的同事,每天定时定点发短信推送当天和明天的天气、气温、风速等等信息,短信平台用的是腾讯云通信,天气接口用的是心知天气的数据,之所以用微信小程序还是因为懒,云开发属实方便。

1.开通腾讯云短信,注册签名、模板,拿到API接口。

2.开通心知天气API的免费版。

3.因为人数较多,涉及到自动推送且心知天气免费版的访问速度限制,首先要把通讯录导进云数据库里,而小程序的云数据库单次访问只能读20条数据,用云函数打破限制。


const cloud = require('wx-server-sdk')
cloud.init({env:'your id'})
exports.main = async (event, context) => {
  const db = cloud.database()
  let num = await db.collection('msg_Sendlist').count()
  num = count.total
  let all = []
  for (let i = 0; i < num; i += 20) {
    let list = await db.collection('your collection').skip(i).get()
    all = all.concat(list.data);
  }
  return all;
}

4.先获取通讯录,拿到人名手机号,再根据上传的位置获取天气,封装成数据推给短信平台

  put(){
    //设置计时器循环,可以避免速度过快导致的发送不出去
    var index = 0
    console.log(index)
  var a=setInterval(function () {
    console.log(index)
    const element = array1[index];
  pname = element.name
  var city = element.city
  up[0] = pname//人名
  up[1]=city //地区
  phNum = element.phNum
  lat = element.lat
  lng =  element.lng
  var f='https://api.seniverse.com/v3/weather/daily.json?key= key value'
  var g='&language=zh-Hans&unit=c&start=0&days=5'
  var local = lat+":"+lng//发送人所在位置
  var url = f+local+g
  wx.request({
    url: url,
    success:res=>{
      var resdata = res.data.results[0]//获取结果写入数组
      var daliy = resdata.daily[0]
      up[2]=daliy.text_day+"-"+daliy.text_night//天气变化
      up[3]=daliy.high+"-"+daliy.low//气温变化
      up[4]=daliy.wind_speed//风速变化
      console.log(up)
      wx.cloud.callFunction({
        name:'nodejs name',
        data:{
          phNum:"+86"+phNum,//向云端发送数据
          text:up
        },
        success:res=>{
          console.log("发送成功")
        },
        fail:console.error()
      })

    }
  })
  console.log(up)
  index++
  
  if(index>=array1.length)
  { 
      clearInterval(a) 
  }
  //循环执行代码
}, 4000)//此处设置访问时间间隔避免读取速度过快
  },

5.短信推送云函数,这个地方反复好几次,最后发现小程序端传的数组要在云函数端再封一下才可以


const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
  var pn=[] //这里踩了坑,本来以为数组可以直接传进API,结果还要在云函数里再封一下
  var tx=[]
  pn[0] = event.phNum
  tx = event.text
  const tencentcloud = require("tencentcloud-sdk-nodejs")
  const smsClient = tencentcloud.sms.v20210111.Client
  const client = new smsClient({
  credential: {
    secretId:'your id,
    secretKey:'your key',
  },
  region: "ap-guangzhou",
  profile: {
    signMethod: "HmacSHA256",
    httpProfile: {
      reqTimeout: 30,
      endpoint: "sms.tencentcloudapi.com"
    },
  },
  })
  const params = {
  SmsSdkAppId:" your appid",
  SignName:" your signname",
  ExtendCode: "",
  SenderId: "",
  SessionContext: "",
  PhoneNumberSet: pn,
  TemplateId: " your id",
  TemplateParamSet: tx,
  }
  client.SendSms(params, function (err, response) {
  if (err) {
    console.log(err)
    return
  }
  console.log(response)
  })
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值