微信每天自动给女[男]朋友发早安和土味情话

微信通知,每天给女朋友发早安、情话、诗句、天气信息等~

前言

之前逛GitHub的时候发现了一个自动签到的小工具,b站、掘金等都可以,我看了下源码发现也是很简洁,也尝试用了一下,配置也都很简单,主要是他有一个自动打卡、抽奖的信息通知到微信的功能,不错过运气爆棚打卡抽奖时的中奖~😛

虽然以前做过钉钉的消息通知,但是钉钉我也就上班用一下,日常很少使用,要说通讯工具在国内还是要微信,笑😑,所以,第一接收信息通知的工具最好能是微信,懂得都懂

后来我根据这个功能的逻辑一想,借用这个消息通知的能力,不就可以自定义任何内容推送到微信了吗,嘿嘿嘿,发现事情变的有趣了起来了~

想起之前看过一篇文章是通过邮箱每天给女朋友发土味情话的操作,邮箱哪有微信效果好呀,可不是😎

话不多说直接开整,自己做个每天给女朋友发早安和土味情话的工具,你也可以每天都是暖男~

思路

接下来我们主要做两件事:

  • 第一件事:消息通知到微信能力的工具

  • 第二件事:消息内容的获取和数据处理

消息通知能力,我调研了下,其他方案或多或少都有限制和不足,采用以上工具中的方案算是当前比较合适的

消息内容获取,一是通过开放API快速使用,二是通过自己编写爬虫脚本获取,出于技术和时间成本考虑,目前优先考虑方案一,方案二可以作为拓展能力

消息通知工具分析

wechaty

文档:wechaty

能做到微信几乎所有的功能和能力,当你有个小号微信时,你完全可以把它交由 wechaty控制,再通过代码设计各种能力,可玩性完全由你的想法决定

自动回复、加群、定时推送、回复、AI接口能力结合等等很多。。。

硬性条件是需要 wechaty官方提供的 token来获取权限,目前方式有两种

  • 方式一:联系相关人员购买
  • 方式二:参与开发者计划,贡献项目并被采纳,免费提供

相关文档:https://github.com/juzibot/Welcome/wiki/Everything-about-Wechaty

如果你有加过一些大佬的微信群,应该接触过由该能力实现的自动拉群、自动回复、自动每日播报的机器人

钉钉、飞书、企业微信

这三个工具定位都是企业级应用,企业级应用的好处就是可定制性很高,官方有开放提供很多API接口和权限,机器人、自定义应用、小程序等,可玩性还是蛮大的。

存在问题:

中国社交APP真实情况,排除企业组织使用,个人而言微信第一优先,不管是消息通知还是其他能力,但矛盾的地方是,个人微信限制很多,几乎不提供这种开发API的能力。当然,如果你可以接受钉钉或飞书或企业微信,则不存在这种问题。

新的思路:

企业微信作为微信自己的产品,有着一些天然优势:微信支持在微信内接受企业微信的消息

围绕这个能力我们也可以实现相应的功能需求,首先,我们先在微信内关注我们创建的企业微信,然后允许微信内接受企业微信内的消息。

个人创建企业微信很简单,只需提供手机号即可

钉钉、飞书则使用机器人通知

小结

有条件优先使用 wechaty实现,没条件可以退而求其次采取 企业微信 + 微信 的方式。

准备

1.注册企业

用电脑打开企业微信官网,注册一个企业。有手机号就可以注册,不用营业执照!不用营业执照!不用营业执照!

2.创建应用

注册成功后,点「管理企业」进入管理界面,选择「应用管理」 → 「自建」 → 「创建应用」

应用名称随意填,可见范围可以选择公司名。

创建完成后进入应用详情页,可以得到应用ID( agentid ),应用Secret( secret )。

3.获取企业ID

进入「我的企业」页面,拉到最下边,可以得到企业ID。

4.推送消息到微信

进入「我的企业」 → 「微信插件」,拉到下边扫描二维码,关注以后即可收到推送的消息。

注:如果出现接口请求正常,企业微信接受消息正常,个人微信无法收到消息的情况:

1.进入「我的企业」 → 「微信插件」,拉到最下方,勾选 “允许成员在微信插件中接收和回复聊天消息”

2.在企业微信客户端 「我」 → 「设置」 → 「新消息通知」中关闭 “仅在企业微信中接受消息” 限制条件

5.添加环境变量

在 Github 的 Secrets 中在添加三个变量:

  1. Name 是WX_APP_ID,Value 是第二步的 AgentId
  2. Name 是WX_APP_SECRET,Value 是第二步 Secret
  3. Name 是WX_COMPANY_ID,Value 是第三步的 企业ID
WX_COMPANY_ID= 企业ID
WX_APP_ID= 应用ID
WX_APP_SECRET= 应用 Secret
TIAN_API_KEY= 天行数据 key

6.GitHub Action每天自动执行

核心代码如下,详细代码见下面仓库链接

schedule:
  # `分 时 天 月 周` 时按照标准时间 北京时间=标准时间+8 18表示北京时间早上2点
  # 早上 7:30
  - cron: '30 23 * * *'

数据赋能API

这里我们可以自己选择第三方开放API进行定制,或者自己定制

注:免费开源接口需要考虑服务稳定性!

目前接口数据能力主要由天行数据提供,随便注册一个账户会员即可,无门槛

天行数据:https://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))

效果

天气信息

wx_love-1

其他信息

今日笑话:
名作家到我市举行签名活动。一大早我带着儿子来书店买书,请作家签名时,儿子在一旁不解地问:“我们买的书怎么写他的名字?”

一言:
冬天之所以那么冷是为了告诉大家身边人的温暖有多重要。

今日英语(Dec 18 2021):
While there is life, there is hope.
生命不息,希望不止。

代码

本项目使用 TypeScript开发,包管理工具为 pnpm

完整代码见仓库,已开源 https://github.com/JS-banana/notify-server

欢迎一起交流

开发

复制 .env.example文件重命名为 .env,并按照要求填写对应值,可以直接测试

如果要通过 GitHub Action使用,需要在 Secrets 中一一添加变量

结语

怎么说呢,每天逛GitHub你都能发现很多有趣的项目和小工具,每天抽点时间看看不仅可以了解前言技术,还能第一时间接触到很多优秀的内容和项目,并参考学习,以此积累技术也会不断精进。

这个项目总的来说还是很简单的,比日常工作写业务要简单多了,但是它却是很有趣的,这未尝不是爱上编码的一种方式呢。无聊繁杂的业务工作很容易让人产生厌烦和颓态,但技术本身应是带给我们乐趣和快乐的,不是吗

今天你是暖男了吗😉

emoji

热门文章

暂无图片
编程学习 ·

那些年让我们目瞪口呆的bug

程序员一生与bug奋战&#xff0c;可谓是杀敌无数&#xff0c;见怪不怪了&#xff01;在某知识社交平台中&#xff0c;一个“有哪些让程序员目瞪口呆的bug”的话题引来了6700多万的阅读&#xff0c;可见程序员们对一个话题的敏感度有多高。 1、麻省理工“只能发500英里的邮件” …
暂无图片
编程学习 ·

redis的下载与安装

下载redis wget http://download.redis.io/releases/redis-5.0.0.tar.gz解压redis tar -zxvf redis-5.0.0.tar.gz编译 make安装 make install快链方便进入redis ln -s redis-5.0.0 redis
暂无图片
编程学习 ·

《大话数据结构》第三章学习笔记--线性表(一)

线性表的定义 线性表&#xff1a;零个或多个数据元素的有限序列。 线性表元素的个数n定义为线性表的长度。n为0时&#xff0c;为空表。 在比较复杂的线性表中&#xff0c;一个数据元素可以由若干个数据项组成。 线性表的存储结构 顺序存储结构 可以用C语言中的一维数组来…
暂无图片
编程学习 ·

对象的扩展

文章目录对象的扩展属性的简洁表示法属性名表达式方法的name属性属性的可枚举性和遍历可枚举性属性的遍历super关键字对象的扩展运算符解构赋值扩展运算符AggregateError错误对象对象的扩展 属性的简洁表示法 const foo bar; const baz {foo}; baz // {foo: "bar"…
暂无图片
编程学习 ·

让程序员最头疼的5种编程语言

世界上的编程语言&#xff0c;按照其应用领域&#xff0c;可以粗略地分成三类。 有的语言是多面手&#xff0c;在很多不同的领域都能派上用场。大家学过的编程语言很多都属于这一类&#xff0c;比如说 C&#xff0c;Java&#xff0c; Python。 有的语言专注于某一特定的领域&…
暂无图片
编程学习 ·

