KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

Python и LongPoll VK, или как запустить скрипт ВК и настроить Python, для новичков

Статьи / Python



Это новый вид статьи, в котором мы не будем говорить про PHP, многим python превосходит php, а для начинающих он покажется проще. Данная статья будет содержать в себе следующие шаги:

1. Установка Python 3.7.3 на Windows.
2. Установка PyCharm и его настройка.
3. Создание проекта и установка библиотеки VK_API
4. Запуск скрипта используя LongPoll VK.
5. Разница между CallBack API и LongPoll

1. Установка Python 3.7.3 на Windows.

Установка не занимает много времени и умений. Переходим на официальный сайт https://www.python.org/downloads/ и скачиваем установщик себе на ПК.

Запускаем установщик, обязательно поставьте галочку возле надписи Add Python 3.7 to PATH, так у вас не возникнет проблем при работе с командной строкой Windows.


После установки запускаем командую строку:



И пишем команду:
pip


Если Вы сделали все правильно, то увидите список команд и опций

На этом установка Python успешно завершена. Переходим к установке IDE PyCharm


2. Установка PyCharm и его настройка.

Переходим на сайт jetbrains.com/pycharm и скачиваем среду PyCharm Community, она бесплатная.

После чего устаналвиваем и запускаем PyCharm


Забегая вперед, у меня по умолчанию в настройках программы стоял Python 2.7

Нам нужна последняя версия, открываем File -> Settings... -> Project interpreter и из выпадающего меню выбираем последнюю версию, или добавляем ее туда нажав на Show All…

Теперь можно создавать новый проект.


3. Создание проекта и установка библиотеки VK_API


В Pycharm выбираем: File -> New Project и создаем новый проект, выбрав необходимые настройки:

Теперь создаем новый файл, назовем его new.py, так как Python использует расширение .py (английскими буквами, не путайте) расширение указывать не обязательно.

Пишем наш первый самый простой код:
print("Привет :)")
 
И нажав правой кнопкой мыши по файлу, выбираем: Run 'new'

Все работает. Теперь нам нужно установить библиотеку vk_api, для этого открываем терминал прямо в PyCharm и пишем команду:
pip install vk_api

Installing collected packages: urllib3, chardet, idna, certifi, requests, enum34, six, vk-api
  Running setup.py install for vk-api … done
Successfully installed certifi-2019.6.16 chardet-3.0.4 enum34-1.1.6 idna-2.8 requests-2.22.0 six-1.12.0 urllib3-1.25.3 vk-api-11.4.0

Если в конце видите такой текст, библиотека успешно установлена, можно импортировать ее в проект и писать первый код:

# -*- coding: utf-8 -*-
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType


def main():
    """ Пример использования bots longpoll
        https://vk.com/dev/bots_longpoll
    """

    vk_session = vk_api.VkApi(token='your_group_token')

    longpoll = VkBotLongPoll(vk_session, 'your_group_id')

    for event in longpoll.listen():

        if event.type == VkBotEventType.MESSAGE_NEW:
            print('Новое сообщение:')

            print('Для меня от: ', end='')

            print(event.obj.from_id)

            print('Текст:', event.obj.text)
            print()

        elif event.type == VkBotEventType.MESSAGE_REPLY:
            print('Новое сообщение:')

            print('От меня для: ', end='')

            print(event.obj.peer_id)

            print('Текст:', event.obj.text)
            print()

        elif event.type == VkBotEventType.MESSAGE_TYPING_STATE:
            print('Печатает ', end='')

            print(event.obj.from_id, end=' ')

            print('для ', end='')

            print(event.obj.to_id)
            print()

        elif event.type == VkBotEventType.GROUP_JOIN:
            print(event.obj.user_id, end=' ')

            print('Вступил в группу!')
            print()

        elif event.type == VkBotEventType.GROUP_LEAVE:
            print(event.obj.user_id, end=' ')

            print('Покинул группу!')
            print()

        else:
            print(event.type)
            print()


if __name__ == '__main__':
    main()
Это код из примера, благодаря нему мы убедимся что сделали все правильно. Вставить его нужно в файл new.py предварительно удалив все оттуда, что мы написали ранее. 

4. Запуск скрипта используя LongPoll VK.

Для начала настроим наше сообщество.
Создаем ключ

