Предыдущий пример работы с VK API имеет существенный недостаток: очень сложная авторизация ВКонтакте. Приходилось делать запрос в браузере и получать ключ доступа вручную.
Гораздо удобнее, когда авторизация происходит с помощью логина и пароля. А последующие авторизации уже происходят с помощью сохранённого ключа доступа.
Вот решил написать очень простой пример как это сделать в Python-е.
Описание задачи и пути решения.
Практически для любых действий с VK API требуется авторизация. Поэтому поставлена задача реализовать авторизацию наиболее удобным способом, а именно, с помощью логина и пароля.
Для того, чтобы не приходилось каждый раз вводить логин и пароль было решено сохранять ключ доступа в текстовом файле. Это не единственный и не самый безопасный способ, но зато самый простой, особенно для первой реализации.
Файл программы предполагается использовать использовать двумя путями: в качестве самостоятельного консольного приложения и в качестве библиотеки для последующих примеров использования VK API.
В качестве самостоятельного консольного приложения программа будет просто сообщать удалась авторизация или нет
Итак, используем следующий основной алгоритм:
- Если текстовый файл существует,
- то считываем из него ключ доступа.
- Иначе
- авторизируемся с помощью логина и пароля,
- сохраняем ключ доступа в текстовый файл.
- Используем ключ доступа для работы с VK API
Простое консольное приложение авторизация в VK на Python-е.
Для начала пошёл по самому простому пути и сделал консольное приложение.
Приложение использует общедоступную библиотеку vk. Так что, если вы её ещё не установили, то это нужно сделать:
pip3 install vk --user
Code language: Bash (bash)
Для запуска необходимо в командную строку вбить строчку:
python3 auth_vk.py
Code language: Bash (bash)
После чего приложение запросит логин и пароль и выдаст результат:
Конечно, в таком виде использовать приложение довольно бессмысленно так, как оно ничего не делает, кроме авторизации. Его предполагается использовать в качестве библиотеки. Как это делается будет в следующих примерах.
Приложение использует access_token сохранённый в текстовом файле auth_vk.ini. При первом запуске (т.е. когда файл не удаётся найти) или когда access_token не подходит, используется авторизация с помощью логина и пароля.
При последующем запуске авторизация происходит автоматически.
Будьте осторожны! Приложение создаёт вечный access_token. Не передавайте файл кому попало.Чтобы обезопасить себя, вы всегда можете отменить действующие токены и выйти из всех приложение с помощью функции ВК «Завершить все сеансы».
Разбор кода примера авторизации в ВК на Python-е.
Весь примера находится в файле ‘auth_vk.py’. Этот файл предполагается использовать в качестве модуля. В этом модуле будет всего две функции:
1) auth_vk_token() — авторизация с помощью сохранённого в файле ключа доступа (access_token);
2) auth_vk_password() — авторизация с помощью логина и пароля.
Функция auth_vk_password()
def auth_vk_password():
session = vk.AuthSession(app_id=APP_ID,
user_login=input("user_login: "),
user_password=input("user_password: "))
file = open("auth_vk.ini", 'w')
file.writelines(session.access_token)
return session
Code language: Python (python)
Данная функция использует метод ‘AuthSession‘ библиотеки vk для авторизации в ВК с помощью логина и пароля. После успешной авторизации, мы получаем ключ доступа (access_token) и сохраняем его в файле ‘auth_vk.ini’. Функция возвращает Сессию — объект библиотеки vk.
session = vk.AuthSession(app_id=APP_ID,
user_login=input("user_login: "),
user_password=input("user_password: "))
Code language: Python (python)
Метод ‘AuthSession‘ в качестве аргументов принимает ID приложения в ВК. Следующие аргументы соответственно логин и пароль от вашего аккаунта ВК. Я их получаю с помощью встроенной функции input().
Функция auth_vk_token()
def auth_vk_token():
try:
file = open("auth_vk.ini", 'r')
except IOError as e:
access_token = auth_vk_password().access_token
else:
access_token = file.readline()
session = vk.Session(access_token=access_token)
return session
Code language: Python (python)
Данная функция пытается прочесть файл ‘auth_vk.ini‘, чтобы получить ключ доступа (access_token). Если это не удаётся, то вызывается функция описанная выше (auth_vk_password()), чтобы авторизоваться с помощью логина и пароля. Функция возвращает Сессию.
Эта функция не анализирует актуальность ключа доступа.
Все исходники и описание размещены на GitHub https://github.com/deviur/vk_api_example