0.0.4 • Published 4 years ago

storybot v0.0.4

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

storybot

Бот, который смотрит истории ВКонтакте

API

Бот предоставляет JavaScript API для работы с ним

О чем речь

Если вы не в теме, то поясню, зачем все это нужно.

Когда-то давно, в 2018 году буквально через 3 дня после моего др, я написал статью на Пикабу о том, как воспользовался идеей маркетологов для наращивания статистики посещения страницы ВКонтакте. Метод заключаетя в том, что вы создаете бота, который будет самостоятельно просматривать истории пользователей ВКонтакте, а они в свою очередь будут от интереса "who are you, man?" посещать вашу страницу.

Тогда у меня получились неплохие цифры по посещаемости, охват вырос с 50 посещений до 28 тысяч. Вы можете почитать как это было в этой статье (https://pikabu.ru/story/o_tom_kak_ya_ispolzoval_prosmotryi_storis_dlya_piara_v_vk_6123084)

Бот из статьи уже давно не работает и его поддержка не осуществляется, но тем не менее, сейчас вы находитесь на странице практически того же самого бота, но во много раз улучшенного и продуманного. Это API - это версия для разработчиков, которым хочется поэкспериментировать с данным функционалом. Он более стабильный, постоянно поддерживается и обновляется. Работает на sqlite3, в отличие от прошлой версии (MySQL, Mongo DB), а также оптимизирован под лимиты ВКонтакте так, чтобы не возникало неожиданных сбоев и проблем.

Софт полностью бесплатный, поэтому вы можете его использовать не покупая никаких дополнений и обновлений. Если вам нужна настройка, найдите фрилансера, который это сможет сделать, а я этим не занимаюсь. (Это не значит, что бот не обновляется, напротив, обновления выходят по мере поступления новых проблем и запросов от разработчиков)

Первый шаг

const { Bot, Viewer, Collector} = require('storybot')

let BotController = new Bot({
  database: {
    filename: __dirname + '/storybot.sqlite'
  }
})

let KirillViewer = new Viewer({
  account: {
    username: 'ИМЯ_ПОЛЬЗОВАТЕЛЯ_ВК',
    password: 'ПАРОЛЬ_ВК'
  }
})

let KirillCollector = new Collector({
  tokens: ['токен_пользователя_1', ...['токен_пользователя_n']]
})


BotController.addBot({
  viewers: [KirillViewer],
  collector: KirillCollector,
  groupIds: [1,2],
  name: 'Bot1'
})


BotController.startBots().then(() => {
  console.log('Все боты запущены')
})

Collector

Collector - это один или несколько аккаунтов, которые будут собирать список доступных историй у участников групп, которые указаны в настройках бота или коллектора

Так как storybot написан с помощью EasyVK, то он работает по его правилам (сохранение сессий, загрузка по ним занова)

В боте коллектор может быть только 1. Но аккаунто в нем может быть минимум 1 и максимум - количество доступных для вас разных токенов пользователей. Для того, чтобы коллектор запустился и работал, ему необходимо дать второй дополнительный токен со второго аккаунта! Это важно, потому что иначе вы будете упираться в лимиты и скорость коллектора будет значительно ниже, чем могла бы быть.

Токены коллектора используются в максимальном режиме. Это значит, что чем больше токенов - тем быстрее коллектор собирает истории пользователей.

Токены коллектора могут быть только токены, которые имеют доступ к следующим методам API ВКонтакте: stories.get, groups.getMembers, execute. Рекомендуется использовать только токены пользователя с максимальными правами доступа. На токенах групп бот не тестировался. Но по докам ВК, группы могут иметь доступ к методу stories.get

const { Collector } = require('storybot')

let myCollector = new Collector({
  fileIds: [__dirname + '/groups.data'],
  tokens: ['USER_TOKEN'], // НЕ МОЖЕТ БЫТЬ ПУСТЫМ
  target: {
    sex: 1,
    users: [1,2,3,4],
    files: [__dirname + '/users.ids']
  }
})

Настройки Collector'а

  • fileIds - массив путей к файлам, в которых хранятся идентификаторы групп, где каждый идентификатор - новая строка (пример файла)
179963918
57846937
29534144
  • tokens - массив токенов, между которыми коллектор автоматически будет переключаться, чтобы быстрее искать истории и быстрее находить пользователей. Коллектор должен уложиться в лимиты, которые устанавливает ВКонтакте на количество запросов в минуту. В зависимости от количества токенов, будет использоваться тот, на котором скорее всего, сейчас нет ограничения. Если токен только один, то коллектор подстроится под лимиты и будет работать на максимально доступной скорости без ошибок
tokens: ['token1', 'token2', 'token3', ...['tokenN']]
  • easyvkDebug - параметр для продвинутых пользователей API - объект Debugger Easy VK для работы с дебагом запросов
  • target - настройки таргета для более точного поиска аудитории
  • target.sex - пол аудитории, в которой нужно искать истории 1 - женский пол, 2 - мужской пол
  • target.users[] - массив идентифекаторов пользователей, у которых нужно искать истории
  • target.files[] - массив путей к файлам, где хранятся идентифекатора пользователей, у которых нужно искать истории (соединяются вместе с target.users[])
  • collectFromGroups - нужно ли в данный момент искать участников в группах
  • easyvkParams - объект с настройками easyvk
new Collector({
  easyvkParams: {
    proxy: 'http://user:password@server:port'
  }
})

Или без пароля и логина (для socks тоже можно использовать логин и пароль)

new Collector({
  easyvkParams: {
    proxy: 'socks5://150.129.54.111:6667'
  }
})

Viewer

Viewer - это тот, кто просматривает истории. Виюверов может быть подключено сразу много, а также, их можно настроить по правилам авторизации easyvk (указать прокси, user-agent и другие параметры)

const { Viewer } = require('storybot')


let Liza = new Viewer({
  account: {
    username: 'liza-iza@gmailinbox.com',
    password: 'AzaRaLize45067!'
  },
  reauth: false,
  proxy: 'socks5://150.129.54.111:6667',
  userAgent: 'MOT-V360v/08.B7.58R MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1',
  captchaKey: 'key',
  captchaSid: 34040402,
  limitStoriesForUser: 1,
  startFromEnd: false
});

Настройка Viwer'а

  • account - объект настройки аккаунта (username, password)
  • reauth - нужно ли сделать авторизацию с чистого листа
  • proxy - адрес прокси сервера (SOCKS, http(s))
  • userAgent - User-Agent для запросов (header)
  • captchaKey - текст с полседней полученной капчи
  • captchaSid - ID последней полученной капчи
  • code - Код для двухфакторной аутентификации
  • access_token - забудьте об авторизации через HTTP клиент. С новым способом можно просто вставить access_token с максимальными правами, полученным на стороне клиента приложения ВКонтакте
  • easyvkDebug - параметр для продвинутых пользователей API - объект Debugger Easy VK для работы с дебагом запросов
  • limitStoriesForUser - максимальное кол-во историй, которое будет просматриваться у одного пользователя (их может быть и 50 сразу, но просМотрит он только limitStoriesForUser историй)
  • startFromEnd - нужно ли смотреть истории с конца. Конец - это самая последняя выложенная история пользователем

Bot (бот)

Bot - это контроллер всего: виюверов и коллектора Его настройки тоже возможны. В нем же настраивается список идентификаторов групп. Сам объект Bot - это не бот. Это комната для ботов, в которой они работают под руководством начальника (Bot'а)

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

const { Bot } = require('storybot')

let botController = new Bot({
  command: (controller, id, command, data) => {
    console.log(controller, id, command, data)
  },
  log: (...args) => {
    console.log(...args)
  },
  database: {
    filename: __dirname + '/storybot.sqlite'
  }
})

// Список групп
let groups = [];

// Добавляем бота
botController.addBot({
  viewers: [...[Liza]], // Обратите, пожалуйста, внимание на код из предыдущих частей документации
  colletor: myCollector,
  groupIds: [1, 2, 3, 4, ...[groups]],
  name: 'Bot1' // Уникальное имя бота (придумайте сами)
})

// Запускаем ботов

botController.startBots().then(() => {
  console.log('Все боты запущены!')
})

Настройка Bot'а

  • command - функция, которая будет прослушивать внутренние команды виюверов и коллектора. Может помочь при создании софта на основе данного API
command: (from, id, command, ...data) => {
  // from - название инициализатора команды (viewer,collector)
  // id - ID инициализатора (для виювера ID аккаунта, а для коллектора - 0)
  // command - текстовое обозначение команды
  // data[] - данные, которые пришли вместе с командой
}
  • log - функция, которая будет ловить все console.log() бота. Может помочь, чтобы вести логи программы отдельно
  • database - объект настроек для файла базы данных sqlite, вы можете использовать настройки из модуля sqlite3, опираясь на рекомендации модуля knex
new Bot({
  database: {
    filename: __dirname + '/storybot.sqlite'
  }
})

Bot.stop()

Метод отсанавливает работу всех ботов

Простое получение токена (Утилиты)

Для того, чтобы получить именно тот токен, который 100% подойдет для работы коллекторов, необходимо использовать данные для атворизации официальных клиентов. Сделать такое через стандартную oAuth авторизацию не получится, потому что oAuth никогда не дает действительно полный доступ даже к тому, к чему были выданы разрешения. Для получения максимального доступа необходимо использовать клиентскую атворизацию через официальные приложения. Поэтому это не так уж и просто)

Но в storybot я сделал этот момент упрощенным. Теперь можно легко получить подобный токен, воспользовавшись утилитами бота.

Utils.getToken(username, password, tokenPath, output=true)

Эта утилита получает токен. Автоматически запрашивает ручной ввод в консоли капчи, если она возникает, а также код для двухфакторной аутентификации, если он необходим. В конце ничего не возвращает, работает только с output, выводит токен в окно консоли и в указанный файл

  • username - логин
  • password - пароль
  • tokenPath - путь, куда сохранится файл с токеном
  • output - нужно ли выводить токен в консоль и в файл (если нет, то используется Promise)
const {
  Utils
} = require('storybot');


async function main () {
  return Utils.getToken('liza-iza@gmailinbox.com', 'AzaRaLize45067!', 'C:/Users/.token')
}

main();

Версия без вывода в консоль

const {
  Utils
} = require('storybot');


async function main () {
  return Utils.getToken('liza-iza@gmailinbox.com', 'AzaRaLize45067!', 'C:/Users/.token', false)
  .then(token => console.log(token));
}

main();

Важности важные

Для того, чтобы бот работал, вам больше не нужно скачивать Mongo DB :) ! По всем вопросам работы софта, обащайтесь в личку https://vk.com/kinock. Постараюсь помочь в настройке

Желаю вам успехов.

0.0.4

4 years ago

0.0.34

5 years ago

0.0.33

5 years ago

0.0.32

5 years ago

0.0.31

5 years ago

0.0.3

5 years ago

0.0.23

5 years ago

0.0.22

5 years ago

0.0.21

5 years ago

0.0.2

5 years ago

0.0.11

5 years ago

0.0.1

5 years ago

1.0.0

6 years ago