Копируем ключ и вставляем его в наш скрипт:
Вместо 'your_group_token' указываем ключ сообщества
Вместо 'your_group_id' указываем ID нашего сообщества

Теперь переходим во вкладку Long Poll APIи включаем его

Далее, обязательно включаем тип событий, это частая ошибка при создании ботов, забыв включить события, бот не будет работать! Выбираем все что есть.



Вернемся к нашему коду. Давайте запустим наш скрипт и проверим как он будем обрабатывать события, запускаем скрипт:

Давайте покинем сообщество и снова вступим в него:

В консоли мы сразу увидели последние события. Немного добавим строк в наш код, и научим отвечать наше сообщество сообщением в ЛС на одно из событий:

Импортируем:
from vk_api.utils import get_random_id

После:
longpoll = VkBotLongPoll(vk_session, '176771278')

Добавляем:
vk = vk_session.get_api()
 
И отправляем сообщение самому пользователю:
vk.messages.send(
    user_id=event.obj.from_id,

    random_id=get_random_id(),
    message=("Новое сообщение - ", event.obj.text)
)
print('ok')


Полный код:
# -*- coding: utf-8 -*-
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
from vk_api.utils import get_random_id

def main():
    """ Пример использования bots longpoll
        https://vk.com/dev/bots_longpoll
    """

    vk_session = vk_api.VkApi(token='Ттут ваш токен')

    longpoll = VkBotLongPoll(vk_session, 'Ид сообщества')
    vk = vk_session.get_api()
    for event in longpoll.listen():

        if event.type == VkBotEventType.MESSAGE_NEW:
            print('Новое сообщение:')

            print('Для меня от: ', end='')

            print(event.obj.from_id)

            print('Текст:', event.obj.text)
            print()

            vk.messages.send(
                user_id=event.obj.from_id,

                random_id=get_random_id(),
                message=("Новое сообщение - " + event.obj.text)
            )
            print('ok')

        elif event.type == VkBotEventType.MESSAGE_REPLY:
            print('Новое сообщение:')

            print('От меня для: ', end='')

            print(event.obj.peer_id)

            print('Текст:', event.obj.text)
            print()

        elif event.type == VkBotEventType.MESSAGE_TYPING_STATE:
            print('Печатает ', end='')

            print(event.obj.from_id, end=' ')

            print('для ', end='')

            print(event.obj.to_id)
            print()

        elif event.type == VkBotEventType.GROUP_JOIN:
            print(event.obj.user_id, end=' ')

            print('Вступил в группу!')
            print()

        elif event.type == VkBotEventType.GROUP_LEAVE:
            print(event.obj.user_id, end=' ')

            print('Покинул группу!')
            print()

        else:
            print(event.type)
            print()


if __name__ == '__main__':
    main()

напишем любое сообщение нашему боту и получим ответ:



Как узнать названия других событий? Они будут выводится в консоли, так как в коде используется:
else:
    print(event.type)
    print()


Тут мы получили 2 события:

VkBotEventType.WALL_POST_NEW - Новый пост
VkBotEventType.GROUP_OFFICERS_EDIT - Выдача админ прав в самой группе


Документация и больше примеров можно посмотреть на GitHub. Если Вам интересен этот язык и вы хотите видеть больше статей по Python, пишите в комментарии об этом!


5. Разница между CallBack API и LongPoll

И все же в чем разница между CallBack API и Long Poll API? А разница есть и она большая.
Когда Вы используете CallBack API, ВК сам отправляет Вам происходящее событие на сервер, нам остается только получить его и обработать, у Long Poll API все наоборот, ВК ничего не отправляет, а хранит все события у себя на серверах, Вам нужно самому их получать и обрабатывать, Long Poll API подходит для высоко нагруженных проектов, в идеале советуем использовать оба типа получения событий. На этом наша статья подходит к концу, в следующий раз мы напишем как запустить Long Poll используя PHP, всем хорошего кодинга и настроения  kissing_heart


Разработка ботов на заказ, любой сложности, обращаться:
 VK Дмитрий Котов, Сергей Котов mail: [email protected]
TELEGRAM: @seriamod
  • Сергей Котов
  • 29.06.2019
  • 42 046
  • 12
