Использование setInterval для перебора электронной таблицы Google - PullRequest
0 голосов
/ 01 июня 2018

У меня есть 4 строки в электронной таблице Google, и я хочу перебирать их по 1 за раз каждые 1 час.Этот код в настоящее время работает, но публикует все четыре одновременно.Как я могу 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';

var link = () => {
    Tabletop.init({
        key: spreadsheetUrl,
        callback(data, tabletop) {
            data.forEach(d => {
                var status = d.tweetMsg + ' ' + Math.floor(Math.random() * 10000) + ' ' + d.userURL + ' via @AlDerbyshireG';
                console.log(status)
                bot.post('statuses/update', {
                    status
                },
                (err, response, data) => {
                    if (err) { console.log(err) }
                    else { console.log('Post success!') }
                });
            });
        },
        simpleSheet: true
    });
}

link()
setInterval(link, 1000 * 60 * 60)

1 Ответ

0 голосов
/ 07 июня 2018

В документации TableTop (буквально в readme репо ), с simpleSheet: true вы передаете своей функции обратного вызова массив строк с первого листа рабочей книги.

Вашcode:

callback: (data, tabletop) => {
  data.forEach(d =>

, таким образом, инструктирует каждую строку на этом листе обрабатываться.

Чтобы вызвать функцию только для одной строки за выполнение callback, вам необходимо определить некоторую другую областьпеременная - давайте назовем это rowIndex.Вы должны инициализировать эту переменную, когда ваш бот-сервер загружается, а затем увеличить и проверить границы в callback.

var rowIndex = 0;

var link = () => {
    Tabletop.init({
        key: spreadsheetUrl,
        callback(data, tabletop) {
            if (!data.length) { return; } // Guard against empty spreadsheet
            // Wrap around here, in case new messages were added or deleted since the last invocation.
            rowIndex = rowIndex % data.length;
            var d = data[rowIndex];
            /**
             * Code to call for just this array element `d` (read: row)
             */
            // Increment the state variable so next call is a different row.
            ++rowIndex;
        }, // End callback definition
        simpleSheet: true
   });
};
...