Основное Редактировано: 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)
})
# База знаний
Данный раздел будет пополняться со временем.
-
Как работает твоя документация?
Документация 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 во ВКонтакте