爆火微信公众号自定义早安推送,爱她就给她推送

news2024/10/6 16:26:44

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

    • 先上截图
      • 电脑端看的效果
      • 手机端看的效果
    • 一、申请微信公众号测试号
    • 二、让他/她扫码关注测试公众号
    • 三、新增模板消息
    • 四、天气API
    • 五、使用 leancloud 部署云函数
    • 六、源代码

先上截图

在这里插入图片描述

电脑端看的效果

在这里插入图片描述

手机端看的效果

在这里插入图片描述

一、申请微信公众号测试号

https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
打开链接,微信扫码登录即可
测试账号申请平台

二、让他/她扫码关注测试公众号

在这里插入图片描述

三、新增模板消息

点击 【新增测试模板】
在这里插入图片描述

根据自己所需,输入想要展示的标题、内容即可,点击 【提交】 之后,会生成 【模板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为:https://devapi.qweather.com/v7/weather/3d?location=这里填城市代码&key=刚刚得到的key

五、使用 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)
        })
    })
  }
})


大家如果有问题,欢迎评论区留言

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kettle(7):插入/更新组件

1 组件介绍 插入/更新组件能够将Kettle抽取的数据&#xff0c;与某个表的数据进行对比&#xff0c;如果数据存在就更新&#xff0c;不存在就插入。 2 需求 修改 t_user中的张三这一行数据&#xff0c;修改age为80 同时&#xff0c;我们想要使用Kettle将 t_user1 中的张三这一…

【编程入门】N种编程语言做个记事本

背景 前面已输出多个系列&#xff1a; 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记&#xff0c;将更为简化&#xff0c;去掉了网络调用&#xff0…

量化选股——基于多因子模型的量化策略(第1部分—因子测算策略构建)

文章目录1.多因子模型概述2.因子挖掘3.多因子策略4.多因子策略构建基于多因子的策略通用流程Fama-French三因子因子效果测算方法因子测算结论&量化策略构建东西有点多&#xff0c;拆开成多个文章&#xff0c;边写边整合~&#xff0c;应该会分成2部分&#xff1a; 第1部分—…

【每日一道智力题】之坤坤猜生日(面试高频)

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;每日一题 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最…

文本特征工程——下篇

文本特征下篇 针对梯度提升树模型对文本特征进行特征工程&#xff0c;我们需要充分挖掘LabelLabelLabel编码丢失信息&#xff0c;例如上面的名字特征。内部存在非常强的规律&#xff0c;Mr等信息。这些信息反映了性别相关的信息。如果直接进行Label编码就会丢失此类信息&#…

高通平台开发系列讲解(GPS篇)NMEA数据包解析

文章目录 一、通用NMEA语句类型二、 NMEA语句格式2.1、GSV语句2.2、RMC语句2.3、GSA语句2.4、VTG语句2.5、DTM语句2.6、GNS语句2.7、GGA语句2.8、GLL语句2.9、GST语句2.10、ZDA语句沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 NMEA-0183是美国国家海洋电子协会为海…

【读论文】Going deeper in spiking neural networks Vgg and residual architecture

frontiers in Neuroscience 2019 摘要 本文提出一种新的方法来构建深度SNN&#xff0c;并在复杂视觉识别问题上证明其有效性&#xff08;如CIFAR10和ImageNet&#xff09;&#xff1b;该方法应用于VGG和残差网络结构&#xff0c;并获得最优精度&#xff1b;最后给出稀疏事件驱…

力扣刷题| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

文章标题LeetCode 20. 有效的括号题目链接&#x1f517;思路代码实现LeetCode 1047. 删除字符串中的所有相邻重复项题目链接&#x1f517;思路代码实现LeetCode 150. 逆波兰表达式求值题目链接&#x1f517;思路代码实现LeetCode 20. 有效的括号 题目链接&#x1f517; LeetC…

运动基元(一):Dubin‘s曲线【part2】

