Сейчас боты стали обыденностью и находятся на каждом шагу, но если тебе нужен свой бот в социальной сети вконтакте, то это легко реализовать.
Ну прям совсем для новичков
Как установить 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 ВКонтакте
Информация о материале Родительская категория: Социальные сети Категория: 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