Что такое long poll api Вконтакте

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

Ну прям совсем для новичков

Как установить Python?
Скачиваем, запускаем установщик.
Куда писать этот код?
В текстовый документ с расширением .py
А чем писать?
Да хоть блокнотом. Лично я рекомендую Notepad++
А как запускать?
Через командную строку.
python путь до папки с файломфайл.py

Как оно работает?


Всё очень просто, в vk api есть такая штука, называется longpool работает она так:

Long Polling — это технология, которая позволяет получать данные о новых событиях с помощью «длинных запросов». Сервер получает запрос, но отправляет ответ на него не сразу, а лишь тогда, когда произойдёт какое-либо событие (например, придёт новое сообщение), либо истечёт заданное время ожидания.

Говоря русским языком, мы отправляем на сервер запрос, а он в свою очередь тыкает вконтакте если там произойдёт что либо, например, нам придёт сообщение он бежит и говорит об этом нам. От этого и будем плясать.

Webhook и Long Polling! Чем отличаются? Что лучше использовать?

Техническая реализация

Для начала нам нужно доказать вконтакту что мы — это мы, а не кто-либо ещё. Делается это очень просто.

import vk_api import requests session = requests.Session() login, password = ‘Ваш логин, email или телефон’, ‘Ваш пароль’ vk_session = vk_api.VkApi(login, password) try: vk_session.auth(token_only=True) except vk_api.AuthError as error_msg: print(error_msg) return

Замечание, ребята из ВК рекомендуют использовать в качестве логина номер телефона т.к. иначе можно нарваться на проверку антиробот, ту самую где тебя просят ввести недостающие цифры из номера телефона.

Если бот будет сидеть в группе то авторизация выглядит по другому.

import requests import vk_api vk_session = vk_api.VkApi(token=’токен с доступом к сообщениям и фото’)

Еще по теме:  Можно ли стикеры в ВК перенести на другую страницу

— Что такое токен?
— Такая штука из циферок и буковок которую нужно получить в настройках группы. Для этого достаточно открыть раздел «Управление сообществом» («Управление страницей», если у Вас публичная страница), выбрать вкладку «Работа с API» и нажать «Создать ключ доступа».

Теперь вызовем longpool.

from vk_api.longpoll import VkLongPoll, VkEventType for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #Слушаем longpoll, если пришло сообщение то: if event.text == ‘Первый вариант фразы’ or event.text == ‘Второй вариант фразы’: #Если написали заданную фразу if event.from_user: #Если написали в ЛС vk.messages.send( #Отправляем сообщение user_id=event.user_id, message=’Ваш текст’ ) elif event.from_chat: #Если написали в Беседе vk.messages.send( #Отправляем собщение chat_id=event.chat_id, message=’Ваш текст’ )

В сообщениях может быть не только заданный вами текст. Например:

import datetime vk.messages.send( user_id=event.user_id, message=’Московское время: ‘ + str(now.strftime(«%H:%M»)) )

А ещё можно прикреплять картинки.

Что такое longpoll, bot longpoll и чем они отличаются? vk_api Python3


attachments = [] from vk_api import VkUpload upload = VkUpload(vk_session) image_url = ‘Ссылка на картинку’ image = session.get(image_url, stream=True) photo = upload.photo_messages(photos=image.raw)[0] attachments.append( ‘photo<>_<>’.format(photo[‘owner_id’], photo[‘id’]) ) vk.messages.send( user_id=event.user_id, attachment=’,’.join(attachments), message=’Ваш текст’ )

Можно придумать ещё много всего интересного, но тут подумайте сами, а я лишь скажу что: ссылки можно делить на части. Например:

image_url = ‘http://сайт.com/uploads/’ + event.text + ‘.png’

и никто не запретил нам получать ответ от пользователя на примере Википедии:

import wikipedia #Модуль Википедии wikipedia.set_lang(«RU») if event.text == ‘Википедия’ or event.text == ‘Вики’ or event.text == ‘википедия’ or event.text == ‘вики’ or event.text == ‘Wikipedia’ or event.text == ‘wikipedia’ or event.text == ‘Wiki’ or event.text == ‘wiki’: #если нам пришло сообщение с текстом Википедия или Вики или . или wiki if event.from_user: #Если написали в KC vk.messages.send( user_id=event.user_id, message=’Введите запрос’ #Пишем «Введите запрос» ) elif event.from_chat: #Если написали в беседе vk.messages.send( chat_id=event.chat_id, message=’Введите запрос’ #Пишем «Введите запрос» ) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #Пинаем longpoll if event.from_user: vk.messages.send( #Если написали в ЛС user_id=event.user_id, message=’Вот что я нашёл: n’ + str(wikipedia.summary(event.text)) #Пишем «Вот что я нашёл» И то что вернёт нам api Wikipedia по запросу текста сообщения ) break #выходим из цикла elif event.from_chat: #Если написали в беседе vk.messages.send( chat_id=event.chat_id, message=’Вот что я нашёл: n’ + str(wikipedia.summary(event.text)) #Пишем «Вот что я нашёл» И то что вернёт нам api Wikipedia по запросу текста сообщения ) break #выходим из цикла continue

