如何用setInterval实现Google Sheet数据每小时逐条循环发布?
解决每小时逐条发布Google表格内容的问题
原代码的问题在于,每次setInterval触发link()函数时,都会遍历表格里的所有4条数据并全部发布,所以才会一次性发完。要实现每小时发1条并循环,我们需要跟踪当前发布到哪一条,每次只处理单条数据,然后更新索引循环往复。
下面是修改后的完整代码:
require('console-stamp')(console, { pattern: 'dd/mm/yyyy HH:MM:ss.l' }); var Twit = require('twit'); var config = require('./dmconfig'); var Tabletop = require('tabletop'); var bot = new Twit(config); var spreadsheetUrl = 'https://docs.google.com/spreadsheets/d/1234567/edit?usp=sharing'; // 全局变量:跟踪当前要发布的条目索引,初始从第0条开始 let currentIndex = 0; var link = () => { Tabletop.init({ key: spreadsheetUrl, callback(data, tabletop) { // 先判断表格是否有数据,避免空数据报错 if (!data || data.length === 0) { console.log('表格中没有可发布的数据'); return; } // 获取当前要发布的单条内容 const currentTweet = data[currentIndex]; var status = currentTweet.tweetMsg + ' ' + Math.floor(Math.random() * 10000) + ' ' + currentTweet.userURL + ' via @AlDerbyshireG'; console.log('准备发布内容:', status); bot.post('statuses/update', { status }, (err, response, data) => { if (err) { console.log('发布失败:', err); } else { console.log('Post success!'); // 发布成功后更新索引,到达最后一条时自动回到开头循环 currentIndex = (currentIndex + 1) % data.length; } }); }, simpleSheet: true }); } // 首次启动先发布第一条 link(); // 每小时触发一次发布 setInterval(link, 1000 * 60 * 60);
关键修改点说明:
- 新增
currentIndex全局变量:专门记录下一次要发布的条目位置,初始从第0条起步。 - 替换批量遍历为单条处理:不再用
forEach一次性发完所有内容,只取当前索引对应的那条数据发布。 - 循环索引逻辑:用
(currentIndex + 1) % data.length实现循环——当索引走到最后一条时,加1后取数据长度的模,会自动回到0,实现无限循环发布。 - 增加空数据判断:避免表格为空时程序报错,提升代码的健壮性。
这样修改后,程序就会每小时发布一条表格内容,发完4条后自动从第一条开始循环,完全符合你的需求~
内容的提问来源于stack exchange,提问作者AliMo
相关产品推荐
相关产品推荐

