Api console вконтакте что это: Что за приложение vk api.console? — Хабр Q&A – Learning API | Developers | VK

описание интерфейса, примеры работы, документация

Эта статья не для программистов (они и так уже всё это знают), а для тех, кто только подходит к теме программирования. Или для тех, кто просто услышал термин VK API, и хочет понимать, что это такое.

Иллюстрация на тему VK Api: описание интерфейса, примеры работы, документация

Что такое API

Сайт Вконтакте с технической стороны представляет собой сложный комплекс программ, которые работают на серверах компании. Результат их работы отображается в браузерах или мобильных приложениях в виде знакомого всем сайта социальной сети. Пользователи могут взаимодействовать с сайтом – публиковать статьи, проводить поиск, подписываться на сообщества и так далее. Все эти действия обеспечиваются программами, которые работают совершенно незаметно для посетителей.

Этих программ (скриптов, как их называют программисты) может быть очень много, и они должны взаимодействовать друг с другом. Для этого разработаны специальные правила и протоколы, следуя которым, отдельные скрипты имеют возможность отвечать на вызовы и получать ответы от других. В результате всё огромное множество разнообразных скриптов работает как единое целое.

Совокупность этих правил и составляет единый интерфейс взаимодействия со сложной программной системой. Его называют API – Application Programming Interface.

Взаимодействие программных модулей именно через библиотеку API, это общепринятая норма. Без такого механизма строить сложные программные системы было бы просто невозможно. Ведь тогда каждый скрипт имел бы собственные правила приёма внешних команд и выдачи результатов. Взаимодействие каждых двух отдельных скриптов нужно было бы программировать отдельно, и весь проект был бы похоронен под огромной кучей разнородных правил. Разобраться в них не было бы никакой возможности. Если же в проект изначально закладывается принцип работы модулей только через API, тогда всё многообразие взаимодействий сводится к нескольким несложным правилам, которые универсальны и подходят для любого скрипта. Это очень удобно.

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

Иллюстрация на тему VK Api: описание интерфейса, примеры работы, документация

Где найти документацию по VK Api

Соцсеть в своей документации предлагает подробное описание своего API для сторонних разработчиков. Главная страница этой документации располагается вот здесь: https://vk.com/dev/manuals. Тут описаны программные объекты и их методы, перечень возвращаемых кодов и ошибок, права доступа, шаблоны запросов и так далее.

Программист, желающий разработать какое-либо приложение (подключаемое внутри ВК либо работающее на отдельном сайте) может в коде своей программы предусмотреть вызовы методов ВК, используя эти самые правила взаимодействия API. Это даст возможность обращаться к функционалу социальной сети Вконтакте. Например, можно получать список подписчиков того или иного сообщества, делать массовые рассылки сообщений, публиковать новые записи, и так далее. Возможности здесь очень широкие. Именно на возможностях API ВК основаны многие полезные приложения. Например, музыкальные плееры для проигрывания музыки из страниц друзей, разнообразные игры, счётчики «Мои гости», альтернативные мобильные клиенты, такие как VK Settings, VK Coffee, Kate Mobile и так далее.

Полноценной работе с API Вконтакте посвящены многочисленные статьи в Интернете, эта информация очень обширна. Мы здесь покажем решение только двух конкретных задач.

Примеры работы API VK на PHP

Сначала нужно создать новое приложение, которое будет подключаться к ВК. Это делается на странице по ссылке https://vk.com/apps?act=manage. Пройдя по ней, нужно кликнуть по кнопке «Создать приложение».

Иллюстрация на тему VK Api: описание интерфейса, примеры работы, документация

Далее нужно выбрать тип создаваемого приложения: встраиваемое, отдельное (stand-alone), или на сайте. Если выбираете последний вариант, то нужно будет ввести адрес сайта и базовый домен.

Иллюстрация на тему VK Api: описание интерфейса, примеры работы, документация

В любом из трёх случаев после создания появится страница новой программы, и потребуется открыть вкладку «Настройки». Там вам понадобится два параметра: ID приложения и защищённый ключ.

Иллюстрация на тему VK Api: описание интерфейса, примеры работы, документация

Теперь можно начинать программирование функции авторизации пользователя. Её код может быть таким:

Иллюстрация на тему VK Api: описание интерфейса, примеры работы, документация

Этот код выводит на экран ссылку для открытия окна авторизации пользователя.

А этот код получает универсальный токен доступа access_token:

Иллюстрация на тему VK Api: описание интерфейса, примеры работы, документация

Программисты, знакомые с языком PHP увидят, что этот код, используя параметры «ID приложения» и «Защищённый ключ», обращается к специальной утилите oauth.vk.com, которая возвращает токен доступа. Он необходим для успешной авторизации пользователя.

Изучение работы с API Вконтакте может занять немало времени, так как он предлагает много объектов и методов. Но усилия стоят того – появится возможность писать любые приложения и игры, использующие движок ВК. Причём нет никакой разницы, на каком языке вы будете это делать – PHP, Pithon, JavaScript, C# или любой другой. Программному интерфейсу это безразлично, нужно только, чтобы соблюдались правила составления и отправки запросов.

Работа с ВКонтакте Open API в локальном окружении разработчика / Habr

Как многие знают, авторы социальной сети ВКонтакте около двух месяцев назад опубликовали Open API, с помощью которого сторонние сайты получили возможность аутентифицировать пользователей с помощью их аккаунтов ВКонтакте. В документации для разработчиков рассказывается, как настроить Open API для вашего сайта на production сервере. Но в реальной жизни разработка ведется на локальных машинах с хранением кода в системе контроля версий, а обноваления на production устанавливаются периодически.

При этом появляется проблема: как тестировать Open API на локальных машинах разработчиков, если доступ к ней настроен только для production-а? В данной статье я хочу рассказать о том, как настроить локальное окружение, чтобы работать с Open API в стандартном цикле разработки. Оговорюсь, что я рассмотрю разработку под Windows с использованием технологий Microsoft, но идея может быть легко перенесена на другие платформы.


Итак, суть проблемы. Как сказано в документации, для настройки необходимо создать приложение ВКонтакте. При этом важно указать адрес вашего сайта и базовый домен:

При инициализации Open API на вашем сайте ВКонтакте сопоставит идентификатор приложения, указанный в параметре apiId и URL сайта, на котором эта инициализация производится. Если URL не совпадет с параметрами, введенными в настройках вашего приложения (см. выше), то мы получим сообщение об ошибке: “Open API security breach”. Это проблема, т.к., например, при разработке с использованием Visual Studio сайты часто тестируются локально с использованием встроенного веб-сервера по адресу http://localhost:port (где port – число, номер порта). Но при этом Open API перестает работать по указанным выше причинам – на локальных машинах ВКонтакт попадает не разрешенный адрес сайта (http://example.com), а адрес локального сайта http://localhost:port. Как решить эту проблему?

Суть решения довольно проста: необходимо настроить локальное окружение таким образом, чтобы запросы на адрес сайта, указанный в настройках приложения ВКонтакте (http://example.com), перенаправлялись не на доступный в интернете production сервер через DNS, а на локальных сайт на машине разработчика. При этом разработчик сможет тестировать Open API, т.к. теперь его локальный сайт будет иметь разрешенный с точки зрения ВКонтакте адрес http://example.com.

Настройка состоит из нескольких шагов. Прежде всего, необходимо отредактировать файл windows\system32\drivers\etc\hosts. Необходимо вставить следующую запись:

127.0.0.1 example.com

Т.о. все запросы на адрес example.com будут перенаправляться на локальную машину. Теперь надо настроить локальный веб-сервер (в нашем случае это IIS 7), чтобы запросы на адрес example.com перенаправлять на локальную копию сайта разработчика. Для этого нужно создать новый веб сайт в IIS Manager, настроить физический путь на папку с файлами сайта и указать при этом следующие привязки (bindings):

И, наконец, последний шаг в том случае, если на локальной машине используется прокси. В настройках браузера (в IE это Tools > Internet Options > Connections > LAN Settings > Advanced) необходимо добавить example.com в список исключений (Do not use proxy server for addresses beginning with).

Несколько ограничений описанного подхода: во-первых, разработчики не смогут ходить на production сайт со своих машин и на локальный сайт одновременно. Для того чтобы зати на production им потребуется поменять свой файл hosts (убрать указанную выше запись). И во-вторых, они будут вынуждены использовать IIS в качестве веб-сервера при разработке, отказавшись от встроенного веб-сервера Visual Studio. Но как показывает практика последнее ограничение – скорее плюс, т.к. окружение разработчика будет ближе к реальному окружению на production сервере.

Об одном недостатке VK API вслух / Habr

Доброго времени суток, уважаемые жители Хабра!

Начну я с того, что, в моем понимании, Хабр — это чудовищное по своей мощности оружие. Не в смысле того, что им можно кого-то убить. Конечно, нет. Просто он дает самым обычным разработчикам возможность поделиться своими мыслями с потрясающе широкой аудиторией. Причем не имеет особого значения, о чем идет речь. Будь то бережно создаваемый в последние полгода “на коленке” собственный проект или новость о новинках от Google и Apple — все равно. Вас услышат, потому что здесь все равны перед кармой и рейтингом, у каждого есть право слова и голоса. Демократия во всей ее красоте да и только. Но, как и любым оружием, Хабром нужно пользоваться крайне аккуратно. Иначе отдача замучает =)

