微信通知,每天給女朋友發(fā)早安、情話、詩句、天氣信息等~
前言
之前逛GitHub的時候發(fā)現(xiàn)了一個自動簽到的小工具,b站、掘金等都可以,我看了下源碼發(fā)現(xiàn)也是很簡潔,也嘗試用了一下,配置也都很簡單,主要是他有一個自動打卡、抽獎的信息通知到微信的功能,不錯過運(yùn)氣爆棚打卡抽獎時的中獎~??
雖然以前做過釘釘?shù)南⑼ㄖ?,但是釘釘我也就上班用一下,日常很少使用,要說通訊工具在國內(nèi)還是要微信,笑??,所以,第一接收信息通知的工具最好能是微信,懂得都懂
后來我根據(jù)這個功能的邏輯一想,借用這個消息通知的能力,不就可以自定義任何內(nèi)容推送到微信了嗎,嘿嘿嘿,發(fā)現(xiàn)事情變的有趣了起來了~
想起之前看過一篇文章是通過郵箱每天給女朋友發(fā)土味情話的操作,郵箱哪有微信效果好呀,可不是??
話不多說直接開整,自己做個每天給女朋友發(fā)早安和土味情話的工具,你也可以每天都是暖男~
思路
接下來我們主要做兩件事:
第一件事:消息通知到微信能力的工具
第二件事:消息內(nèi)容的獲取和數(shù)據(jù)處理
消息通知能力,我調(diào)研了下,其他方案或多或少都有限制和不足,采用以上工具中的方案算是當(dāng)前比較合適的
消息內(nèi)容獲取,一是通過開放API快速使用,二是通過自己編寫爬蟲腳本獲取,出于技術(shù)和時間成本考慮,目前優(yōu)先考慮方案一,方案二可以作為拓展能力
消息通知工具分析
wechaty
文檔:wechaty
能做到微信幾乎所有的功能和能力,當(dāng)你有個小號微信時,你完全可以把它交由 wechaty控制,再通過代碼設(shè)計各種能力,可玩性完全由你的想法決定
自動回復(fù)、加群、定時推送、回復(fù)、AI接口能力結(jié)合等等很多。。。
硬性條件是需要 wechaty官方提供的 token來獲取權(quán)限,目前方式有兩種
- 方式一:聯(lián)系相關(guān)人員購買
- 方式二:參與開發(fā)者計劃,貢獻(xiàn)項目并被采納,免費(fèi)提供
相關(guān)文檔:https://github.com/juzibot/Welcome/wiki/Everything-about-Wechaty
如果你有加過一些大佬的微信群,應(yīng)該接觸過由該能力實(shí)現(xiàn)的自動拉群、自動回復(fù)、自動每日播報的機(jī)器人
釘釘、飛書、企業(yè)微信
這三個工具定位都是企業(yè)級應(yīng)用,企業(yè)級應(yīng)用的好處就是可定制性很高,官方有開放提供很多API接口和權(quán)限,機(jī)器人、自定義應(yīng)用、小程序等,可玩性還是蠻大的。
存在問題:
中國社交APP真實(shí)情況,排除企業(yè)組織使用,個人而言微信第一優(yōu)先,不管是消息通知還是其他能力,但矛盾的地方是,個人微信限制很多,幾乎不提供這種開發(fā)API的能力。當(dāng)然,如果你可以接受釘釘或飛書或企業(yè)微信,則不存在這種問題。
新的思路:
企業(yè)微信作為微信自己的產(chǎn)品,有著一些天然優(yōu)勢:微信支持在微信內(nèi)接受企業(yè)微信的消息
圍繞這個能力我們也可以實(shí)現(xiàn)相應(yīng)的功能需求,首先,我們先在微信內(nèi)關(guān)注我們創(chuàng)建的企業(yè)微信,然后允許微信內(nèi)接受企業(yè)微信內(nèi)的消息。
個人創(chuàng)建企業(yè)微信很簡單,只需提供手機(jī)號即可
釘釘、飛書則使用機(jī)器人通知
小結(jié)
有條件優(yōu)先使用 wechaty實(shí)現(xiàn),沒條件可以退而求其次采取 企業(yè)微信 + 微信 的方式。
準(zhǔn)備
1.注冊企業(yè)
用電腦打開企業(yè)微信官網(wǎng),注冊一個企業(yè)。有手機(jī)號就可以注冊,不用營業(yè)執(zhí)照!不用營業(yè)執(zhí)照!不用營業(yè)執(zhí)照!
2.創(chuàng)建應(yīng)用
注冊成功后,點(diǎn)「管理企業(yè)」進(jìn)入管理界面,選擇「應(yīng)用管理」 → 「自建」 → 「創(chuàng)建應(yīng)用」
應(yīng)用名稱隨意填,可見范圍可以選擇公司名。
創(chuàng)建完成后進(jìn)入應(yīng)用詳情頁,可以得到應(yīng)用ID( agentid ),應(yīng)用Secret( secret )。
3.獲取企業(yè)ID
進(jìn)入「我的企業(yè)」頁面,拉到最下邊,可以得到企業(yè)ID。
4.推送消息到微信
進(jìn)入「我的企業(yè)」 → 「微信插件」,拉到下邊掃描二維碼,關(guān)注以后即可收到推送的消息。
注:如果出現(xiàn)接口請求正常,企業(yè)微信接受消息正常,個人微信無法收到消息的情況:
1.進(jìn)入「我的企業(yè)」 → 「微信插件」,拉到最下方,勾選 “允許成員在微信插件中接收和回復(fù)聊天消息”
2.在企業(yè)微信客戶端 「我」 → 「設(shè)置」 → 「新消息通知」中關(guān)閉 “僅在企業(yè)微信中接受消息” 限制條件
5.添加環(huán)境變量
在 Github 的 Secrets 中在添加三個變量:
- Name 是
WX_APP_ID,Value 是第二步的AgentId。 - Name 是
WX_APP_SECRET,Value 是第二步Secret。 - Name 是
WX_COMPANY_ID,Value 是第三步的企業(yè)ID。
WX_COMPANY_ID= 企業(yè)ID
WX_APP_ID= 應(yīng)用ID
WX_APP_SECRET= 應(yīng)用 Secret
TIAN_API_KEY= 天行數(shù)據(jù) key
6.GitHub Action每天自動執(zhí)行
核心代碼如下,詳細(xì)代碼見下面?zhèn)}庫鏈接
schedule:
# `分 時 天 月 周` 時按照標(biāo)準(zhǔn)時間 北京時間=標(biāo)準(zhǔn)時間+8 18表示北京時間早上2點(diǎn)
# 早上 7:30
- cron: '30 23 * * *'
數(shù)據(jù)賦能API
這里我們可以自己選擇第三方開放API進(jìn)行定制,或者自己定制
注:免費(fèi)開源接口需要考慮服務(wù)穩(wěn)定性!
目前接口數(shù)據(jù)能力主要由天行數(shù)據(jù)提供,隨便注冊一個賬戶會員即可,無門檻
天行數(shù)據(jù):https://www.tianapi.com/
- 會員免費(fèi)接口數(shù)量:15個
- 每日贈送次數(shù):100次
注:如果采取該接口,需要在 5.添加環(huán)境變量這一步中,再添加Key的變量,作為天行數(shù)據(jù)接口使用時的必填參數(shù)
功能和內(nèi)容
這里就看個人的想法和思路了,就各種免費(fèi)接口基本可以提供很多各式各樣的信息了,你也可以自己寫服務(wù)和爬蟲腳本等,可玩性真的是很高
目前已添加的功能有:
- 個人定制化信息
- 天氣信息
- 每日一言
- 最美宋詞
- 雷人笑話
- 土味情話
- 每日英語
- 睡前故事
內(nèi)容完全由你發(fā)揮,之后還可以開發(fā)自己的個人資訊和消息推送等,就很棒~
部分代碼
接口代碼
class API {
key: string
constructor(key?: string) {
this.key = key || '' // 為了方便,key在 http中統(tǒng)一添加
}
// 最美宋詞
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]
}
// 獲取農(nóng)歷信息
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()
}
}
請求數(shù)據(jù)-goodMorning
/**
* @name goodMorning
* @description 說早安
*/
// 并行請求,優(yōu)響相應(yīng)
const dataSource = await Promise.allSettled([
API.getSaylove(), // 土味情話
API.getCaihongpi(), // 彩虹屁
API.getOneWord(), // 一言
API.getSongLyrics(), // 最美宋詞
API.getOneMagazines(), // one雜志
API.getNetEaseCloud(), // 網(wǎng)易云熱評
API.getDayEnglish(), // 每日英語
])
// 過濾掉異常數(shù)據(jù)
const [sayLove, caiHongpi, oneWord, songLyrics, oneMagazines, netEaseCloud, dayEnglish] =
dataSource.map((n) => (n.status === 'fulfilled' ? n.value : null))
效果
天氣信息