三、六种Dubin’s轨迹的实现——开始摆盘啦 3.1 LSL LSL的第一段圆弧的曲率 k 1 = k m a x > 0 → s i g n ( k 1 ) = 1 k_1=k_{max}>0\rightarrow

118、【回溯算法】leetcode ——40. 组合总和 II:回溯法+剪枝优化(C++版本)

题目描述 原题链接&#xff1a;40. 组合总和 II 解题思路 本题的特点是&#xff0c;一个允许结果中出现相同数字&#xff0c;但每个元素仅能被选取一次。结果与结果之间不允许有重复&#xff0c;需要去重。 与 77. 组合&#xff08;回溯法剪枝优化&#xff09; 的相同之处在于…

【JavaSE专栏9】Java 注释知多少

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

斐波那契数列的--------5种算法(又称“兔子数列”)

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个数列&#xff1a;…

决策树-剪枝处理

前言&#xff1a;理解《机器学习》P79-83中的决策树剪枝示例。 决策树生成 原始数据集如下所示&#xff0c;前10行为训练集&#xff0c;后7行为验证集&#xff0c;由此数据集可生成如下所示的决策树。 下面解释未进行剪枝操作的决策树为何如上图所示。 不对解释每个结点和分支…

WPF-3D图形

WPF-3D图形 WPF的3D功能可以在不编写任何c#代码的情况下进行绘制&#xff0c;只需要使用xaml即可完成3D图形的渲染。本文主要讲述了WPF-3D中的关键概念&#xff0c; 以及常用到的命中测试、2d控件如何在3D对象中进行渲染&#xff0c;除此之外&#xff0c;还演示了如何导入外部…

InstanceNorm LayerNorm

InstanceNorm && LayerNorm author: SUFEHeisenberg date: 2023/01/26 先说结论: 将Transformer类比于RNN&#xff1a;一个token就是一层layer&#xff0c;对一整句不如token有意义原生Bert代码或huggingface中用的都是InstanceNorm instead of LayerNorm&#xff…

【AAAI2023】Head-Free Lightweight Semantic Segmentation with Linear Transformer

论文&#xff1a;【AAAI2023】Head-Free Lightweight Semantic Segmentation with Linear Transformer 代码&#xff1a;https://github.com/dongbo811/AFFormer 这是来自阿里巴巴的工作&#xff0c;作者构建了一个轻量级的Transformer网络用于语义分割&#xff0c;主要有两点…

发现下属的学历造假,但是他的工作能力又很强,该开除他吗?

在职场上混&#xff0c;学历是敲门砖还是定音锤呢&#xff1f;一位网友问&#xff1a;发现下属的学历造假&#xff0c;但是他的工作能力又很强&#xff0c;该开除他吗?有人觉得一定要开除&#xff0c;这就是钻空子&#xff0c;受影响最大的人不是他&#xff0c;而是那些真才实…

上采样与下采样

数据分析中的上采样和下采样 背景&#xff1a; 在分类问题中&#xff0c;由于各种原因&#xff0c;我们所获取到的数据集很容易出现正负样本的不平衡&#xff0c;或者某些数据特别多&#xff0c;有些数据则特别少&#xff0c;在这样的数据集中&#xff0c;进行训练&#xff0c…

OpenCV直方图Java 演示程序

直方图Java 演示程序以下文件编码为utf-8 为佳。代码文件名&#xff1a;OpenCvMain.javapackage org.opencv;import java.net.URL;import java.util.LinkedList;import java.util.List;import org.opencv.core.Core;import org.opencv.core.CvType;import org.opencv.core.Mat;…

Linux常用命令——setpci命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) setpci 查询和配置PCI设备的使用工具 补充说明 setpci命令是一个查询和配置PCI设备的使用工具。 语法 setpci(选项)(参数)选项 -v&#xff1a;显示指令执行的细节信息&#xff1b; -f&#xff1a;当没有任何…