Еще по теме:  Как скинуть ссылку на свой аккаунт в ВК

Ссылки на примеры и документацию

На этом я с вами попрощаюсь. Хорошего кодинга.

Источник: news.myseldon.com

Bots Long Poll API и PHP SDK ВКонтакте

Bots Long Poll API ВКонтакте и PHP SDK

Информация о материале Родительская категория: Социальные сети Категория: VK (ВКонтакте)

Сегодня мы порадуем Вас дважды. =D

Bots Long Poll API ВКонтакте

Bots Long Poll API — новый подход к работе с событиями в Вашем сообществе. Bots Long Poll поддерживает тот же богатый набор событий, что и Callback API, но в отличие от него, очередь событий хранится на нашей стороне, а Вы забираете их с помощью long polling-запросов. Проще говоря, это все события из Callback API, которые можно получать, как в обычном Long Poll для сообщений.

Включить Bots Long Poll API можно в настройках Вашего сообщества. Рекомендуем прочитать полную документацию, прежде чем начать.

PHP SDK ВКонтакте

Без лишних слов. Долгожданная официальная библиотека для работы с API ВКонтакте на Вашем и нашем любимом языке программирования 😉

SDK поддерживает авторизацию по схемам Implicit и Authorization Code Flow, полноценную работу с методами API, а также работу с событиями с помощью Callback API и Long Poll. Документация ждёт Вас здесь.

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Выберите, то, чем пользуетесь чаще всего:

Источник: mb4.ru

Настройка

Зайдите в

Нажмите

В окне укажите

Нажмите «Создать». Не забудьте сохранить ключ.

В разделе управления зайдите в

В разделе управления зайдите в

И включите все

В разделе Настройки — Работа с API переключите Long Poll API с выключен на включен. Проверьте, что выпадающем меню Версия API выбрана максимально доступная версия (на картинке 5.50, текущая в районе 5.120):

Еще по теме:  Как стать первым Вконтакте

В вкладке Long Poll API включите все

Установка библиотеки

Выполните в терминале pip3 install vk_api

Пример кода бота

import vk_api # подключаем апи бота from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType from vk_api.utils import get_random_id token = «тот ключ, который вы создали» # подключаемся к сообществу vk_session = vk_api.VkApi(token=token) vk = vk_session.

get_api() # включаем бота в режим приема сообщений longpoll = VkBotLongPoll(vk_session, «цифирки в адресе сообществе») # Обрабтка сообщений for event in longpoll.listen(): # вечно ждем новых сообщений if event.type == VkBotEventType.

MESSAGE_NEW: # если сообщение пришло if event.obj.message[«text»] != »: # и оно не пустое if event.from_user: # да еще и от пользователя user_sent = event.obj.

message[«text»] # возьмем его текст if user_sent == «ПРИВЕТ»: # если текст равен «ПРИВЕТ» vk.messages.send( user_id=event.obj.message[«from_id»], random_id=get_random_id(), message=»И тебе привет») # Поздороваемся в ответ else: vk.

messages.send( user_id=event.obj.message[«from_id»], random_id=get_random_id(), message=user_sent) # иначе вернем сообщение назад

Пример кода бота с загрузкой сообщений

import vk_api # подключаем апи бота from vk_api.

bot_longpoll import VkBotLongPoll, VkBotEventType from vk_api.utils import get_random_id token = «тот ключ, который вы создали» # подключаемся к сообществу vk_session = vk_api.VkApi(token=token) vk = vk_session.

get_api() # создаем функцию отправки сообщения def post_image(api, user_id, image_path): upload_server = api.photos.getMessagesUploadServer(peer_id=user_id) upload_url = upload_server[«upload_url»] files = {‘photo’: open(image_path, ‘rb’)} response = requests.

post(upload_url, files=files) result = json.loads(response.text) upload_result = api.photos.

saveMessagesPhoto(server=result[«server»], photo=result[«photo»], hash=result[«hash»]) return upload_result # включаем бота в режим приема сообщений longpoll = VkBotLongPoll(vk_session, «цифирки в адресе сообществе») # Обрабтка сообщений for event in longpoll.listen(): # вечно ждем новых сообщений if event.

type == VkBotEventType.MESSAGE_NEW: # если сообщение пришло if event.obj.message[«text»] != »: # и оно не пустое if event.from_user: # да еще и от пользователя user_sent = event.

obj.message[«text»] # возьмем его текст if user_sent == «ПРИВЕТ»: # если текст равен «ПРИВЕТ» upload_result = post_image(vk, user_id, «путь до картинки») # выгружаем изображение в скрытый альбом группы и сохраняем ответ от вконтакта vk.messages.send( user_id=event.obj.

message[«from_id»], random_id=get_random_id(), message=»И тебе привет», attachment=»photo%s_%s» % (user_id, upload_result[0][«id»]) ) # Поздороваемся в ответ и приложим к сообщению картинку else: vk.messages.send( user_id=event.obj.message[«from_id»], random_id=get_random_id(), message=user_sent) # иначе вернем сообщение назад

python/week23.txt · Последнее изменение: 15/02/2021 03:09 — admin

Источник: wiki.nsunc.com

Рейтинг
( Пока оценок нет )
Загрузка ...