Как создать образ с Windows 7/10 USB DVD Download Tool / Media Creation Tool
Как создать образ с Windows 7/10 USB DVD Download Tool / Media Creation Tool
25-12-2018, 16:50, Статьи / Программы
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
19-03-2019, 17:23, Статьи / PHP
Настройка своей VDS на Debian (8) под сайт
Настройка своей VDS на Debian (8) под сайт
17-09-2019, 12:07, Статьи
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
16-01-2019, 06:02, Статьи / PHP
  1. Сталк

    Сталк Гость 26 июля 2019 13:23

    Здрасть. Это очень годная вещь... Теперь буду писать чат-ботов... Желаю читающим это удачи



    Отличная статья. Наконец у меня вышло это
  2. Богдан

    Богдан Гость 1 августа 2019 18:20

    Сделал все как в туториале, но отклика от бота нет, как в группе так и в консоле

  3. Максим Смок

    Максим Смок@Максим Смок 19 августа 2019 16:02

    Как сделать, чтоб бот отвечал на команды?
    1. Гость Игорь

      Гость Игорь Гость 22 октября 2019 07:16

      Для этого, нужен другой скрипт, я могу продать

      1. Сергей Котов

        Сергей Котов@Сергей Котов 22 октября 2019 16:47

        Зачем другой? Можно этот дописать. 

        if event.obj.text == '!бот':

        vk.messages.send(
        user_id=event.obj.from_id,

        random_id=get_random_id(),
        message=("Ответ на команду")
        )
                    print('ok')


  4. Сергей Милованов

    Сергей Милованов@Сергей Милованов 11 февраля 2020 10:48

    А как сделать передачу данных в другой файлик PHP, где уже будут происходить все системы для команд
  5. Мерлан

    Мерлан@Мерлан Маркелов 26 февраля 2020 21:55

    Годно!)
    как реализовать тот же vk.messages.removechatuser, addchat user(это если что userbot), будет статья?) будет полезно
  6. Миша

    Миша Гость 26 марта 2020 00:09

    Как сделать так чтобы на определенные сообщения бот отвечал заготовленными репликами?
  7. Сергей

    Сергей Гость 23 апреля 2020 07:30

    Почему бот выключается из-за того, что ему долго никто не пишет?
  8. Сергей

    Сергей Гость 19 июня 2020 19:37

    Как можно сделать чтобы данные, кто вступил и вышел из группы, сохранялись в блокнот?
  9. Мастер кодинга

    Мастер кодинга Гость 16 февраля 2021 17:54

    Помогите, всё работает, но при отправке сообщения боту, выходит ошибка

    Traceback (most recent call last):
      File "C:\Users\Рафаэль\Desktop\учусь питону вк.py", line 74, in <module>
        main()
      File "C:\Users\Рафаэль\Desktop\учусь питону вк.py", line 16, in main
        for event in longpoll.listen():
      File "C:\Users\Рафаэль\AppData\Local\Programs\Python\Python39\lib\site-pac
    kages\vk_api\bot_longpoll.py", line 286, in listen
        for event in self.check():
      File "C:\Users\Рафаэль\AppData\Local\Programs\Python\Python39\lib\site-pac
    kages\vk_api\bot_longpoll.py", line 263, in check
        return [
      File "C:\Users\Рафаэль\AppData\Local\Programs\Python\Python39\lib\site-pac
    kages\vk_api\bot_longpoll.py", line 264, in <listcomp>
        self._parse_event(raw_event)
      File "C:\Users\Рафаэль\AppData\Local\Programs\Python\Python39\lib\site-pac
    kages\vk_api\bot_longpoll.py", line 226, in _parse_event
        return event_class(raw_event)
      File "C:\Users\Рафаэль\AppData\Local\Programs\Python\Python39\lib\site-pac
    kages\vk_api\bot_longpoll.py", line 170, in __init__
        peer_id = self.obj.peer_id or self.message.peer_id
    AttributeError: 'NoneType' object has no attribute 'peer_id'
    1. Сергей Котов

      Сергей Котов@Сергей Котов 16 февраля 2021 23:13

      откуда наследуется peer_id - не возвращает его.

      Скорее всего потому, что получение peer_id идёт до того, как обрабатывается новое сообщение.
{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Планируете ли вернуться к динамической обложке?
Скрипт для скачивания видео с YouTube на PHP
Уже не работает.
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 936
Добавлено за сутки: +0
Пользователей: 4124
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2023. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

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

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль