简介:大家好,我是枫哥,🌟一线互联网的IT民工、📝资深面试官、🌹Java跳蚤网课堂创始人。拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。在上海有自己小伙伴组建的副业团队,目前业余时间专注Java技术分享,春招/秋招/社招/跳槽,一对一学习辅助,项目接活开发。
🎉🎉扫码左侧二维码,加入群聊,一起学习,一起进步!
🌟 欢迎关注 🌟 收藏 🌹留言 🌹
🍊🍊:文末送福利
目录
前言
前几天逛GitHub的时候发现了一个可以把消息通知信息推送到微信的小工具,也尝试用了一下,配置都很简单,用起来很方便,就很好奇研究了一下,我看了下源码发现也是很简洁~😛,说实话就是比较好奇怎么做的微信通知🤓
虽然以前做过钉钉的消息通知,但是钉钉我也就上班用一下,日常很少使用,要说通讯工具在国内还是要微信,笑😑,所以,第一接收信息通知的工具最好能是微信,懂得都懂~
后来我根据这个功能的逻辑一想,借用这个消息通知的能力,不就可以自定义任何内容推送到微信了吗,嘿嘿嘿,发现事情变的有趣了起来了~
想起之前看过一篇文章是通过邮箱每天给女朋友发土味情话的操作,邮箱哪有微信效果好呀,可不是😎
话不多说直接开整,自己做个每天给女朋友发早安和土味情话的工具,你也可以每天都是暖男~
思路
接下来我们主要做两件事:
-
第一件事:消息通知到微信能力的工具
-
第二件事:消息内容的获取和数据处理
消息通知能力,我调研了下,其他方案或多或少都有限制和不足,采用以上工具中的方案算是当前比较合适的
消息内容获取,一是通过开放API快速使用,二是通过自己编写爬虫脚本获取,出于技术和时间成本考虑,目前优先考虑方案一,方案二可以作为拓展能力
消息通知工具分析
wechaty
文档:wechatyhttps://link.juejin.cn/?target=https%3A%2F%2Fwechaty.gitbook.io%2Fwechaty%2Fv%2Fzh%2F
如果你有加过一些大佬的微信群,应该接触过由该能力实现的自动拉群、自动回复、自动每日播报的机器人
钉钉、飞书、企业微信
这三个工具定位都是企业级应用,企业级应用的好处就是可定制性很高,官方有开放提供很多API接口和权限,机器人、自定义应用、小程序等,可玩性还是蛮大的。
存在问题:
中国社交APP真实情况,排除企业组织使用,个人而言微信第一优先,不管是消息通知还是其他能力,但矛盾的地方是,个人微信限制很多,几乎不提供这种开发API的能力。当然,如果你可以接受钉钉或飞书或企业微信,则不存在这种问题。
新的思路:
企业微信作为微信自己的产品,有着一些天然优势:微信支持在微信内接受企业微信的消息
围绕这个能力我们也可以实现相应的功能需求,首先,我们先在微信内关注我们创建的企业微信,然后允许微信内接受企业微信内的消息。
个人创建企业微信很简单,只需提供手机号即可
钉钉、飞书则使用机器人通知
小结
有条件优先使用 wechaty实现,没条件可以退而求其次采取 企业微信 + 微信 的方式。
准备
详细步骤和图片示例可见仓库 => 企业微信的注册步骤
1.注册企业
用电脑打开企业微信官网,注册一个企业。有手机号就可以注册,不用营业执照!不用营业执照!不用营业执照!
2.创建应用
注册成功后,点「管理企业」进入管理界面,选择「应用管理」 → 「自建」 → 「创建应用」
应用名称随意填,可见范围可以选择公司名。
创建完成后进入应用详情页,可以得到应用ID( agentid
),应用Secret( secret
)。
3.获取企业ID
进入「我的企业」页面,拉到最下边,可以得到企业ID。
4.推送消息到微信
进入「我的企业」 → 「微信插件」,拉到下边扫描二维码,关注以后即可收到推送的消息。
注:如果出现接口请求正常,企业微信接受消息正常,个人微信无法收到消息的情况:
1.进入「我的企业」 → 「微信插件」,拉到最下方,勾选 “允许成员在微信插件中接收和回复聊天消息”
2.在企业微信客户端 「我」 → 「设置」 → 「新消息通知」中关闭 “仅在企业微信中接受消息” 限制条件
注:如果出现接口请求正常,企业微信接受消息正常,个人微信无法收到消息的情况:
1.进入「我的企业」 → 「微信插件」,拉到最下方,勾选 “允许成员在微信插件中接收和回复聊天消息”
2.在企业微信客户端 「我」 → 「设置」 → 「新消息通知」中关闭 “仅在企业微信中接受消息” 限制条件
WX_COMPANY_ID= 企业ID
WX_APP_ID= 应用ID
WX_APP_SECRET= 应用 Secret
TIAN_API_KEY= 天行数据 key
6.GitHub Action每天自动执行
核心代码如下,详细代码见下面仓库链接ci.yml
schedule:
# `分 时 天 月 周` 时按照标准时间 北京时间=标准时间+8 18表示北京时间早上2点
# 早上 7:30
- cron: '30 23 * * *'
数据赋能API
这里我们可以自己选择第三方开放API进行定制,或者自己定制
注:免费开源接口需要考虑服务稳定性!
目前接口数据能力主要由天行数据提供,随便注册一个账户会员即可,无门槛
天行数据:www.tianapi.com/
- 会员免费接口数量:15个
- 每日赠送次数:100次
注:如果采取该接口,需要在 5.添加环境变量这一步中,再添加Key的变量,作为天行数据接口使用时的必填参数
功能和内容
这里就看个人的想法和思路了,就各种免费接口基本可以提供很多各式各样的信息了,你也可以自己写服务和爬虫脚本等,可玩性真的是很高
目前已添加的功能有:
- 个人定制化信息
- 天气信息
- 每日一言
- 最美宋词
- 雷人笑话
- 土味情话
- 每日英语
- 睡前故事
内容完全由你发挥,之后还可以开发自己的个人资讯和消息推送等,就很棒~
部分代码
class API {
key: string
constructor(key?: string) {
this.key = key || '' // 为了方便,key在 http中统一添加
}
// 最美宋词
async getSongLyrics() {
const res = await getTian<IVerseProps[]>({ url: LoveMsgURL.songLyrics })
return res?.[0]
}
// 每日一句美好英语
async getDayEnglish() {
const res = await getTian<ResEnglishProps[]>({ url: LoveMsgURL.dayEnglish })
return res?.[0]
}
// 获取农历信息
async getLunarDate(date: string) {
const res = await getTian<ResLunarDateProps[]>({ url: LoveMsgURL.lunarDate, params: { date } })
return res?.[0]
}
// 土味情话
async getSaylove() {
const res = await getTian<SayloveProps[]>({ url: LoveMsgURL.saylove })
return res?.[0]
}
}
export default new API()
早安、午安、晚安
const { MESSAGE_TYPE } = process.env
export default function main() {
if (MESSAGE_TYPE === 'goodAfternoon') {
// 午安
goodAfternoon()
} else if (MESSAGE_TYPE === 'goodEvening') {
// 晚安
goodEvening()
} else {
// 早安
goodMorning()
}
}
请求数据-goodMorning
/**
* @name goodMorning
* @description 说早安
*/
// 并行请求,优响相应
const dataSource = await Promise.allSettled([
API.getSaylove(), // 土味情话
API.getCaihongpi(), // 彩虹屁
API.getOneWord(), // 一言
API.getSongLyrics(), // 最美宋词
API.getOneMagazines(), // one杂志
API.getNetEaseCloud(), // 网易云热评
API.getDayEnglish(), // 每日英语
])
// 过滤掉异常数据
const [sayLove, caiHongpi, oneWord, songLyrics, oneMagazines, netEaseCloud, dayEnglish] =
dataSource.map((n) => (n.status === 'fulfilled' ? n.value : null))
效果
其他信息
立如芝兰玉树,笑如朗月入怀,历尽千帆,不坠青云
这是弓箭,这是火箭,你是我的甜蜜饯。
『苏轼《水调歌头》』有悲欢离合,月有阴晴圆缺,此事古难全。
『ONE杂志』爱情无非是年轻人一起喝酒做梦。
『网易云音乐热评』你相信吗 也许在另一个平行时空 有一个跟你长得很像很像的人 正在热烈得爱着那个你爱不到的人——想见你想见你想见你
『一言』你的眼中,明暗交杂,一笑生花。
『每日英语(Jan 9, 2022』In case I don't see you… Good afternoon, good evening, and good night.
代码
本项目使用 TypeScript
开发,包管理工具为 pnpm
完整代码见仓库,已开源 github.com/JS-banana/n…
开发
复制 .env.example
文件重命名为 .env
,并按照要求填写对应值,可以直接测试
如果要通过 GitHub Action使用,需要在 Secrets
中一一添加变量
结语
怎么说呢,每天逛GitHub你都能发现很多有趣的项目和小工具,每天抽点时间看看不仅可以了解前言技术,还能第一时间接触到很多优秀的内容和项目,并参考学习,以此积累技术也会不断精进。
这个项目总的来说还是很简单的,比日常工作写业务要简单多了,但是它却是很有趣的,这未尝不是爱上编码的一种方式呢。无聊繁杂的业务工作很容易让人产生厌烦和颓态,但技术本身应是带给我们乐趣和快乐的,不是吗
今天你是暖男了吗😉
🌹 🌹感谢大家,坚持看完,既然选择了这条路,那就一起加油,一起学习!如果需要学习资源,实战面试资料,项目资源。关注公众号:IT枫斗者,🌟根据关键字领取对应的资料福利🌟!咨询解决问题,公众号私聊枫哥,备注来意。
🍊回复:java全套学习资源
🍊回复:面试资料
🍊回复:枫哥简历
🍊回复:程序员表白神器
(从此告别程序员单身狗!)
🍊回复:程序员兼职网站
🍊回复:枫哥666
( 获取66套项目实战资料,大厂面试视频)