Закрыть

Основное Редактировано: 28.08.2020 в 04:15

Познакомьтесь с Easy VK ближе, чтобы понять, как он устроен и как с ним работать

# Концепция работы с Easy VK

Многие возможности Easy VK ограничены до тех пор, пока вы не авторизуетесь. Чтобы не нарушался концепт log-in, в Easy VK предусмотрен алгоритм последовательной авторизации. То есть, Вы не получите объекта для работы с ВКонтакте до тех пор, пока не произойдет корректная авторизация. Таким образом, внутри Easy VK гарантирует сам для себя, и для Вас, что все компоненты будут работать внутри одной сессии, не застрагивая посторонние (если такие имеются) программы и компоненты.

Но Easy VK не ограничивает Вас в возможностях, ведь иногда авторизация вообще не нужна, чтобы работать с некоторыми компонентами API ВКонтакте, такие, как Streaming API, Callback API и некоторые методы, которые не требуют access_token'а для обращения к ним.

# Первый шаг

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

Авторизция происходит таким образом

easyvk({
  password: "ваш_пароль",
  username: "ваш_логин",
  // или по токену
  access_token: '{ВАШ_ТОКЕН_ГРУППЫ_ИЛИ_ПОЛЬЗОВАТЕЛЯ}'
}).then(vk => {

  /* Теперь Вы можете работать с объектом EasyVK (vk)
    для обращения к методам API ВКонтакте и не только */
  
  // Пример
  vk.call('messages.send', {
    peer_id: vk.session.user_id,
    message: 'Привет!'
  });

})

Это самый простой метод авторизации. Теперь я подробнее опишу как работать с функцией easyvk.

Функция easyvk принимает один единственный параметр - объект с настройками и возвращает объект <Promise>. Ниже описана каждая настройка и приведены примеры работы с ними

  • password, username *(<string>, [<string>, <number>])

    Логин и пароль для авторизации. Используются совместно при условии, что не используется настройка access_token

    {
      password: "exampleMyPassword$%!",
      username: "+79990000000" //Number(79990000000) или просто "email@exmple.com"
    }
  • access_token *(<string>)

    ! Используйте только, если не указываете логин и пароль.

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

  • reauth (<boolean>) [false]

    Если есть необходимость занова авторизоваться с новыми данными, или просто обновить токен текущей сессии, выставите этот параметр как true

  • api_v ([<number>, <string>]) [5.75]

    Версия API ВКонтакте по умолчанию.

    {
      api_v: '5.75'
    }
      
    
  • fields (<string>,<Array>) []

    Список полей, которые Вы хотите сохранить в текущую сессию после авторизации

    Во время авторизации происходит запрос на метод groups.getById, чтобы получить больше информации о группе и сохранить ее в сессию, и, кроме того, если идет авторизация пользователя, происходит запрос на метод users.get, оба этих запроса принимают единый параметр fields. Именно он и настраивается при авторизации.

    easyvk({
      password: "{ПАРОЛЬ}",
      username: "{ЛОГИН}",
      fields: "photo_200,screen_name",
      // Можно использовать, как массив: ["photo_200", "screen_name"]
    }).then(vk => {
      console.log(vk.session.photo_200) // Картинка, аватарка
    })
  • session_file ([<string>]) [/node_modules/easyvk/src/utils/.vksession]

    Путь к файлу сессии, в этот файл будет сохраняться сессия в JSON виде

    const path = require('path')
    const sessionPath = path.join(__dirname, '.session-vk')
    
    easyvk({
      session_file: sessionPath
    })
  • save_session (<boolean>) [true]

    ! Не сохраняйте сессию в пользовательские папки, которые доступны клиенту из браузера.

    Нужно ли сохранять сессию в файл.

  • clean_session (<boolean>) [false]

    Если есть необходимость отчистить файл сессии после авторизации, используйте эту настройку.

  • captchaHandlder (<Function>) [-]

    Функция для ловли ошибки капчи. Вы можете решать капчу любым удобным вам способом. Пример смотрите на странице Работа с капчей

  • platform (<string>) [android]

    Название платформы, через которую будет проходить авторизация пользователя. Если у Вас есть собственное приложение, для которого нужно произвести авторизацию пользователя по логину и паролю, воспользуйтесь настройками client_id и client_secret

    {
      platform: ["android", "ios", "windows"][0]
    }
  • client_id, client_secret ([<number>, <string>], <string>)[-]

    Если у Вас есть необходимость авторизовать пользователя по данным Вашего приложения, через Ваше приложение, укажите ID и SECRET код Вашего приложения в эти настройки

  • lang (<string>) [ru]

    Укажите язык по умолчанию, с которым будет работать Easy VK. Почти все ответы сервера ВК будут приходить на этом языке. Кроме того, сам Easy VK поддерживает мультиязычность и имеет перевод некоторых основных ошибок на два языка.

    {
      lang: ["ru", "en", "uk", "kz"][0]
    }
  • captcha_sid ([<string>, <number>])

    SID последней полученной капчи

  • captcha_key (<string>)

    Текст с последней полученной капчи (для "решения" капчи)

