女朋友专属!微信公众号消息推送

您所在的位置:网站首页 女朋友您的专属伴侣 女朋友专属!微信公众号消息推送

女朋友专属!微信公众号消息推送

2024-07-06 20:41| 来源: 网络整理| 查看: 265

➡️➡️➡️本教程参考自:B站 UP主 LuckyRay123 提供的 给女朋友做一个定时推送天气预报的公众号,略有修改!

【微信公众号消息推送】系列教程(项目链接:https://github.com/leoatliang/wechat-push)

女朋友专属!微信公众号消息推送 💤💤💤

Github Actions 自动化部署,定时推送消息

效果图(可自定义),Windows 端显示如下:

1. 准备工作

[Tool 1]: 代码编写(Visual Studio Code) + 运行环境(Node.js)

上述软件/环境的安装配置请自行查阅相关资料,完成后,还需在项目根目录下安装依赖包(axios 和 moment):

npm install axios moment

会自动生成 node_modules 文件夹 和 package-lock.json 、package.json 文件,即依赖包的版本或其他信息。

[Tool 2]: 微信公众号(测试账号)

有资质的注册服务号,没有的登录测试号(微信公众号注册(订阅号/服务号)、微信测试号):

2. 代码编写

项目结构如下:

在这里插入图片描述

说明:

config:配置文件,本人信息 + 被推送用户信息 + 消息模板getToken 和 sendMessage:获取 token 和推送消息utils:工具类,例如获取日期、天气预报、恋爱天数、土味情话等node_moduls、package-lock.json 和 package.json:项目环境,安装完依赖包会自动生成index.js:主程序 2.1 配置 config 参数

[Step 1]: 获取参数 appID、appsecret、被推送用户微信号 和 模板ID

1、扫码登录测试号后,会看到如下测试号信息:

2、往下滑,可以看到如下测试号二维码,让被推送用户手动关注,会自动生成微信号(测试的时候一般自己关注):

3、再往下滑,可以看到模板消息接口,点击 新增测试模板,然后会得到 模板ID:

今日:{{today.DATA}} 地区:{{city.DATA}} 天气:{{wea.DATA}} 气温:{{low.DATA}} ~ {{high.DATA}} 今天是我们在一起的第 {{days.DATA}} 天啦! 土味情话:{{txt.DATA}}

[Step 2]: 在 config 目录下新建 index.js 文件,依次填入下列4个参数

const params = { appid: 'xxxxxxxxxxxxxxxxxx', // 登录测试号就会出现 secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',// 同上 touser: 'xx-xxxxxxxxxxxxxxxxxx-xxxxxx', // 被推送用户,微信扫码生成 template_id: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxx' // 新建 模板消息,生成 }; 2.2 获取 token

获取 Access token:access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。

在 getToken 目录下新建 index.js 和 token.json 文件,js 文件代码如下:

const getToken = (params) => { return new Promise((resolve, reject) => { const tokenFile = path.join(__dirname, 'token.json'); fs.readFile(tokenFile, 'utf-8', function (err, data) { if (err) { reject(err); } else { if (data) { const token = JSON.parse(data); if (token.expires_in > moment().unix()) { resolve(token.access_token); return; } } } const appid = params.appid; const secret = params.secret; axios.get(`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`) .then(res => { if (res.data && res.data.errcode) { reject(data); return; } resolve(res.data.access_token); const t = res.data; t.expires_in = t.expires_in + moment().unix() - 1200; fs.writeFile(tokenFile, JSON.stringify(t), function (err) { if (err) { reject(err); } }) }) }) }) };

后续项目执行后,获取到的 token 会被保存至 token.json 中,类似于:

{ "access_token": "xxxxxx", "expires_in": 1708519938 } 2.3 模板消息

在获取 模板ID 前,已经创建好了模板消息,那么该如何传递或者这些信息从哪来的呢?具体需求如下:

今日:2024年2月21日 星期三 地区:马鞍山 天气:雪 气温:0 ~ 1 今天是我们在一起的第 374 天啦! 土味情话:这是车票,这是发票,你是我最最最可爱的女... 2.3.1 日期

在 utils 目录下新建 index.js 文件,获取日期的代码编写如下:

const formatWeek = (week) => { switch (week) { case 1: return '星期一'; break; case 2: return '星期二'; break; case 3: return '星期三'; break; case 4: return '星期四'; break; case 5: return '星期五'; break; case 6: return '星期六'; break; case 0: return '星期日'; break; default: break; } } const getDate = () => { const year = new Date().getFullYear(); const month = new Date().getMonth() + 1; const day = new Date().getDate(); const week = new Date().getDay(); return `${year}年${month}月${day}日 ${formatWeek(week)}`; } 2.3.2 天气预报

[Step 1]: 点击 天气 API 右上角的 用户中心,注册并登录账号,进入控制台,可以看到 appid 和 appsecret

[Step 2]: 进入 免费实况天气接口 查看如何调用 API

在这里插入图片描述

[Step 3]: 点击 城市ID列表 给出城市编码表及素材下载链接,下载并解压打开,用记事本或 VSCode 打开 city_cn.sql

[Step 4]: 使用 Ctrl + F 搜索你想获取的某个城市的天气状况,记录下 CN 后的9位数字,也就是 cityid

[Step 5]: 同样的,在 index.js 文件中,获取天气预报的代码编写如下

const getWeather = () => { return new Promise((resolve, reject) => { const appId = 'xxxxxxxx'; const appSecret = 'xxxxxxxx'; const cityID = '101220501'; // 马鞍山 axios.get(`http://v1.yiketianqi.com/free/day?appid=${appId}&appsecret=${appSecret}&unescape=1&cityid=${cityID}`) .then(res => { const { data } = res; resolve({ wea: data.wea, low: data.tem_night, high: data.tem_day }) }) .catch(err => { reject(err); }) }) }

注意:appId、appSecret 和 cityID 记得要替换!!!

2.3.3 恋爱天数

同样的,在 index.js 文件中,获取恋爱天数的代码编写如下(别傻乎乎的开始日期不改):

const getLoveDays = () => { const startDate = new Date('2023-02-12'); const currentUTCTime = new Date().toISOString(); const beijingTime = new Date(new Date(currentUTCTime).getTime() + (8 * 60 * 60 * 1000)); const oneDayMilliseconds = 24 * 60 * 60 * 1000; const daysDiff = Math.floor((beijingTime - startDate) / oneDayMilliseconds); return daysDiff.toString(); } 2.3.4 土味情话

[Step 1]: 点击 天聚数行 右上角的 立即注册,注册并登录账号,进入控制台,往下滑点击 我的密钥,可以看到 APIKEY

[Step 2]: 进入 土味情话,先去申请接口,然后再去查看如何调用 API

[Step 3]: 同样的,在 index.js 文件中,获取土味情话的代码编写如下

const getLoveWords = () => { return new Promise((resolve, reject) => { const apiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; axios.get(`https://apis.tianapi.com/saylove/index?key=${apiKey}`) .then(res => { const { data: { result } } = res; resolve(result.content) }) .catch(err => { reject(err); }) }) }

注意:apiKey 记得要替换!!!

2.4 发送信息

在 sendMessage 目录下新建 index.js 文件,代码编写如下:

const sendMessage = (params) => { const { access_token, touser, template_id, data = {} } = params; return axios.post(`https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${access_token}`, { touser, template_id, data }) }; module.exports = { sendMessage } 2.5 主程序

在根目录下新建主程序 index.js,代码编写如下:

const start = async () => { let access_token = await getToken(params); let { wea, low, high } = await getWeather(); let loveDays = getLoveDays(); let loveWords = await getLoveWords(); const data = { today: { value: getDate() }, city: { value: '马鞍山' }, wea: { value: wea }, low: { value: low }, high: { value: high }, days: { value: loveDays }, words: { value: loveWords }, } sendMessage({ access_token, ...params, data }) .then(res => { if (res.data && res.data.errcode) { console.log('发送失败', res.data); return; } console.log('发送成功 - 请在微信上查看对应消息') }) .catch(err => { console.log('发送失败', err); }) } start(); 3. 项目执行

在根目录运行如下命令:

node ./index.js

iOS / Windows 端效果图如下:

注意事项:

Visual Studio Code 必须以管理员身份运行,否则执行 node ./index.js 可能会报错;模板信息不可以修改,只能删除重新创建,但要及时修改 config/index.js 中的 template_id;两款 API(天气预报 + 土味情话)返回的内容或者请求地址可能会被官方修改,留意一下!

缺点:

测试号 ID 太长、太丑(没办法,没有营业执照且订阅号不支持该功能);消息颜色不支持自定义(据说从2023年某时候开始,就不再支持修改颜色了);目前只支持本地电脑手动推送,定时推送后续会更新!

微信公众号注册(订阅号/服务号):https://mp.weixin.qq.com/cgi-bin/registermidpage?action=index&lang=zh_CN

微信测试号:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

获取 Access token:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

天气 API:http://tianqiapi.com

免费实况天气接口:http://tianqiapi.com/index/doc?version=day

天聚数行:https://www.tianapi.com

土味情话:https://www.tianapi.com/apiview/80

➡️ ➡️ ➡️ 获取源码,微信公众号【程序员LIANG】后台,回复关键字:微信公众号消息推送



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3