Бібліотека vk для роботи з VK API на Python

image
Привіт, Хабр! Дана стаття призначена для тих, хто хоче розібратися з основами 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)

Як бачите, нічого складного і все настільки просто і зрозуміло, що навіть не потребує додаткових коментарів.

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

Наприклад, у нас зараз не вказано доступ до стіни користувача, тому при спробі додати запис на стіну ми отримаємо помилку:

vk_api.wall.post(message="привіт")
<b>Помилка: vk.exceptions.VkAPIError: 15.</b>

Для того щоб даний код спрацював коректно, при авторизації потрібно вказати додатково аргумент з назвою scope і перерахувати через кому ті методи, доступ до яких ми хочемо отримати.

session = vk.AuthSession('id_app', 'login', 'pass', scope='wall, messages')
vk_api = vk.API(session)
vk_api.wall.post(message="привіт")

У даному прикладі я звертаюсь доступ до стіни і повідомленнями. Виконання програми завершується коректно, а на стіні з'являється запис з текстом 'hello'. Назви методів, до яких можливо отримати доступ можна подивитися на цій сторінці документації.

От і все. Виклик методів відбувається за одним шаблоном:

vk_api.метод.назва(параметри=значення)
Наприклад: vk_api.messages.send(users_id=0, messages='hello')

Таким чином ми відправляємо повідомлення hello користувача з id = 0 (тобто самому собі). Назви параметрів, які потрібно передавати при виклику будь-якого методу можна знайти в документації, в описі самого методу.

Для більш наочної роботи бібліотеки я реалізував невелику програмку, яка стежить коли користувач зайшов у ВК, а коли з нього вийшов (слабо віриться, але може буде комусь цікава). Код програми нижче і на GitHub.

Приклад програми з використанням бібліотеки vk
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.

Всім добра!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.