Изо всех сил пытаюсь сделать пост в Твиттере автоматически - PullRequest
0 голосов
/ 07 марта 2020

Я создал бот javascript (используя twiw npm), предназначенный для публикации сообщений каждый день. Я могу сделать это пост, но не могу сделать это на любом графике, кроме очень быстро (10 секунд или 5 минут). Я попытался использовать setInterval для этой цели:

require('dotenv').config();
const Twit = require("twit");
const T = new Twit({
    consumer_key:         process.env.API_KEY,
    consumer_secret:      process.env.API_SKEY,
    access_token:         process.env.TOKEN,
    access_token_secret:  process.env.SECRET_TOKEN,
});

const tweetContent1 = [
 array content removed
];

 const tweetContent2 = [
 array content removed
];

const randomNumber1 = Math.floor(Math.random() * (tweetContent1.length));
const randomNumber2 = Math.floor(Math.random() * (tweetContent2.length));

const tweetContent = tweetContent1[randomNumber1] + tweetContent2[randomNumber2];

setInterval(function(){

  T.post("statuses/update", { status: tweetContent
 }, function(err, data, response) {
  if (err) {
    console.log(err);
  } else {
  console.log(data);
}});

}, 86400000);


console.log('Your bot is running, go catch it.');

Это работает в моем собственном терминале (с интервалом, установленным на что-то немного меньшее), и код работает без окружения setInterval.

Затем я загрузил эту версию в Heroku, где она, похоже, пыталась публиковать одно и то же снова и снова (ошибка 137 в API Twitter). Затем я попробовал Glitch, где он работал с меньшим интервалом, но попытка использовать задание cron, чтобы разбудить его, не работала.

Есть ли другой способ сделать этот пост бота по расписанию, например, каждый день определенное время?

1 Ответ

0 голосов
/ 10 марта 2020

Благодаря Ариэлю, который прокомментировал ОП - оказывается, мне нужно было добавить express к коду, чтобы он не обработал sh, когда к приложению обращались через URL, то есть с помощью Cron Job и т. П. разбудить приложение.

Код теперь:

require('dotenv').config();
const express = require("express");
const Twit = require("twit");

const app = express();

const T = new Twit({
    consumer_key:         process.env.API_KEY,
    consumer_secret:      process.env.API_SKEY,
    access_token:         process.env.TOKEN,
    access_token_secret:  process.env.SECRET_TOKEN,
});

const tweetContent1 = [
 *array content*
];

 const tweetContent2 = [
 *array content*
];

const randomNumber1 = Math.floor(Math.random() * (tweetContent1.length));
const randomNumber2 = Math.floor(Math.random() * (tweetContent2.length));

const tweetContent = tweetContent1[randomNumber1] + tweetContent2[randomNumber2];

T.post("statuses/update", { status: tweetContent
 }, function(err, data, response) {
  if (err) {
    console.log(err);
  } else {
  console.log(data);
}});

app.get("/", function (req, res) {
  res.send("Should have worked mate.");
});

app.listen(process.env.PORT || 3000, function(){
  console.log("Your bot is running, go catch it");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...