Гид по технологиям

Twitter-бот на Raspberry Pi с Node.js

8 min read Raspberry Pi Обновлено 08 Jan 2026
Twitter-бот на Raspberry Pi с Node.js
Twitter-бот на Raspberry Pi с Node.js

Важно: для создания бота требуется учётная запись разработчика Twitter и ключи API; соблюдайте правила использования платформы и авторские права на изображения.

Зачем собирать Twitter-бота?

twitter-bot-raspberry-pi

Автоматические аккаунты, публикующие фотографии, факты или шутки, часто управляются ботами. Это простой способ регулярно делиться контентом и привлекать аудиторию. Кроме того, разработка бота — это полезный учебный проект: вы освоите работу с API, обработку файлов, планирование задач и основы развёртывания на Raspberry Pi.

Краткое определение: Twitter-бот — программа, которая автоматически публикует или отвечает на твиты через API Twitter.

Основные варианты применения

  • Публикация отсканированных исторических фотографий с атрибуцией.
  • Автоматизированные рассылки фактов/цитат по расписанию.
  • Мониторинг и ретвит ключевых событий (с осторожностью и с уважением к правилам API).

Предположения и требования

  • Raspberry Pi 2 или новее (тестировалось на Raspberry Pi 3 B+).
  • Установленная Raspbian (или Raspberry Pi OS).
  • Подключение к интернету.
  • Учётная запись разработчика Twitter и созданное приложение (API-ключи и токены).
  • Изображения, которыми вы имеете право делиться (свои или с подходящей лицензией).

Быстрый план действий

  1. Собрать набор изображений и метаданные (атрибуции).
  2. Установить Node.js на Raspberry Pi.
  3. Создать директорию проекта и базовый скрипт.
  4. Подключить библиотеку Twit и ключи API.
  5. Реализовать выбор и загрузку изображений, добавление текста.
  6. Настроить автозапуск (systemd/cron) и мониторинг.

Установка Node.js на Raspbian

Откройте терминал или подключитесь по SSH и выполните обновление пакетов:

sudo apt-get update  
sudo apt-get dist-upgrade

Следуйте подсказкам на экране и после выполнения перезагрузите систему:

sudo reboot

Затем загрузите установщик Node.js (пример для Node 8 в исходнике; при обновлении среды используйте актуальную ветку на deb.nodesource.com):

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

Установите Node.js и npm:

sudo apt-get install -y nodejs

Проверьте установку:

node -v
npm -v

Если вы видите номера версии, Node.js и npm установлены.

Создание проекта и первая проверка

Создайте директорию и базовый файл:

mkdir twitterbot
cd twitterbot
sudo nano server.js

Вставьте одну строку в server.js, сохраните (Ctrl + X, затем Y) и выполните:

console.log('I am a Twitter bot!');

Запустите скрипт:

node '/home/pi/twitterbot/server.js'

Должна появиться строка “I am a Twitter bot!” — это подтверждение, что Node.js запускает ваш скрипт.

Установка Twit и инициализация npm

Инициализируйте npm для проекта:

npm init

Принимайте ответы по умолчанию или заполните поля самостоятельно. Затем установите библиотеку Twit:

npm install twit --save

После установки откройте server.js и замените тестовую строку на подключение модулей:

var fs = require('fs'),  
    path = require('path'),  
    Twit = require('twit'),  
    config = require(path.join(__dirname, 'config.js'));

Сохраните файл.

Создание приложения Twitter и ключей API

  1. Зарегистрируйте новую учётную запись Twitter (если нужно) и подтвердите её номером телефона.
  2. Перейдите в developer.twitter.com и подайте заявку на доступ разработчика (может потребовать заполнения формы).
  3. В консоли разработчика создайте новое приложение — укажите имя и описание.
  4. В настройках приложения на вкладке Permissions выставьте Access permission в Read and Write.
  5. На вкладке Keys and Tokens получите Consumer Key и Consumer Secret, затем сгенерируйте Access Token и Access Token Secret.

Создайте файл config.js и вставьте свои ключи:

sudo nano config.js
var config = {  
 consumer_key:         'XXXXX',  
 consumer_secret:      'XXXXX',  
 access_token:         'XXXXX',  
 access_token_secret:  'XXXXX'  
}  
module.exports = config;

Где ‘XXXXX’ замените на реальные строки ключей из консоли Twitter.

Add your key strings generated by Twitter into the config file

Простейшая проверка отправки твита

Откройте server.js и добавьте в конец:

var T = new Twit(config);  

T.post('statuses/update', { status: 'My first tweet!' }, function(err, data, response) {  
  console.log(data)  
});

Запустите:

node server.js

Если в вашей учётной записи появился твит, значит авторизация и базовый POST работают.

This code will prompt a tweet to be sent.

A test tweet sent using Node.js code

Подготовка папки изображений

Создайте папку images в корне проекта и поместите туда подготовленные файлы (начните с 10–20 штук):

mkdir images
# скопируйте туда ваши файлы, например через scp или USB