Я долго подбирал тему, достойную того, чтобы испытать всю силу хабравлияния, и вот, кажется, нашел. Давайте поговорим об API всем известной социальной сети ВКонтакте и о том, что в нем мне кажется нелогичным или, быть может, слегка рудиментарным, подлежащим пересмотру и изменению? Ниже я обязательно расскажу, как и почему пришел к такой мысли.

Внимание! Желающие обсудить последние события из жизни Павла Дурова, ФСБ или знакомых школьников! Прошу вас, ради всего ценного, что есть в вашей жизни, не нажимайте на ссылку “Читать далее”! Я бы очень хотел, чтобы этот пост достиг своей цели, а скандальность — последнее, что для этого нужно.

Социальные сети. Понятие, вошедшее в нашу жизнь так же плотно, как смартфон или компьютер. Миллионы пользователей. Гигабайты информации. Неисчислимое множество моделей применения. Социальные сети особенно ценны тем, что позволяют разработчикам постучаться к своим пользователям прямо в дверь: «Эй, привет! Посмотри какое классное приложение! Оно изменит твою жизнь к лучшему. Я обещаю!». Это потрясающе! В конце концов мы ведь именно для этого пишем программы? Чтобы делать мир лучше? Нет, конечно, нам нравится и то, что за нашу работу неплохо платят. Но душу греют не суммы на счету, а цифры на счетчике посещений.

Когда я впервые познакомился с API Вконтакте, мне показалось, что лучшей находки в моей карьере еще не было. Сколько невероятных идей пришло ко мне в голову с первых же строчек документации! Конечно, они не идут ни в какое сравнение по своей креативности, например, с вот этой. Но все же =) Тогда я сделал то, что сделал бы любой из вас на моем месте: начал увлеченно программировать. Однако будущее оказалось не таким безоблачным, как мне бы хотелось. За простым и изящным REST-интерфейсом крылись суровые и далеко не всегда мне понятные правила и ограничения.

Все методы API Вконтакте делятся на два больших класса: обычные и расширенные. Раньше это было видно прямо из документации: описания методов из разных классов находились в разных разделах, — но в результате последнего обновления различие визуально сгладилось. Теперь у тех методов, что раньше назывались расширенными, просто указано в описании, что они доступны исключительно для standalone-приложений: мобильных или десктопных. А если вы решили написать глубоко завязанное на ВК веб-приложение, которому требуется работать, скажем, со стеной или сообщениями пользователя? Тут вас поджидает разочарование.

Для работы с большинством методов VK API приложению потребуется токен. В общем случае процесс его получения выглядит так:

  1. Приложение отправлят пользователя на AUTHORIZE_URL, в параметрах указав CALLBACK_URL;
  2. Вконтакте переадресует пользователя на страницу, где он подтверждает права доступа приложения;
  3. Вконтакте переадресует пользователя на CALLBACK_URL, в параметрах передавая токен и срок его жизни;
  4. Приложение, получив запрос на CALLBACK_URL, понимает, что это от ВК, вытаскивает токен и запоминает его.