写论文注意事项

参考链接 给研究生修改了一篇论文后&#xff0c;该985博导几近崩溃…… 重点分析 摘要与结论几乎重合 这一条是我见过研究生论文中最常出现的事情&#xff0c;很多情况下&#xff0c;他们论文中摘要部分与结论部分重复率超过70%。对于摘要而言&#xff0c;首先要用一小句话引…
暂无图片
编程学习 ·

安卓 串口开发

上图&#xff1a; 上码&#xff1a; 在APP grable添加 // 串口 需要配合在项目build.gradle中的repositories添加 maven {url "https://jitpack.io" }implementation com.github.licheedev.Android-SerialPort-API:serialport:1.0.1implementation com.jakewhart…
暂无图片
编程学习 ·

2021-2027年中国铪市场调研与发展趋势分析报告

2021-2027年中国铪市场调研与发展趋势分析报告 本报告研究中国市场铪的生产、消费及进出口情况&#xff0c;重点关注在中国市场扮演重要角色的全球及本土铪生产商&#xff0c;呈现这些厂商在中国市场的铪销量、收入、价格、毛利率、市场份额等关键指标。此外&#xff0c;针对…
暂无图片
编程学习 ·

Aggressive cows题目翻译

描述&#xff1a; Farmer John has built a new long barn, with N (2 < N < 100,000) stalls.&#xff08;John农民已经新建了一个长畜棚带有N&#xff08;2<N<100000&#xff09;个牛棚&#xff09; The stalls are located along a straight line at positions…
暂无图片
编程学习 ·

剖析组建PMO的6个大坑︱PMO深度实践

随着事业环境因素的不断纷繁演进&#xff0c;项目时代正在悄悄来临。设立项目经理转岗、要求PMP等项目管理证书已是基操&#xff0c;越来越多的组织开始组建PMO团队&#xff0c;大有曾经公司纷纷建造中台的气质&#xff08;当然两者的本质并不相同&#xff0c;只是说明这个趋势…
暂无图片
编程学习 ·

Flowable入门系列文章118 - 进程实例 07

1、获取流程实例的变量 GET运行时/进程实例/ {processInstanceId} /变量/ {变量名} 表1.获取流程实例的变量 - URL参数 参数需要值描述processInstanceId是串将流程实例的id添加到变量中。变量名是串要获取的变量的名称。 表2.获取流程实例的变量 - 响应代码 响应码描述200指…
暂无图片
编程学习 ·

C语言二分查找详解

二分查找是一种知名度很高的查找算法&#xff0c;在对有序数列进行查找时效率远高于传统的顺序查找。 下面这张动图对比了二者的效率差距。 二分查找的基本思想就是通过把目标数和当前数列的中间数进行比较&#xff0c;从而确定目标数是在中间数的左边还是右边&#xff0c;将查…
暂无图片
编程学习 ·

项目经理,你有什么优势吗?

大侠被一个问题问住了&#xff1a;你和别人比&#xff0c;你的优势是什么呢? 大侠听到这个问题后&#xff0c;脱口而出道&#xff1a;“项目管理能力和经验啊。” 听者抬头看了一下大侠&#xff0c;显然听者对大侠的这个回答不是很满意&#xff0c;但也没有继续追问。 大侠回家…
暂无图片
编程学习 ·

nginx的负载均衡和故障转移

#注&#xff1a;proxy_temp_path和proxy_cache_path指定的路径必须在同一分区 proxy_temp_path /data0/proxy_temp_dir; #设置Web缓存区名称为cache_one&#xff0c;内存缓存空间大小为200MB&#xff0c;1天没有被访问的内容自动清除&#xff0c;硬盘缓存空间大小为30GB。 pro…
暂无图片
编程学习 ·

业务逻辑漏洞

身份认证安全 绕过身份认证的几种方法 暴力破解 测试方法∶在没有验证码限制或者一次验证码可以多次使用的地方&#xff0c;可以分为以下几种情况︰ (1)爆破用户名。当输入的用户名不存在时&#xff0c;会显示请输入正确用户名&#xff0c;或者用户名不存在 (2)已知用户名。…