最近学的小程序的云开发,刚刚处理好了云函数去调用外部接口获得数据并存库的功能,乘着记得,记录一下。
直接放结果代码,结构很简单,看的懂的直接看,看不懂的后面有代码解释:
//云函数主体js const cloud = require('wx-server-sdk') //引入request-promise用于做网络请求 var rp = require('request-promise'); cloud.init() // 云函数入口函数 exports.main = async (event, context) => { let url ='https://interface.sina.cn/news/wap/fymap2020_data.d.json'; return await rp(url) .then(function (res) { //console.log('res',res) var json = JSON.parse(res) console.log('json.data',json.data) const db = cloud.database() db.collection('virus').doc("e050b1a6606fe63600717bbb3af7fbcc") .update({ data:{ data:json.data } }) return res }) .catch(function (err) { return '失败' }); }
云函数配置文件:config.json
{ "permissions": { "openapi": [ ] }, "triggers":[ { "name":"updateData", "type":"timer", "config":"0 0 9 * * * *" } ] }
下方是说明啦
说明:
接口:
我用的新浪的防疫地图接口新浪防疫数据json接口
数据库:
将上方的json文件下载下来后,导入到云数据库中,我们便直接拥有了这个json结构的数据库,以及初始数据。后面我们只要定时更新这些数据就行了。
( 记住下面的 _id,后面我们更新数据要使用的。)
更新:
更新分为爬取和存库
爬取:
函数开头我们声明我们的接口url
用request-promise库(rp)调用接口拿到数据(此时还是纯文档的),数据在res里。
用JSON.parse(res)将返回的数据(文本)转换为JSON数据集。
存库
因为代码少而且直接,我就直接按顺序解释代码了。
创建云数据库实例db
更新云数据库的virus集合
下的 _id为"e050b1a6606fe63600717bbb3af7fbcc"
的data项
至此,便是代码的解释。
将重新获取的json数据的data,update到数据库的data下,这一操作便完成了。
验证函数
我们可以用本地函数调用云函数,然后查看数据库数据是否有更新来确认云函数功能是否完善。
// pages/cloudFunctiontest/index.js Page({ test(){ wx.cloud.callFunction({ name:'requestTest', }).then((res)=>{ var p = JSON.parse(res.result) console.log("p.data",p.data) }).catch((res)=>{ console.log(res.result); }) }, })
没有报错
数据库中的数据也更新了
4. 云函数定时调用
定时器说明可以查看微信小程序官方文档。
也可以直接看视频,简单明了
云开发基础能力展示之云函数定时器的使用
{ "permissions": { "openapi": [ ] }, "triggers":[ { "name":"updateData", "type":"timer", "config":"0 0 1 * * * *" } ] }
我这边定义的时间是,从右向左:
每年的
每星期的
每月的
每天的
1时
0分
0秒
调用函数
而今早的确定的时候确确实实按计划更新了(服务器有时间差不计)
微信官方的文档和视频都很详细,个人推荐多去啃一啃,此文只写一下个人的经验。