Однако, для того, чтобы получить токен, обеспечивающий доступ к расширенным методам, в качестве callback-адреса вам придется указать https://oauth.vk.com/blank.html. Таково требование API. Поскольку мобильные/декстопные приложения, по задумке авторов, используют для получения токена встроенный браузер (имеется в виду, например, компонент webkit), то у них проблем нет: отловил редирект, извлек информацию о пользователе и токен, сохранил все это дело и радуйся. У веб-приложений так, очевидно, не получится.

У меня возникает логичный вопрос: зачем? Почему было введено такое ограничение и почему оно существует до сих пор? Могу предположить, что доступность вызова произвольных методов с десктопов и мобильников имеет под собой простое обоснование: это толкает разработчиков на создание альтернативных клиентов и всевозможных мессенджеров. Так почему бы не убрать этот запрет для веба? К чему ставить лишние палки в колеса фантазии разработчиков? Отнюдь не все удобные и хорошие идеи можно и нужно поставлять как standalone, согласитесь? На волне повсеместного «ухода в облака» и создания веб-приложений, обладающих потрясающе широкой функциональностью и удобным UI на HTML5, это ограничение выглядит как-то… неудобно.

С вопросом: «А нельзя ли как-то все таки получить токен с нужными привелегиями, если я честный парень и клятвенно обещаю не рассылать спам, не создавать ботов и молиться правильным богам?», — я и обратился в службу поддержки Вконтакте. И мне, — тут барабанная дробь и виртуальный плюсик в карму ВК, — ответили, причем довольно быстро и вежливо.

Содержание ответаДобрый день!

Мне очень жаль, но исключений мы не делаем.

Доступ к личным сообщениям с внешнего сайта нельзя получить ни при каких условиях.
Часть методов для работы с фотографиями в веб вполне работает, постить записи на стену можно с использованием окна подтверждения.

С уважением,
Команда поддержки ВКонтакте.

Тут бы, казалось, мне пойти курить и думать, какой бы хак посуровее вкрутить, чтобы таки заполучить нужный мне токен. Так бы и сделал, но неожиданно на меня снизошел дзен. Я решил попытаться что-то изменить. Проблема состоит в том, что API — это прежде всего интерфейс, предназначенный для сторонних разработчиков. Им пользуюсь не только я, но и тысячи других программистов, ежедневно клепающих всякие хаки и применяющих грязные трюки, чтобы решить очень простую и логичную задачу, принеся счастье и улыбки в дом конечного пользователя. Логично предположить, что эти самые разработчики должны иметь возможность как-то влиять на эволюцию инструмента, которым им предлагается пользоваться. Имеющееся сейчас разграничение на обычные и расширенные методы создает ощущение… ну… как от кофейного автомата, который почему-то не умеет выдавать сдачу: вроде кофе и можно купить, но придется всем отделом мелочь собирать.

Надеюсь, что мой скромный пост сподвигнет ВК как минимум к диалогу с разработчиками, а, в идеальном случае, и к снятию ограничений с веб-приложений. Ребята, искусственное ограничение возможностей — это и правда очень и очень неудобно.

UPD. Народ, кто считает, что все ок и так и должно быть или ставит минусы статье, отпишитесь в комментариях — почему? Правда интересно. Это ведь порядком ограничивает вашу свободу при разработке.

Как развлечь себя с помощью vk api / Habr

В какой-то момент моей жизни я понял, что для счастья мне нужно создать 10 страниц-копий самого себя во Вконтакте и добавиться одновременно всеми в друзья к людям из френдлиста моей основной страницы. Для подробностей реализации идеи — прошу под кат.



  • Сделать 10 страниц во Вконтакте
  • Скопировать аватар c основной страницы
  • Скопировать все посты с основной страницы
  • Скопировать все видео с основной страницы
  • Добавиться во все группы основной страницы
  • Сделать полный граф дружболайков среди ботов (лайкнуть каждую запись и добавить каждого бота в друзья)
  • Добавиться каждому из 80 людей из заранее составленного списка в друзья


Для создания страниц я использовал сервис sms-reg.com, подробнее о сервисах приема SMS хорошо написано тут.