# Двухфакторная авторизация

! Двухфакторная авторизация не поддерживается на HTTP Клиенте, но, думаю, в скором времени это будет исправлено. В остальном все работает, как надо. И это не существенная проблема.

В EasyVK есть поддержка двухфакторной авторизации. Для того, чтобы ее пройти, необходимо сначала получить код приложения из SMS или из приложения-верификтора, а затем передать его в параметр code при авторизации пользователя.

[+] (Спойлер) - Пример кода для двухфакторной авторизации пользователя

async function main (vk) {
  // главный код вашего приложения
}

async function logInWith2Auth (params) {
  return new Promise((_2faNeed) => {

    function relogIn (_2faCode = "") {
      
      if (_2faCode) params.code = _2faCode

      easyvk(params).then(main).catch(({err}) => {

        if (!err.easyvk_error) {
          
          if (err.error_code == "need_validation") {
            _2faNeed({
              err: err,
              relogIn: relogIn
            });
          }

        }

      })
    }

    relogIn()

  })
}

logInWith2Auth({
  username: "username@exmaple.com",
  password: "...",
}).then(({err: error, relogIn}) => {

  console.log(error["2fa_sms"] || error["2fa_app"])
  
  // тут вы каким-то образом получаете код авторизации ...

  let code = "..."
  

  // занова запускаем авторизацию
  relogIn(code)

})

# База знаний

Данный раздел будет пополняться со временем.

[+] (Спойлер) - FAQ, вопросы и ответы
  • Как работает твоя документация?

    Документация Easy VK строилась на основе самописного скрипта-шаблонизатора, который был переписан много раз. В этом шаблонизаторе на данный момент есть функция шаблонизирования контента (навигация, хедеры, футеры, контент), как в PHP, но самописный. Кроме того, все ссылки, вроде <number> заменяются автоматически на корректные указатели к источникам. Помимо этого, есть поддержка разных версий (1.5.1, 2.0.0), ну и, с недавних пор, есть динамическое редактирование, шаблонизатор сам заменит все даты, которые необходимо заменить. Также шаблонизатор может заменять пути для правильной загрузки стилей и скриптов. Так, например, эту запись, на разных страницах, Вы будете видеть по-разному ../assets/css/main.css. Зайдите на эту страницу, чтобы посмотреть на эту же запись, Вы увидите различия.

    Разрабатывать с этим шаблонизатором лично мне удобно, запускаю его, и редактирую файлы, а после шаблонизатор автоматически все шаблонизирует, а я вижу готовый код. Он, конечно, создавался сразу под Easy VK, но, если Вам нужно, можете его подстроить под себя, ничего сложного.

    [+] (Спойлер) - Примечания шаблонизатора

    Файл шаблонизатора находится на github репозитории данного проекта (templator.js)

    Его можно использовть для создания собственных документаций, отталкиваясь от примера Easy VK

# Благодарности

Easy VK уже существует почти год. И мне есть, кому сказать спасибо за это.

Иван Сотников

[+] (Спойлер) - Ссылка на профиль ВК (удалю по просьбе)

За помощь с переводом внутренней документации и корректировку грамматики английского языка в коде. Огромное спасибо, что помог с этим, это огромная работа. Мне и правда следует изучить английский язык.

Эмиль Сергеев

[+] (Спойлер) - Ссылка на профиль ВК (удалю по просьбе)

За найденные проблемы библиотеки, да и просто помощь в указании на эти проблемы. Благодаря Эмилю, можно сказать, вообще началась работа над ошибками)

Вадим Марченко

[+] (Спойлер) - Ссылка на профиль ВК (удалю по просьбе)

За помощь словом и поддержкой.

Спасибо всем, кто проявлял хоть какую-то активность в сообществе Easy VK во ВКонтакте