[Из песочницы] Библиотека vk для работы с VK API на Python
Привет, Хабр! Данная статья предназначена для тех, кто хочет разобраться с основами VK API на Python, так как статей по этому поводу нет (на Хабре есть одна статья, но она уже не совсем актуальна, так как некоторые методы не работают), а на других ресурсах мне удалось найти только вопросы пользователей, но никаких гайдов и прочего.
Для работы с VK API в Python есть две популярные библиотеки: vk и vk_api. Какая из библиотек лучше я судить не возьмусь, но скажу одно: у vk документация слишком мала (поэтому разбирался практически методом тыка) и на английском языке, а у vk_api документация более развернута (поэтому писать о данной библиотеке смысла не вижу) и на русском. Для меня не главное на каком языке документация, но для некоторых пользователей это играет большое значение при выборе.
Как вы уже поняли, в данной статье рассматривается работа с библиотекой vk.
Устанавливается данная библиотека следующей стандартной командой:
pip install vk
После того, как модуль будет установлен, нам необходимо создать приложение на сайте соц.сети. Я думаю, что большинство пользователей умеет это делать, поэтому информацию по этому шагу пропускаю. Если кто не умеет, то гуглим, не стесняемся.
После регистрации приложения нам нужен будет только его ID.
Начнем с авторизации. В принципе, некоторую информацию можно получить и без ввода личных данных, что конечно же хорошо, например:
import vk
session = vk.Session()
vk_api = vk.API(session)
vk_api.users.get(user_id=1)
Таким образом мы получим фамилию, имя и id пользователя с user_id = 1. Если вам нужно получить еще какую-то информацию о пользователе, то в вызове метода нужно указать дополнительные поля, информация о которых должна быть возвращена:
vk_api.users.get(user_id=1, fields=’online, last_seen’)
Т.е. в данном случае мы получим не только информацию об имени и фамилии пользователя с id=1, но и информацию о том, находится ли пользователь сейчас на сайте (fields=«online») и время последнего посещения, а также тип устройства (fields=» last_seen»).
Действия без авторизации не предоставляют нам возможность использования VK API на полную мощь, поэтому рассмотрим авторизацию с вводом личных данных. Есть два способа: ввод логина и пароля, ввод токена. Чтобы авторизоваться с помощью токена нужно немного дополнить первый пример, а именно вот эту строку:
session = vk.Session(access_token='tocken')
Дальше все остается так же, как и было раньше, без каких-либо изменений.
Следующий способ авторизации — ввод логина и пароля. В данном случае тоже все довольно просто и понятно:
session = vk.AuthSession('id_app', 'login', 'pass')
vk_api = vk.API(session)
Как видите, ничего сложного и все настолько просто и понятно, что даже не нуждается в дополнительных комментариях.
При такой авторизации нужно указывать не только логин, пароль и ID приложения, но то, к чему мы хотим получить доступ.
Например, у нас сейчас не указан доступ к стене пользователя, поэтому при попытке добавить запись на стену мы получим ошибку:
vk_api.wall.post(message="hello")
Ошибка: vk.exceptions.VkAPIError: 15.
Для того чтобы данный код сработал корректно, при авторизации нужно указать дополнительно аргумент с названием scope и перечислить через запятую те методы, доступ к которым мы хотим получить.
session = vk.AuthSession('id_app', 'login', 'pass', scope=’wall, messages’)
vk_api = vk.API(session)
vk_api.wall.post(message="hello")
В данном примере я запрашиваю доступ к стене и сообщениям. Выполнение программы завершается корректно, а на стене появляется запись с текстом «hello». Названия методов, к которым возможно получить доступ можно посмотреть на этой странице документации.
Вот и все. Вызов методов происходит по одному шаблону:
vk_api.метод.название(параметры=значения)
Например: vk_api.messages.send(users_id=0, messages=’hello’)
Таким образом мы отправляем сообщение hello пользователю с id = 0 (т.е. самому себе). Названия параметров, которые нужно передавать при вызове какого-либо метода можно найти в документации, в описании самого метода.
Для более наглядной работы библиотеки я реализовал небольшую программку, которая следит когда пользователь зашел в ВК, а когда из него вышел (слабо верится, но может будет кому интересна). Код программы ниже и на GitHub.
import datetime
from time import sleep
import vk
def get_status(current_status, vk_api, id):
profiles = vk_api.users.get(user_id=id, fields='online, last_seen')
if (current_status == False) & (profiles[0]['online'] == 1): # если появился в сети, то выводим время
now = datetime.datetime.now()
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
print('Появился в сети в: ', now.strftime("%d-%m-%Y %H:%M"))
return True
if (current_status == True) & (profiles[0]['online'] == 0): # если был онлайн, но уже вышел, то выводим время выхода
print('Вышел из сети: ', datetime.datetime.fromtimestamp(profiles[0]['last_seen']['time']).strftime('%d-%m-%Y %H:%M'))
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
return False
return current_status
if __name__ == '__main__':
id = input("ID пользователя: ")
session = vk.Session()
vk_api = vk.API(session)
current_status = False
while(True):
current_status = get_status(current_status, vk_api, id)
sleep(60)
Данная статья предназначалась лишь для понимания основ работы с VK API на Python с использованием библиотеки VK.
Всем добра!
Комментарии (5)
9 января 2017 в 19:25
0↑
↓
Есть ещё aiovk для python 3.5+ сделан очень похожим на vk, но использует asyncio
9 января 2017 в 19:43
0↑
↓
спасибо, обязательно ознакомлюсь с данной библиотекой в ближайшее время)
9 января 2017 в 19:31
0↑
↓
Не совсем понятно, почему вы выбрали именно библиотеку vk, раз вы сами сказали, что у vk_api документация больше, и, как я понял, в репозитории pip vk не обновлялась уже больше года.
9 января 2017 в 19:36
0↑
↓
просто я не вижу смысла писать о том, о чем уже хорошо написано.
Насчет обновлений, да. Уже не первый раз так долго нет обновлений для этой библиотеки.
Выбрал, кстати, еще по одной причине: слишком уж в ней все просто) все-таки в vk_api будет больше кода и конструкции более сложные, но возможностей с ней больше. Конечно, для каких-то простых действий, мне кажется, что лучше брать как раз библиотеку vk.
9 января 2017 в 20:37
0↑
↓
Простите, но мне кажеться, что эта статья это не уровень хабра, а максимум личного блога.