【云圖說】第235期 DDS讀寫兩步走 帶您領略只讀節點的風采
993
2025-04-03
上次我們使用云函數定時向女朋友推送郵件
使用云函數每天定時向女朋友發送郵件推送天氣
代碼已放置github https://github.com/dmhsq/uniCloud-demo
開發工具 Hbuilder X 使用uni-app uniCloud 云開發
如果你對Hbuilder X uni-app uniCloud 云開發不是很熟悉可以先看這幾篇文章
這次我們使用短信,每天早上六點向女朋友發送天氣和情話短信 晚上十點 發送晚安短信
愛她 就每天早上六點告訴他今天的天氣,再來句情話或者小故事
當然你也可以定時晚上發送 睡前小故事
參考文檔
https://uniapp.dcloud.io/uniCloud/README
這是測試的短信
短信服務
進入 Dcloud 開發者中心
https://dev.dcloud.net.cn/
如果沒有賬號 注冊即可
開通短信服務
開通 后可以充值一塊錢當作測試
添加簽名
根據要求填寫即可
我這里只用云函數 且只用于給女朋友推送短信
等待審核完成即可 同時可以去配置模板
添加模板
我是這樣填寫的
注意這里的 weekday weather story 你可以自己定義 比如 name 等等
等會要用到
等待審核完成即可
創建項目
右鍵點擊uniCloud關聯服務空間 如果沒有 請登陸控制臺https://unicloud.dcloud.net.cn
新建一個服務空間
選擇騰訊云的免費版本即可
綁定服務空間后 創建cloudfunctions目錄
右鍵點擊cloudfunctions目錄 選擇創建云函數
我們下面的代碼除了頁面代碼都寫在云函數里面
發送短信
發送代碼
文檔地址
https://uniapp.dcloud.io/uniCloud/send-sms
smsKey和 smsSecret 在基礎配置里
templateId是模板id審核過了會有
data
try { const res = await uniCloud.sendSms({ smsKey: '****************', smsSecret: '****************', phone: '***********', templateId: '模板id', data: { weekday: 'DCloud', weather: '123456', story: '注冊' } }) // 調用成功,請注意這時不代表發送成功 return res } catch(err) { // 調用失敗 console.log(err.errCode) console.log(err.errMsg) return { code: err.errCode, msg: err.errMsg } }
情話獲取
可以使用云數據庫 自己添加
也可以從網上獲取 土味情話
比如 這個api http://shiyan666.cn/api/twqh.php
function getQH(city) { let res = uniCloud.httpclient.request('http://shiyan666.cn/api/twqh.php') return new Promise(function(resolve) { res.then(ress => { let arrayBuffer = ress.res.data let unit8Arr = new Uint8Array(arrayBuffer) let encodedString = String.fromCharCode.apply(null, unit8Arr) let decodedString = decodeURIComponent(escape(encodedString)) let data = JSON.parse(JSON.stringify(decodedString)) resolve(data) }) }) }
如果是從數據庫獲取 就獲取后根據當天為周幾 就返回xid為幾的情話
數據庫可以存放經過自己篩選的 可以一次放一個月的 或者七天的 當情話發過一遍后
給自己的手機發短信提醒 情話已經用過一遍
當然如果你有時間 還可以自定義 寫個小后臺 向數據庫存入數據 云函數讀取后 第二天發送
發送完自動刪除 如果數據庫沒存 就默認調用情話數據庫/網上獲取
天氣獲取
appid和appsecret的獲取 參考網站 https://tianqiapi.com/
function getTQ(city) { let res = uniCloud.httpclient.request("https://tianqiapi.com/api?version=v6&appidxxxx&appsecret=sxxx&city=" + city) return new Promise(function(resolve) { res.then(ress => { let arrayBuffer = ress.res.data let unit8Arr = new Uint8Array(arrayBuffer) let encodedString = String.fromCharCode.apply(null, unit8Arr) let decodedString = decodeURIComponent(escape(encodedString)) let data = JSON.parse(decodedString) resolve(data) }) }) }
嵌入數據
let datas = await getTQ('城市名 不要加縣市 比如天津'); let qh = await getQH();
這是我的發送短信的data
data: { weekday: datas.week + ',親愛的', weather: `當前溫度${datas.tem}℃,最高溫度${datas.tem1}℃,最低溫度${datas.tem2}℃,出行建議:${datas.air_tips}\n`, story: '土味情話:' + qh }
api獲取情話發送短信完整代碼
'use strict'; function getTQ(city) { let res = uniCloud.httpclient.request("https://tianqiapi.com/api?version=v6&appid=xxxx&appsecret=xxxx&city=" + city) return new Promise(function(resolve) { res.then(ress => { let arrayBuffer = ress.res.data let unit8Arr = new Uint8Array(arrayBuffer) let encodedString = String.fromCharCode.apply(null, unit8Arr) let decodedString = decodeURIComponent(escape(encodedString)) let data = JSON.parse(decodedString) resolve(data) }) }) } function getQH(city) { let res = uniCloud.httpclient.request('http://shiyan666.cn/api/twqh.php') return new Promise(function(resolve) { res.then(ress => { let arrayBuffer = ress.res.data let unit8Arr = new Uint8Array(arrayBuffer) let encodedString = String.fromCharCode.apply(null, unit8Arr) let decodedString = decodeURIComponent(escape(encodedString)) let data = JSON.parse(JSON.stringify(decodedString)) resolve(data) }) }) } exports.main = async (event, context) => { let datas = await getTQ('xxxx'); let qh = await getQH(); try { const res = await uniCloud.sendSms({ smsKey: 'fee5c97e6aeaaae9d0d8923e62229797', smsSecret: 'xxxxxxx', phone: 'xxxxxxx', templateId: 'xxxxx', data: { weekday: datas.week + ',親愛的', weather: `當前溫度${datas.tem}℃,最高溫度${datas.tem1}℃,最低溫度${datas.tem2}℃,出行建議:${datas.air_tips}\n`, story: ':土味情話:' + qh } }) // 調用成功,請注意這時不代表發送成功 return "成功" } catch (err) { // 調用失敗 console.log(err.errCode) console.log(err.errMsg) return { code: err.errCode, msg: err.errMsg } } };
如果情話來源為數據庫
根據周幾查詢情話
這里我的云數據庫
查詢代碼
const dbs = uniCloud.database(); let db = dbs.collection('story') let now = new Date(); let day = now.getDay(); let res = await db.where({xid: day}).get() console.log(res.data[0].story)
情話用完警告
比如今天是周三 那么情話是周四早上6點發第一個 下周四發完 所以我們新建一個數據表
只需要一個數據
這里的_id拿到
每次發送后都會獲取下tx 如果不是7就加1 如果為7說明用完 將tx重置為0防止你忘了設置新的 從第一條開始發送
并且向你發送告警短信
tx為你本次修改數據庫發送的天數 從0~7 為7時置0并發送警告消息
數據庫使用 參考文檔
https://uniapp.dcloud.io/uniCloud/cf-database?id=%e6%b7%bb%e5%8a%a0%e6%9f%a5%e8%af%a2%e6%9d%a1%e4%bb%b6
const dbs = uniCloud.database(); let db = dbs.collection('story') let now = new Date(); let day = now.getDay(); let qh = await db.where({xid: day}).get() let dbtx = dbs.collection('tx') let res = await dbtx.get() let tx = res.data[0].tx if(tx==7){ tx = 0; let updb = await dbtx.doc('b00064a7602d226805806e0e2eb8b529').update({ tx: tx }); try { const res = await uniCloud.sendSms({ smsKey: 'xxxxxxxx', smsSecret: 'xxxxxxxxxx', phone: 'yourphone', templateId: 'xxxxx', data: { weekday: '用完啦', weather: '用完啦', story: '用完啦' } }) // 調用成功,請注意這時不代表發送成功 return "成功" } catch (err) { // 調用失敗 console.log(err.errCode) console.log(err.errMsg) return { code: err.errCode, msg: err.errMsg } } } else{ tx = tx+1; let updb = await dbtx.doc('b00064a7602d226805806e0e2eb8b529').update({ tx: tx }); }
數據庫獲取情話發送短信完整代碼
'use strict'; function getTQ(city) { let res = uniCloud.httpclient.request("https://tianqiapi.com/api?version=v6&appid=xxxx&appsecret=xxxxx&city=" + city) return new Promise(function(resolve) { res.then(ress => { let arrayBuffer = ress.res.data let unit8Arr = new Uint8Array(arrayBuffer) let encodedString = String.fromCharCode.apply(null, unit8Arr) let decodedString = decodeURIComponent(escape(encodedString)) let data = JSON.parse(decodedString) resolve(data) }) }) } exports.main = async (event, context) => { //event為客戶端上傳的參數 const dbs = uniCloud.database(); let db = dbs.collection('story') let now = new Date(); let day = now.getDay(); let qha = await db.where({xid: day}).get() let qh = qha.data[0].story let datas = await getTQ('xxx') try { const res = await uniCloud.sendSms({ smsKey: 'xxxxx', smsSecret: 'xxxxx', phone: 'xxxxx', templateId: 'xxxx', data: { weekday: datas.week + ',親愛的', weather: `當前溫度${datas.tem}℃,最高溫度${datas.tem1}℃,最低溫度${datas.tem2}℃,出行建議:${datas.air_tips}\n`, story: ':土味情話:' + qh } }) let dbtx = dbs.collection('tx') let res = await dbtx.get() let tx = res.data[0].tx let id = res.data[0]._id if(tx==7){ tx = 0; let ipdb = await dbtx.doc(id).update({ tx: tx }); try { const res = await uniCloud.sendSms({ smsKey: 'xxxxxxxx', smsSecret: 'xxxxxxxxxx', phone: 'yourphone', templateId: 'xxxxx', data: { weekday: '用完啦', weather: '用完啦', story: '用完啦' } }) // 調用成功,請注意這時不代表發送成功 return "成功" } catch (err) { // 調用失敗 console.log(err.errCode) console.log(err.errMsg) return { code: err.errCode, msg: err.errMsg } } } else{ tx = tx+1; let ipdb = await dbtx.doc(id).update({ tx: tx }); } } catch (err) { // 調用失敗 console.log(err.errCode) console.log(err.errMsg) return { code: err.errCode, msg: err.errMsg } } };
編寫頁面自定義修改情話(以七條為例一周嘛)
以上面那個數據庫為例子
效果
云函數
'use strict'; exports.main = async (event, context) => { //event為客戶端上傳的參數 let type = event.type const dbs = uniCloud.database(); let db = dbs.collection('story') if(type==1){ let res = await db.get() return res }else if(type==2){ let qh = await db.where({xid: event.xid}).get() let id = qh.data[0]._id let updb = await db.doc(id).update({ story: event.story }); return updb }else{ return "error" } };
頁面代碼
這樣就可以自定義情話了哈哈 然后短信會發送以這個數據庫里面的情話
自定義情話發送代碼
代碼和數據庫的一樣 因為本身就是修改數據庫的情話
定時每天早上六點發送
當你開發完云函數(右鍵點擊云函數選擇上傳部署) 后上傳部署
打開控制臺 https://unicloud.dcloud.net.cn
找到部署的云函數
點擊詳情 找到定時器觸發 編輯
輸入以下代碼 即可定時早上六點發送
[ { "name": "myTrigger", "type": "timer", "config": "0 0 6 * * * *" } ]
晚安短信
當然你也可以發送晚安短信
代碼大差不差
代碼
'use strict'; function getTQ(city) { let res = uniCloud.httpclient.request("https://tianqiapi.com/api?version=v6&appid=xxxxx&appsecret=xxxx&city=" + city) return new Promise(function(resolve) { res.then(ress => { let arrayBuffer = ress.res.data let unit8Arr = new Uint8Array(arrayBuffer) let encodedString = String.fromCharCode.apply(null, unit8Arr) let decodedString = decodeURIComponent(escape(encodedString)) let data = JSON.parse(decodedString) resolve(data) }) }) } exports.main = async (event, context) => { let datas = await getTQ('xxxx'); try { const res = await uniCloud.sendSms({ smsKey: 'xxxxxxx', smsSecret: 'xxxxxx', phone: 'xxxxxx', templateId: 'xxxxx', data: { weekday: datas.week + ',晚安親愛的\n', weather: `當前溫度${datas.tem}℃,最高溫度${datas.tem1}℃,最低溫度${datas.tem2}℃,注意增減衣物哦\n`, story: ':晚安老婆之我愛你' } }) // 調用成功,請注意這時不代表發送成功 return "成功" } catch (err) { // 調用失敗 console.log(err.errCode) console.log(err.errMsg) return { code: err.errCode, msg: err.errMsg } } };
定時每天晚上十點發送
[ { "name": "myTrigger", "type": "timer", "config": "0 0 22 * * * *" } ]
愛她 就每天早上六點告訴他今天的天氣,再來句情話或者小故事
當然你也可以定時晚上發送 睡前小故事
大學之道亦在自身,努力學習,熱血青春
數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。