云函数入口函数
1.使用包管理工具安装配置环境
npm install --save request
npm install --save request-promise
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const rp = require('request-promise')
const URL = 'http://musicapi.xiecheng.live/personalized'
// 云函数入口函数
exports.main = async (event, context) => {
const playlist = await rp(URL).then((res) => {
return JSON.parse(res).result
})
// console.log(playlist)
for(let i = 0;i<playlist.length;i++) {
await db.collection('playlist').add({
data: {
...playlist[i],
createTime:db.serverDate()
}
}).then((res)=>{
console.log('seccess')
}).catch(err => {
console.log(err)
})
}
}
我们会发现很多问题比如每次我们执行代码数据库都会从新存储数据,无论是否保存过
解决问题我们通过先从数据库读取数据,把数据库没有的数据进行存储,重复数据不存储
算法实现
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const rp = require('request-promise')
const URL = 'http://musicapi.xiecheng.live/personalized'
// 云函数入口函数
const playlistCollection = db.collection('playlist')
exports.main = async (event, context) => {
const list = await playlistCollection.get();
//取到数据库所有数据(暂不考虑数量限制问题)
const playlist = await rp(URL).then((res) => {
return JSON.parse(res).result
})
const newData=[];//存储去重完的数据
for(let i = 0,len1=playlist.length;i<len1;i++) {
let flag = true
for(let j = 0,len2 = list.data.length; j<len2;j++) {
if(playlist[i].id === list.data[j].id) {
flag = false
break
}
}
if(flag) {
newData.push(playlist[i])
}
}
// console.log(playlist)
for(let i = 0;i<newData.length;i++) {
await db.collection('playlist').add({
data: {
...newData[i],
createTime:db.serverDate()
}
}).then((res)=>{
console.log('seccess')
}).catch(err => {
console.log(err)
})
}
return newData.length
}