我正在构建一个从特定网站抓取数据的天气应用程序,但是在当天的某个时间由于我必须抓取数据的方式数据变得不准确。如果我可以在每天的某个时间收集数据,这将不是问题。
我的Meteor服务器是否有办法每天早上1点出去收集新数据并将信息存储在我可以全天使用的mongo数据库中?
答案 0 :(得分:3)
查看percolate:synced-cron包。
https://atmospherejs.com/percolate/synced-cron
使用它你可以做类似的事情:
SyncedCron.add({
name: 'Scrape weather data',
schedule: function(parser) {
// parser is a later.parse object
return parser.text('at 1:00 am' );
},
job: function() {
//
// scraping code
//
WeatherData.insert(scrapedData); //insert to MongoDB Collection
}
});
SyncedCron.start();
答案 1 :(得分:2)
还有一个基于setTimeout
函数的简单JavaScript解决方案:
function updateWeather() {
// Update weather logic
}
/**
* @returns {Number} ms till next day's 1 am
*/
function computeMsToNextWeatherUpdate() {
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
tomorrow.setHours(13); // 1 am
tomorrow.setMinutes(0);
tomorrow.setSeconds(0);
return tomorrow.getTime() - Date.now();
}
function startWeatherUpdater() {
updateWeather();
setTimeout(startWeatherUpdater, computeMsToNextWeatherUpdate());
}
startWeatherUpdater();