其他信息
今日笑話:
名作家到我市舉行簽名活動。一大早我?guī)е鴥鹤觼頃曩I書,請作家簽名時,兒子在一旁不解地問:“我們買的書怎么寫他的名字?”
一言:
冬天之所以那么冷是為了告訴大家身邊人的溫暖有多重要。
今日英語(Dec 18 2021):
While there is life, there is hope.
生命不息,希望不止。
代碼
本項目使用 TypeScript開發(fā),包管理工具為 pnpm
完整代碼見倉庫,已開源 https://github.com/JS-banana/notify-server
歡迎一起交流
開發(fā)
復(fù)制 .env.example文件重命名為 .env,并按照要求填寫對應(yīng)值,可以直接測試
如果要通過 GitHub Action使用,需要在 Secrets 中一一添加變量
結(jié)語
怎么說呢,每天逛GitHub你都能發(fā)現(xiàn)很多有趣的項目和小工具,每天抽點(diǎn)時間看看不僅可以了解前言技術(shù),還能第一時間接觸到很多優(yōu)秀的內(nèi)容和項目,并參考學(xué)習(xí),以此積累技術(shù)也會不斷精進(jìn)。
這個項目總的來說還是很簡單的,比日常工作寫業(yè)務(wù)要簡單多了,但是它卻是很有趣的,這未嘗不是愛上編碼的一種方式呢。無聊繁雜的業(yè)務(wù)工作很容易讓人產(chǎn)生厭煩和頹態(tài),但技術(shù)本身應(yīng)是帶給我們樂趣和快樂的,不是嗎
今天你是暖男了嗎??
