为女朋友打造专属早安推送

    • 先上截图
      • 电脑端看的作用
      • 手机端看的作用
    • 一、请求微信大众号测验号
    • 二、让他/她扫码重视测验大众号
    • 三、新增模板音讯
    • 四、气候API
    • 五、使用 leancloud 布置云函数
    • 六、源代码

先上截图

爆火微信公众号自定义早安推送

电脑端看的作用

爆火微信公众号自定义早安推送

手机端看的作用

爆火微信公众号自定义早安推送

一、请求微信大众号测验号

mp.weixin.qq.com/debug/cgi-b…
翻开链接,微信扫码登录即可

爆火微信公众号自定义早安推送

二、让他/她扫码重视测验大众号

爆火微信公众号自定义早安推送

三、新增模板音讯

点击 【新增测验模板】

爆火微信公众号自定义早安推送

根据自己所需,输入想要展现的标题、内容即可,点击 【提交】 之后,会生成 【模板ID】 ,后边代码里会用到。

比方,下面是我的三个模板。这一步咱们能够自由发挥,这儿只弄了一个气候的api,其他的api网上都有。至于相识、相恋的天数等计时可自行设置核算即可。

爆火微信公众号自定义早安推送

比方开篇的作用截图的模板如下:咱们按需自取

今日是:{{date.DATA}}
{{startText.DATA}} 
当时城市:{{city.DATA}} {{textDay.DATA}} 
最低气温:{{tempMin.DATA}} 
最高气温:{{tempMax.DATA}} 
白日风力:{{windScaleDay.DATA}} 
夜间风力:{{windScaleNight.DATA}} 
今日是咱们相识的第{{know_day.DATA}}天 
今日是咱们相恋的第{{love_day.DATA}}天 
{{note_en.DATA}} 
{{note_ch.DATA}}

四、气候API

想要取得气候信息,需求调用气候的接口

我使用的是 和风气候

  1. 注册登录
  2. 使用管理->创立使用->得到key
    爆火微信公众号自定义早安推送
  3. 城市代码查询 和风气候常用地区列表,能够按住Ctrl+F查找,比方北京-向阳代码是:101010300
    爆火微信公众号自定义早安推送
  4. 开发版的气候api为:devapi.qweather.com/v7/weather/…

五、使用 leancloud 布置云函数

  1. 进入leancloud官网注册登录
  2. 控制台->创立使用
  3. 进入该使用->云函数->布置布置过程
    爆火微信公众号自定义早安推送

    布置完结之后,在云函数处可看到:
    爆火微信公众号自定义早安推送

    也可装备定时任务
    爆火微信公众号自定义早安推送

    至此,功德圆满,快行动起来,给她你的关心吧

六、源代码

爆火微信公众号自定义早安推送

中心文件:cloud.js,按需自取,把 ****** 对应的内容,替换成自己的装备即可

const AV = require('leanengine')
const fs = require('fs')
const path = require('path')
const axios = require('axios')
const config = {
  token: '********', //对应测验号接口装备信息里填的 token, 随意填什么
  appid: '********', //对应测验号信息里的 appID
  secret: '********', //对应测验号信息里的 appsecret
  grant_type: 'client_credential', //默许
  tousers:['********','********']// 测验大众号处显现的要接收人的微信号
};
// 
/**
 * Loads all cloud functions under the `functions` directory.
 */
fs.readdirSync(path.join(__dirname, 'functions')).forEach(file => {
  require(path.join(__dirname, 'functions', file))
})
/**
 * A simple cloud function.
 */
