- Saved searches
- Use saved searches to filter your results more quickly
- trofimovdev/vkpython
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Пишем чат бота для ВКонтакте на python с помощью longpoll
- Ну прям совсем для новичков
- Как оно работает?
- Техническая реализация
- Ссылки на примеры и документацию
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Пример бота на Python для ВКонтакте
trofimovdev/vkpython
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Пример простого бота для ВКонтакте на Python 3. Обработка событий с использованием Bots Long Poll API, голосовые сообщения генерируются с помощью Яндекс.SpeechKit.
Сообщество бота: https://vk.com/vkpython. Бот отправляет в ответ на любое сообщение картинку и голосовое сообщение с именем собеседника.
Подготовка к использованию
Получение ключа доступа VK API
Ключ доступа к VK API можно получить в настройках сообщества, там же нужно включить Long Poll API, как минимум для доступа к сообщениям и управления сообществом.
Сделать это можно перейдя в «Управление сообществом» -> «Работа с API» -> «Ключи доступа», «Long Poll API».
Получение ключа доступа Яндекс.SpeechKit
Переходим в кабинет разработчика, нажимаем «Получить ключ» и выбираем «SpeechKit Cloud».
Похоже, сейчас SpeeckKit стал полностью платным. Если вы нашли способ получения ключа для личного некоммерческого использования, сообщите об этом.
About
Пример бота на Python для ВКонтакте
Пишем чат бота для ВКонтакте на python с помощью longpoll
Сейчас боты стали обыденностью и находятся на каждом шагу, но если тебе нужен свой бот в социальной сети вконтакте, то это легко реализовать.
Ну прям совсем для новичков
Как оно работает?
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» и нажать «Создать ключ доступа».
from vk_api.longpoll import VkLongPoll, VkEventType longpoll = VkLongPoll(vk_session) vk = vk_session.get_api() 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")) )
А ещё можно прикреплять картинки.
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
Ссылки на примеры и документацию
На этом я с вами попрощаюсь. Хорошего кодинга.