Теперь вернёмся к server.js и реализуем выбор случайного изображения.

Выбор и загрузка случайного изображения

Откройте server.js и удалите ранее добавленный простой T.post(…). Вместо него добавьте функцию выбора случайного элемента из массива:

function random_from_array(images){  
  return images[Math.floor(Math.random() * images.length)];  
}

Затем добавьте функцию загрузки и публикации изображения:

function upload_random_image(images){  
  console.log('Opening an image...');  
  var image_path = path.join(__dirname, '/images/' + random_from_array(images)),  
      b64content = fs.readFileSync(image_path, { encoding: 'base64' });  

  console.log('Uploading an image...');  

  T.post('media/upload', { media_data: b64content }, function (err, data, response) {  
    if (err){  
      console.log('ERROR:');  
      console.log(err);  
    }  
    else{  
      console.log('Image uploaded!');  
      console.log('Now tweeting it...');  

      T.post('statuses/update', {  
         media_ids: new Array(data.media_id_string)  
       },  
       function(err, data, response) {  
         if (err){  
           console.log('ERROR:');  
           console.log(err);  
         }  
         else{  
           console.log('Posted an image!');  
         }  
       }  
      );  
    }  
  });  
}

Эта функция выбирает файл случайно, читает его, загружает через media/upload и публикует твит с прикреплённым медиа.

Автопубликация по расписанию

Добавьте вызов, который будет запускать публикации с нужным интервалом. В исходном материале использовалось 60000(ms) — это одна минута. В продакшн рекомендуется бóльшие интервалы, чтобы избежать восприятия как спам.

setInterval(function(){  
  upload_random_image(images);  
}, 60000);  

Сохраните файл и запустите node server.js. Чтобы остановить процесс, используйте Ctrl + Z или лучше Ctrl + C.

Примечание: долгосрочный запуск предпочтительнее организовать через systemd или process manager (pm2), а не оставлять процесс в терминале.

Добавление текста и атрибуции к фото

Для управления подписями создайте файл images.js со структурой массива объектов, где каждому файлу соответствует текст и источник.

sudo nano images.js

Пример содержимого:

var images = [  
  {   
    file: 'image0001.png',  
    source: 'http://www.example.com/image0001.png',  
    text: 'Фото из коллекции первой мировой войны. Источник: example.com'  
  },  
  {   
    file: 'image0002.png',  
    source: 'http://www.example.com/image0002.png',  
    text: 'Архивная фотография, начало XX века. Источник: example.com'  
  },  
]

module.exports = images;

В server.js подключите массив:

images = require(path.join(__dirname, 'images.js'));

И измените логику публикации, чтобы при постинге передавать текст в параметре status:

T.post('statuses/update', {  
  status: images_object.text,  
  media_ids: new Array(data.media_id_string)  
}, function(err, data, response){ ... });

Где images_object — объект, соответствующий выбранному файлу (не только имя файла).

A Twitter bot can post photos and text

Проверка и критерии приёмки

Критерии приёмки проекта перед переводом в постоянную эксплуатацию:

  • Скрипт успешно поднимается без ошибок и публикует тестовый твит.
  • Изображения корректно загружаются и отображаются в публикациях.
  • Подписи и атрибуции публикуются в ожидаемом формате.
  • Бот не публикует чаще установленного интервала.
  • Секреты (config.js) хранятся вне публичного репозитория.

Автозапуск и мониторинг

Рекомендуется использовать systemd или pm2 для управления процессом.

Пример systemd unit-файла (/etc/systemd/system/twitterbot.service):

[Unit]
Description=Twitter Bot
After=network.target

[Service]
User=pi
WorkingDirectory=/home/pi/twitterbot
ExecStart=/usr/bin/node /home/pi/twitterbot/server.js
Restart=on-failure
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

После создания файла выполните:

sudo systemctl daemon-reload
sudo systemctl enable twitterbot.service
sudo systemctl start twitterbot.service
sudo journalctl -u twitterbot.service -f

Альтернатива: pm2 позволяет перезапускать процессы, хранить логи и получать автозапуск на старте системы.

Когда этот подход не подходит

  • Если вам нужно сложное планирование публикаций (отложенные посты с точными таймингами) — лучше использовать job scheduler или облачные сервисы.
  • Если вы планируете масштабную публикацию (тысячи твитов в сутки) — требуется учёт ограничений и возможное использование платных API-решений.
  • При необходимости высокой доступности и горизонтального масштабирования — Raspberry Pi как single-node решение ограничен.

Альтернативные подходы

  • Python: те же идеи можно реализовать с Tweepy. Подойдёт, если вы привыкли к Python-стеку.
  • Облачные функции: AWS Lambda, Google Cloud Functions — для редких публикаций без поддержки собственного сервера.
  • Использование официального Twitter API v2 или коммерческих SDK — для дополнительных возможностей и аналитики.

