微信通知,每天給女朋友發早安、情話、詩句、天氣信息等~
前言
之前逛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 中在添加三個變量:
- Name 是
WX_APP_ID
,Value 是第二步的AgentId
。 - Name 是
WX_APP_SECRET
,Value 是第二步Secret
。 - 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進行定制,或者自己定制
注:免費開源接口需要考慮服務穩定性!
目前接口數據能力主要由天行數據提供,隨便注冊一個賬戶會員即可,無門檻
- 會員免費接口數量: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))
效果
天氣信息
其他信息
今日笑話:
名作家到我市舉行簽名活動。一大早我帶著兒子來書店買書,請作家簽名時,兒子在一旁不解地問:“我們買的書怎么寫他的名字?”
一言:
冬天之所以那么冷是為了告訴大家身邊人的溫暖有多重要。
今日英語(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你都能發現很多有趣的項目和小工具,每天抽點時間看看不僅可以了解前言技術,還能第一時間接觸到很多優秀的內容和項目,并參考學習,以此積累技術也會不斷精進。
這個項目總的來說還是很簡單的,比日常工作寫業務要簡單多了,但是它卻是很有趣的,這未嘗不是愛上編碼的一種方式呢。無聊繁雜的業務工作很容易讓人產生厭煩和頹態,但技術本身應是帶給我們樂趣和快樂的,不是嗎
今天你是暖男了嗎??