AV.Cloud.define('******', function () { // **** 代表云函数名
  (function getAccessToken() {
    const appid = config.appid;
    const secret = config.secret;
    const grant_type = config.grant_type;
    const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=${grant_type}&appid=${appid}&secret=${secret}`;
    axios.get(url).then(res => {
        if (res.status === 200) {
            getWeather(res.data.access_token)
        } else {
            throw '获取access_token失利,请检查appid和secret'
        }
    }).catch(err => {
        console.log(err)
    })
})()
// 获取当气候候情况
function getWeather(access_token) {
    // 刚刚和风气候的api 
    axios.get('https://devapi.qweather.com/v7/weather/3d?location=101131101&key=*************').then((res, res2) => {
        sendTemplateMsg(access_token, res.data.daily[0]); //获取access_token成功后调用发送模板音讯的方法
    })
}
// 核算是周几
function getTodayofSeven() {
    var now = new Date();
    var day = now.getDay();
    var text = "";
    console.log('模板音讯推送成功 day = ' + day);
    switch (day) {
      case 1:
        text = "今日比昨日更爱你了哟,新的一周开始了,加油,宝贝儿,想你";
        break;
      case 2:
        text = "今日比昨日更爱你了哟,搬砖高兴哦,宝贝儿,想你";
        break;
      case 3:
        text = "今日比昨日更爱你了哟,一周已过半,继续加油,宝贝儿,想你";
        break;
      case 4:
        text = "今日比昨日更爱你了哟,周四周四,V我50,宝贝儿,想你";
        break;
      case 5:
        text = "今日比昨日更爱你了哟,马上周末,能够见到宝贝儿了,想你";
        break;
      case 6:
        text = "今日比昨日更爱你了哟,周末开始啦,好好歇息,放松一下疲惫的身体,宝贝儿,想你";
        break;
      case 0:
        text = "今日比昨日更爱你了哟,抓紧最终一天歇息时间,多陪陪他,宝贝儿,想你";
        break;
    }
    return text;
}
/**
 * 比方:5月21号
 * @param {*} month 阳历月份,5
 * @param {*} day   阳历几号,21
 * @returns 核算还有多少天过生日
 */
function getDaysToBirthday(month, day){
  var now = new Date();
  var thisYear = now.getFullYear();
  // 本年的生日
  var birthday = new Date(thisYear, month - 1, day);
  if(birthday < now) {
    birthday.setFullYear(now.getFullYear()+1);
  }
  var timeDec = birthday - now;
  var days = timeDec / (24 * 60 * 60 * 1000);
  return Math.ceil(days);
}
function sendTemplateMsg(access_token, res) {
    var today = new Date().toLocaleDateString();
    var endTime4Know = parseInt(new Date().getTime() / 1000) - new Date('2022-8-10 00:00:00').getTime() / 1000;
    var endTime4Love = parseInt(new Date().getTime() / 1000) - new Date('2022-11-6 00:00:00').getTime() / 1000;
    var knowDays = parseInt(endTime4Know / 60 / 60 / 24);
    var loveDays = parseInt(endTime4Love / 60 / 60 / 24); 
    var birthDays1 = getDaysToBirthday(2, 27);
    var birthDays2 = getDaysToBirthday(6, 15);
    var firstDayOfYear = getDaysToBirthday(1, 1);
    var newYear = getDaysToBirthday(1, 21);
    var startText = getTodayofSeven();
    const url = `https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${access_token}`; //发送模板音讯的接口
    const requestData = { //发送模板音讯的数据
        template_id: '**********************',//音讯的模板id
        url: 'http://weixin.qq.com/download',
        data: {
            name: {
                value: '小猪',
                color: "#173177"
            },
            link: {
                value: 'https://blog.csdn.net/u011489043?type=blog',
                color: '#1d1d1d'
            },
            city: {
                value: '北京-向阳区',
                color: '#1d1d1d'
            },
            startText: {
                value: startText,
                color: '#FF0000'
            },
            textDay: {
                value: res.textDay,
                color: '#228B22'
            },
            tempMin: { //最低温
                value: res.tempMin + '℃',
                color: '#1d1dff'
            },
            tempMax: { //最高温
                value: res.tempMax + '℃',
                color: '#ff1d1d'
            },
            windScaleDay: { // 白日风力等级
              value: res.windScaleDay + '级',
              color: '#8B4513'
            },
            windScaleNight: { // 夜间风力等级
              value: res.windScaleNight + '级',
              color: '#8B4513'
            },
            date: { // 
              value: today,
              color: '#000000'
            },
            know_day: { //
              value: knowDays,
              color: '#FF69B4'
            },
            love_day: { //
              value: loveDays,
              color: '#FF69B4'
            },
            birthday1: { //
              value: birthDays1,
              color: '#FF00FF'
            },
            birthday2: { //
              value: birthDays2,
              color: '#000000'
            },
            firstDayOfYear: {
              value: firstDayOfYear,
              color: '#8B0000'
            },
            newYear: {
              value: newYear,
              color: '#8B0000'
            },
        }
    };
    config.tousers.forEach(item => {
        requestData.touser = item
        axios.post(url, requestData).then(res => {
            if (res.status === 200) {
                console.log('模板音讯推送成功');
            } else {
                throw '模板音讯推送失利'
            }
        }).catch(err => {
            console.log(err)
        })
    })
  }
})

咱们如果有问题,欢迎谈论区留言。欢迎各位重视鄙人的微信大众号【张氏文画】,不光有新鲜的 LeetCode 题解(多种思路,包教包会,开辟思想),还有经典的文章及短视频和咱们共享

——致所有正在努力奋斗的程序猿们!加油!!
有码走遍天下 无码寸步难行
1024 – 愿望,永不止步!
爱编程 不爱Bug
爱加班 不爱黑眼圈
固执 但不偏执
疯狂 但不疯癫
生活里的菜鸟
工作中的大神
身怀宝藏,一心神往星辰大海
寻求极致,目标始于高山之巅
一群怀揣好奇,愿望改变世界的孩子
一群追日逐浪,正在改变世界的极客
你们用最美的语言,诠释着科技的力气
你们用极速的立异,引领着时代的变迁

——乐于共享,共同进步,欢迎补充
——Treat Warnings As Errors
——Any comments greatly appreciated
——Talking is cheap, show me the code
——GitHub:github.com/selfconzrr\