const cloud = require('wx-server-sdk'); cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const config = { submitPagesGapDay: 1, clearPageHistoryGapDay: 30 }; const milliSecondsPerDay = 24*60*60*1000; const collectionNameMap = { pageHistory: "pageHistory" } const PagePathMap = { shixun:"markdown/shixun/shixun/shixun", path:"markdown/path/path/path" } exports.main = async (event, context) => { const wxContext = cloud.getWXContext(); console.log(event); let {TriggerName, Time} = event; switch(TriggerName){ case "submitPages":{ return submitPages({Time}); } case "clearPageHistory":{ return clearPageHistory({Time}); } } } async function submitPages({Time}){ console.log("start submitPages"); const db = cloud.database(); const _ = db.command; const pageHistoryCollection = db.collection(collectionNameMap.pageHistory); let shixunPath = PagePathMap.shixun; let pathPath = PagePathMap.path; let timeEnd = new Date(Time); let timeStart = new Date(timeEnd.getTime() - config.submitPagesGapDay*milliSecondsPerDay); let shixunResult = await pageHistoryCollection.where({ page: shixunPath, status: 200, isCrawl: false, time: _.lt(timeEnd).and(_.gte(timeStart)) }).get(); let pathResult = await pageHistoryCollection.where({ page: pathPath, status: 200, isCrawl: false, time:_.lt(timeEnd).and(_.gte(timeStart)) }).get(); let shixunQueries = shixunResult.data.reduce(function(arr, v){ var query = Object.keys(v.options).map(k=>`${k}=${v.options[k]}`).join("&"); if(arr.indexOf(query)==-1) arr.push(query); return arr },[]); let pathQueries = pathResult.data.reduce(function(arr, v){ var query = Object.keys(v.options).map(k=>`${k}=${v.options[k]}`).join("&"); if(arr.indexOf(query)==-1) arr.push(query); return arr },[]); console.info("shixunQueries", shixunQueries.length, shixunQueries); console.info("pathQueries", pathQueries.length, pathQueries); if(shixunQueries.length>0){ var pages = shixunQueries.map(i=>{ return { path: shixunPath, query: i } }); var res = await cloud.openapi.search.submitPages({pages}); console.log("submit shixun pages",pages.length, res); console.info("arguments", pages); }else{ console.warn("no shixun history"); } if(pathQueries.length>0){ var pages = pathQueries.map(i=>{ return { path: pathPath, query: i } }); var res = await cloud.openapi.search.submitPages({pages}); console.log("submit path pages success", pages.length, res); console.info("arguments", pages); }else{ console.warn("no path history"); } return {code:0, message:"success"}; } async function clearPageHistory({Time}){ console.log("clearPageHistory", Time); let now = new Date(Time); let timeEnd = new Date(now.getTime() - config.clearPageHistoryGapDay*milliSecondsPerDay); const db = cloud.database(); const _ = cloud.command; const pageHistoryCollection = db.collection(collectionNameMap.pageHistory); let res = await pageHistoryCollection.where({ time: _.lt(timeEnd) }).remove(); console.log("remove page History result: ", res); return {code: 0, message:"success", data:res}; }