Безопасность и конфиденциальность

  • Храните ключи API в файле вне репозитория или используйте переменные окружения. Никогда не выкладывайте config.js в публичные репозитории.
  • Если изображения содержат личные данные, убедитесь в соблюдении правил приватности и, при необходимости, в наличии согласий субъектов.
  • Ограничьте частоту публикаций и реализуйте случайные задержки, чтобы избежать обвинений в спаме.

Соображения законности и прав на контент

  • Публикуйте только те изображения, на которые вы имеете права или которые распространяются по лицензии, допускающей публикацию в соцсетях.
  • Включайте корректную атрибуцию в текст твита или в поле source, если это требует лицензия.

Отладка и распространённые ошибки

  • Ошибка при media/upload: проверьте размер и формат файла. Twitter отвергает слишком большие файлы или неподдерживаемые форматы.
  • Ошибки аутентификации: проверьте правильность ключей и права доступа приложения (Read and Write).
  • Rate limit errors: при превышении лимитов API появятся соответствующие ошибки — нужно замедлить публикации.

Модель зрелости проекта (уровни)

  • MVP — локальный скрипт, запускаемый вручную, с папкой images и простым массивом атрибуций.
  • Продакшн-старт — автозапуск через systemd/pm2, логирование и простая обработка ошибок.
  • Производственная эксплуатация — мониторинг, alert’ы, резервное хранение изображений, CI для обновлений, учет прав публикации.

Рольовые чек-листы перед запуском

Разработчик:

  • Подготовить и проверить код локально.
  • Настроить обработку ошибок и логирование.

Оператор/администратор:

  • Настроить автозапуск и мониторинг.
  • Обеспечить резервное копирование конфигурации.

Контент-менеджер:

  • Проверить права на изображения и тексты.
  • Запланировать частоту публикаций и модерацию.

Тестовые сценарии и критерии успеха

  • Тест 1: Запуск скрипта публикует тестовый твит — прошло, если в аккаунте появился твит.
  • Тест 2: Загрузка и публикация изображения с подписью — прошло, если изображение и подпись отображаются правильно.
  • Тест 3: Обработка несуществующего файла — система должна логировать ошибку, но не падать.

Советы по улучшению качества публикаций

  • Сокращайте подписи до читабельных фраз и добавляйте обязательную атрибуцию в конце.
  • Публикуйте не чаще, чем это оправдано для аудитории; лучше несколько раз в сутки, чем десятки раз в час.
  • Используйте хештеги и метаданные аккуратно — не перегружайте твит.

Как масштабировать или модернизировать

  • Переведите управление контентом в JSON/CSV/Google Sheets и загружайте список динамически.
  • Добавьте очередь задач и контролируйте статус публикаций в БД (например, SQLite для простоты).
  • Интегрируйте обработку изображений (усечение, водяные знаки) перед загрузкой.

FAQ (коротко)

Q: Нужно ли регистрировать отдельный аккаунт для бота? A: Рекомендуется отдельный аккаунт, чтобы отделить контент бота от личной активности.

Q: Сколько твитов в минуту/день можно публиковать? A: Конкретные лимиты зависят от политики Twitter и типа запросов API; планируйте умеренную частоту и проверяйте ответы API на rate limit.

Итог и дальнейшие шаги

Вы запустили базовый Twitter-бот на Raspberry Pi с Node.js. Дальше вы можете:

  • Добавить более гибкую систему управления контентом (файлы, таблицы).
  • Настроить автозапуск и мониторинг.
  • Перевести проект на более надёжную инфраструктуру при росте нагрузки.

Контрольный список при сдаче проекта:

  • Код работает устойчиво и логирует ошибки.
  • Ключи хранятся безопасно.
  • Частота публикаций соответствует правилам платформы.
  • Контент имеет необходимые права и атрибуции.

Хотите идеи для других ботов? Подумайте о боте-репостере новостей по ключевым словам, боте-напоминалке о задачах или боте, собирающем и публикующем статистику (при учёте правил использования API).

Полезные команды-напоминания:

  • Запуск вручную: node /home/pi/twitterbot/server.js
  • Просмотреть логи systemd: sudo journalctl -u twitterbot.service -f
  • Перезапустить сервис: sudo systemctl restart twitterbot.service

Спасибо — теперь у вас есть готовая база для создания и развития своего Twitter-бота на Raspberry Pi!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Установка Ubuntu в QEMU на Linux
Виртуализация

Установка Ubuntu в QEMU на Linux

Супермакро: как начать и улучшить снимки
Фотография

Супермакро: как начать и улучшить снимки

Как стримить на Twitch с OBS: полное руководство
Стриминг

Как стримить на Twitch с OBS: полное руководство

DIY умный Wi‑Fi выключатель с Tasmota и Alexa
Умный дом

DIY умный Wi‑Fi выключатель с Tasmota и Alexa

Spotify Jam — совместное прослушивание музыки
Музыка

Spotify Jam — совместное прослушивание музыки

IFTTT: автоматизация задач без кода
Автоматизация

IFTTT: автоматизация задач без кода