В этой статье я расскажу и покажу, как настроить автоматический постинг любой информации из открытых API в свою группу во ВКонтакте. Этот скрипт также можно использовать для телеграм-чата, изменив функцию самого постинга под Telegram API.
Подготовка
Мы настроим автопостинг на примере API, который отдает информацию о коронавирусе. Также будем использовать:
- язык программирования Node.js;
- модули VK-Promise и Node-Fetch;
- редактор исходного кода Visual Studio Code;
- виртуальный сервер (так как не все могут держать компьютер всегда включенным).
VDS советую брать в Timeweb — здесь высокая скорость, нормальные цены, и сразу можно выбрать установку Node.js и нужной операционной системы. Я использую Ubuntu 18.04.
Настройка
Создаем группу в соцсети и приступаем к началу написания кода в редакторе.
1. Указываем вышеупомянутые модули и токен своей страницы:
const fetch = require("node-fetch"); var VK = require("VK-Promise"), vk = new VK(" "); // В кавычки вставляем токен своей страницы, который можно получить на специальном сайте, выбрав вариант VK API.
Должно получиться так:
2. Создаем проверку времени, чтобы посты выходили каждый час в ровное время:
var startScript = (new Date().getHours()+1)%24; if(new Date().getMinutes() == 0) // Таким образом указываем, что минут должно быть «0». postvk(); // Эту функцию разберем далее. loop(); function loop(){ var date = new Date(); if(date.getMinutes() == 0 && date.getHours()==startScript){ startScript = (startScript+1)%24 ; postvk(); } setTimeout(loop,30000); // Так задаем проверку раз в 30 минут. }
3. Так как мы будем использовать await, добавляем к функции async:
async function postvk(){
4. Используя любой открытый API, который отдает данные в виде JSON (это общий формат для представления значений и объектов), мы берем информацию:
let urlru = 'https://thevirustracker.com/free-api?countryTotal=RU'; // Ссылка взята из документации API, с которым мы работаем. let response = await fetch(urlru); let ru = await response.json();
5. С помощью VK-Promise делаем пост в группе:
return vk.wall.post({
6. В параметрах указываем строки и массивы, из которых будем брать данные:
owner_id: -193422280, // ID вашей группы (отрицательное число). from_group: 1, message: (`Коронавирус в РоссииnСлучаев сегодня: ${ru.countrydata[0].total_new_cases_today}nСмертей сегодня: ${ru.countrydata[0].total_new_deaths_today}nВсего случаев: ${ru.countrydata[0].total_cases}nУмерло: ${ru.countrydata[0].total_deaths}nВыздоровело: ${ru.countrydata[0].total_recovered}nСерьезных случаев: ${ru.countrydata[0].total_serious_cases}`), attachments: ('photo-193422280_457239018') // Таким образом добавляем фотографию в пост. }) }
7. Нажимаем кнопку «Сохранить» и указываем имя и расширение файла в виде “index.js”.
8. Используя данные, которые мы получили при создании сервера, подключаемся к нему по протоколу SSH и устанавливаем Node.js. Если вы заказали VDS в Timeweb и указали в дополнительном софте Node.js, то устанавливать еще раз не нужно (этот шаг пропускаем).
9. Подключаемся к серверу по протоколу SFTP, создаем папку с любым названием и копируем в нее наш скрипт.
10. Подключаемся по SSH и прописываем в консоли:
cd имя_папки // Здесь указываем название папки, которую создали на предыдущем шаге. npm i VK-Promise@0.3.2 npm i node-fetch
11. Запускаем скрипт:
node index.js
Чтобы скрипт не выключался после выхода из консоли, используем screen:
sudo apt install screen screen node index.js
Вот что получилось (пример поста):