Регистрируем все 10 страниц и записываем их логины/пароли в файл accounts.json (где id — id регистрируемой страницы, а zero_id — id нашей основной страницы):

{
  "zero_id": "21102****",
  "accounts": [
    {
      "phone": "7985002****",
      "password": "tTod********",
      "id": 53980****
    },
    {
      "phone": "7985317****",
      "password": "tglh********",
      "id": 53980****
    },

    ...

    {
      "phone": "7916033****",
      "password": "ZsRq********",
      "id": 54038****
    }
  ]
}


Я буду работать с библиотекой vk_api.
pip install vk_api --user

Создадим файл bots.py, он нам пригодится для остальных скриптов:
import json
import vk
import vk_api
from captcha import captcha_handler

with open('accounts.json', 'r') as file:
	data = json.loads(file.read())
	accounts = data['accounts']
	zero_id = int(data['zero_id'])

vk_apis = []
def init_apis():
	current_id = 0
	for account in accounts:
		vk_session = vk_api.VkApi(account['phone'], account['password'], captcha_handler=captcha_handler)
		vk_session.auth()
		vk_apis.append(vk_session.get_api())
		print('account', current_id, 'successfully inited')
		current_id += 1
init_apis()

Он читает accounts.json и инициализирует api для каждого из аккаунтов.

Копирование аватара

def change_photo(vk):
	upload_url = vk.photos.getOwnerPhotoUploadServer()['upload_url']
	answer = json.loads(requests.post(upload_url, files={'photo': open('avatar.jpg', 'rb')}).text)
	vk.photos.saveOwnerPhoto(photo=answer['photo'], server=answer['server'], hash=answer['hash'])

counter = 0
for vk in vk_apis:
	change_photo(vk)
	print(counter, 'done')
	counter += 1

Копирование видео

videos = default_vk.video.get(owner_id=zero_id, count=100)

counter = 0
for vk in vk_apis:
	for video in videos['items']:
		vk.video.add(video_id=video['id'], owner_id=video['owner_id'])


Добавление в группы

from time import sleep
from bots import vk_apis, zero_id, accounts, default_vk

groups = default_vk.groups.get(user_id=zero_id, count=100)

counter = 0
for vk in vk_apis:
	for group in groups['items']:
		print('add to', group)
		vk.groups.join(group_id=group)
	print(counter)
	counter += 1

Создание полного графа друзей


counter = 0
for vk, account in zip(vk_apis, accounts):
	for friend in accounts:
		if friend['id'] == account['id']:
			continue
		vk.friends.add(user_id=friend['id'], captcha_handler=captcha_handler)
		print(counter, friend['id'], account['id'])
		counter += 1
		sleep(1)

Создание полного графа лайков


counter = 0
for vk, account in zip(vk_apis, accounts):
	for friend in accounts:
		if friend['id'] != account['id']:
			continue
		print(counter, friend['id'], account['id'])
		for post in vk.wall.get(owner_id=friend['id'])['items']:
			flag = True
			while flag:
				try: #иногда скрипт падал из-за большого количества запросов в секунду
					vk.likes.add(type='post', owner_id=post['owner_id'], item_id=post['id'])
					flag = False
				except:
					print('failed on', counter)
					sleep(10)
					pass
		counter += 1

Добавление в друзья


создаем файл friends, в котором в каждой сточке пишем
id_человека #ник_человека (для себя)

Вконтакте позволяет добавить примерно 80 человек в день.
friends_str = ''
with open('friends', 'r') as file:
	friends_str = file.read()

friends = [{'id': x.split(' #')[0], 'name': x.split(' #')[1]} for x in friends_str.split('\n')]

ids_ = ([x['id'] for x in (default_vk.users.get(user_ids=[x['id'] for x in friends]))])

for friend, id_ in zip(friends, ids_):
	print(friend['name'])
	print(friend)
	for vk in vk_apis:
		flag = True
		while flag:
			try:
				vk.friends.add(user_id=int(id_))
				flag = False
			except:
				print('error')
				sleep(10)

Обход капчи


Внимательный читатель уже увидел строчку
from captcha import captcha_handler

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

