上次我們使用云函式定時向女朋友推送郵件
使用云函式每天定時向女朋友發送郵件推送天氣
開發工具 Hbuilder X 使用uni-app uniCloud 云開發
如果你對Hbuilder X uni-app uniCloud 云開發不是很熟悉可以先看這幾篇文章
云開發系列這次我們使用短信,每天早上六點向女朋友發送天氣和情話短信 晚上十點 發送晚安短信
愛她 就每天早上六點告訴他今天的天氣,再來句情話或者小故事
當然你也可以定時晚上發送 睡前小故事
參考檔案
https://uniapp.dcloud.io/uniCloud/README
這是測驗的短信
使用云函式每天定時向女朋友發送短信
- 短信服務
- 開通短信服務
- 添加簽名
- 添加模板
- 創建專案
- 發送短信
- 發送代碼
- 情話獲取
- 天氣獲取
- 嵌入資料
- api獲取情話發送短信完整代碼
- 如果情話來源為資料庫
- 根據周幾查詢情話
- 情話用完警告
- 資料庫獲取情話發送短信完整代碼
- 撰寫頁面自定義修改情話(以七條為例一周嘛)
- 效果
- 云函式
- 頁面代碼
- 自定義情話發送代碼
- 定時每天早上六點發送
- 晚安短信
- 代碼
- 定時每天晚上十點發送
短信服務
進入 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"
}
};
頁面代碼
<template>
<view class="content">
<view v-for="item in tableList" style="border: #DD524D solid 1px;">
<view class="text-area">{{item.xid}}</view>
<textarea v-model="item.story"></textarea>
<button type="primary" @click="upstory(item.xid,item.story)">修改</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
tableList: [],
butable: []
}
},
onLoad() {
this.getDB();
},
methods: {
getDB() {
let vm = this;
uniCloud.callFunction({
name: 'getdbs',
data: {
type: 1
},
success: function(res) {
console.log(res.result.data)
vm.tableList = res.result.data
vm.butable = JSON.parse(JSON.stringify(vm.tableList))
}
})
},
upstory(xid, story) {
let vm = this;
if(this.butable[xid-1].story==story){
uni.showToast({
icon: 'none',
title: '沒有任何變化'
})
return
}
uniCloud.callFunction({
name: 'getdbs',
data: {
type: 2,
xid: xid,
story: story
},
success: function(res) {
if (res.result.updated == 0) {
uni.showToast({
icon: 'none',
title: '更新失敗'
})
}
if(res.result.updated == 1) {
uni.showToast({
icon: 'none',
title: '更新成功'
})
vm.butable = JSON.parse(JSON.stringify(vm.tableList))
}
}
})
}
}
}
</script>
<style>
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.text-area {
display: flex;
justify-content: center;
}
</style>

這樣就可以自定義情話了哈哈 然后短信會發送以這個資料庫里面的情話
自定義情話發送代碼
代碼和資料庫的一樣 因為本身就是修改資料庫的情話
定時每天早上六點發送
當你開發完云函式(右鍵點擊云函式選擇上傳部署) 后上傳部署
打開控制臺 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 * * * *"
}
]
愛她 就每天早上六點告訴他今天的天氣,再來句情話或者小故事
當然你也可以定時晚上發送 睡前小故事
大學之道亦在自身,努力學習,熱血青春
如果對編程感興趣可以加入我們的qq群一起交流:974178910
有問題可以下方留言,看到了會回復哦
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260668.html
標籤:其他
下一篇:2021-02-17