def uncapcha(url):
	imager = requests.get(url)
	r = requests.post('http://rucaptcha.com/in.php', data = {'method': 'base64', 'key': RUCAPTCHA_KEY, 'body': base64.b64encode(imager.content)})
	if (r.text[:3] != 'OK|'):
		print('captcha failed')
		return -1
	capid = r.text[3:]
	sleep(5)
	capanswer = requests.post('http://rucaptcha.com/res.php', data = {'key': RUCAPTCHA_KEY, 'id':capid, 'action':'get'}).text
	if (capanswer[:3] != 'OK|'):
		print('captcha failed')
		return -1
	return capanswer[3:]


Вот несколько скриншотов того, что мне прислали люди
Скрытый текст
github
Главный вопрос остается открытым — зачем я это сделал? Понятия не имею.

Captcha needed? — Хабр Q&A

TL;DR Лимиты на кол-во запросов с сервера не превышали, но ошибка с капчей появляется постоянно. Кто-нибудь знает как с этим бороться?

Добрый день хабравчане!

В нашем приложении есть, допустим, около 1000 пользователей, у каждого из которых есть свой offline токен для работы с VK API. Приложение выполняется по крону, используя для запросов разные токены пользователей.

Как сказано в FAQ, действуют ограничения на кол-во запросов с сервера:

  • 3 запроса в секунду от каждого уникального пользователя
  • если приложение установило меньше 10 000 человек, то можно совершать 5 запросов в секунду с одного сервера

Данные ограничения нами выполняются даже с запасом: 3 запроса в секунду с разными пользователями. Приложение работает на выделенном IP, других запросов с данного IP не делается.

Суть проблемы — после неопределённого количества запросов начинает постоянно вываливаться ошибка:

Code: 14; Message: Captcha needed

Естественно, если ввести капчу как указано здесь, то несколько запросов пройдет без капчи, а затем ошибка повторится вновь. Т.к. наше приложение работает в offline по крону, то такое положение дел нас совершенно не устраивает.

Пробовали обращаться в ТП:
Обращение 1

Александр Скутин

В последнее время постоянно вылетает ошибка Captcha needed при обращении к API. Как это можно обойти? Какие есть реальные ограничения, и относительно чего они действуют (токена или ip)? Спасибо.


Агент поддержки #519

Здравствуйте, Александр!

Попробуйте, пожалуйста, для начала воспользоваться методом обработки, указанным на странице документации vk.com/dev/auth_direct.

Всегда с Вами,

Команда поддержки ВКонтакте.


Обращение 2
Александр Скутин

Постоянно возникает ошибка Captcha needed, какие действуют реальные ограничения на запросы?


Агент поддержки #720

Здравствуйте, Александр!

Каких-то конкретных ограничений мы назвать не можем. Такая ошибка начинает возвращаться, когда действие происходит слишком часто — см. vk.com/dev/captcha_error

С Уважением,

Команда поддержки ВКонтакте.

Внимание, вопрос…

  1. Зачем ТП рекомендует auth_direct, если в документации черным по белому написано, что от капчи это не спасает? Кто-нибудь пробовал данный способ, может другие ограничения на запросы? В таком случае, чтобы их не превысить, где цифры?
  2. Может кто уже боролся с такой проблемой и знает пуленепробиваемый способ выполнять запросы к API без опасности быть заблокированным?
  3. Если ничего не поможет… Кто-нибудь парсил капчу VK? Базами образов или даже алгоритмами поделитесь? 🙂

Буду благодарен за любую частичку ценной информации…

P.S. Тех. поддержка VK отвечает сутками и совершенно не информативно. Печаль, беда, бардак в документации…

UPD1:
Появилась информация, что появление капчи зависит от пользователей вашего приложения. Насколько это близко к истине — неизвестно.

Библиотека vk для работы с VK API на Python / Habr


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

В данном примере я запрашиваю доступ к стене и сообщениям. Выполнение программы завершается корректно, а на стене появляется запись с текстом ‘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 (not current_status) and (profiles[0]['online']):  # если появился в сети, то выводим время
        now = datetime.datetime.now()
        print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
        print('Появился в сети в: ', now.strftime("%d-%m-%Y %H:%M"))
        return True
    if (current_status) and (not profiles[0]['online']):  # если был онлайн, но уже вышел, то выводим время выхода
        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.

Всем добра!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *