Как создать api в ВК

Недавно на одном проекте мне пришлось столкнуться с ботом вк, который «живёт» в сообщениях группы. До этого я имел самый разный опыт создания ботов из личных страничек. Для того, чтобы бот мог нормально отвечать на сообщения приходилось делать самые разные извращения с кроном, таймерами, «запоминанием» сообщений и другими разными ужасами.
Как же я удивился, когда начав курить VK API групп касаемо сообщений, я увидел это чудо — Callback API.

Для нетерпеливых или любящих разбираться со всем самостоятельно в конце есть готовый пример.

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

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

API для начинающих. Пример VK. [1/5]

Так вот, в этом callback запросе вк может уведомлять обо всём: новых сообщениях группы, исходящих от группы сообщениях, видео, аудио, комментариях, новых подписчиках и так далее. И мы, прочитав этот запрос, можем решить, как на этот запрос реагировать.
Прямо как платёжные системы. Магия.

Давайте по порядку. Для того, чтобы воспользоваться callback api для создания бота или ещё чего-бы то ни было, нужно:

Сначала, конечно же, создать группу.
Открыть раздел «Управление сообществом», в котором справа будет вот такое меню:

Выбираем работу с API, где и имеем все настройки.

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

Откройте её и посмотрите, что там есть. Сразу можете указать в типах событий «Входящее сообщение», остальные пока не трогаем, иначе они будут без нужды напрягать сервер как вк, так и Ваш.

Предлагаю сделать вот что:
Пусть бот будет отвечать на сообщения этим же сообщением, которое ему прислали, только задом-наперёд, ахах

Для начала давайте слепим два файла. callback.php и vk.class.php. Класс нужен чисто для удобства, чтобы не громоздить большую кучу кода в одном файлике. Сделаем всё аккуратно

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

Перед использованием самого каллбек апи придётся так же для начала подтвердить свой каллбек-скрипт, отдав вк нужную строку. Все запросы от каллбека будут лететь в формате JSON (уже говорил) и вк как бы сам показывает, как они будут выглядеть. Первый из них, это confirmation, который будет смотреться примерно так:

Идём теперь в наш callback.php, в котором для начала нужно получить запрос от вк и проверить, что же там пришло и сразу это обработать. О структуре запроса отправляемого от вк можно узнать из официальной документации вк
Ниже приведён сразу полный код файла callback.php, который будет укомплектован тонной комментариев )
Весь код будет максимально упрощен, во многих местах на каком-то большом и серьёзном проекте так лучше не делать ) Нужны будут как минимум обработчики ошибок и так далее, которые вк может вполне себе вернуть. Так же желательно будет использовать секретный ключ и всякое-разное

$body = file_get_contents ( ‘php://input’ ); //Получаем в $body json строку
$arr = json_decode( $body , true); //Разбираем json запрос на массив в переменную $arr

if ( $arr [ ‘type’ ] == ‘confirmation’ ) < //Если нам пришел запрос на подтверждение callback скрипта, то

Еще по теме:  Меню Вконтакте как сделать

exit ( «xxxxxxxx» ); //отдаём в ответ свой код подтверждения выданный вк и останавливаем скрипт, дальше ему ничего не требуется

//Если скрипт выполняется дальше, значит это не confirmation, а одно из уведомлений.
//Т.к. на данном этапе мы обрабатываем только входящее письмо, значит это входящее письмо
if ( $arr [ ‘type’ ] == ‘message_new’ ) < //Проверим на всякий случай, точно ли это входящее письмо

function cir_strrev( $stroka )< //Так как функция strrev не умеет нормально переворачивать кириллицу, нужен костыль через массив. Создадим функцию

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

API VK — Создаём Standalone-приложение и получаем token.

Телеграм-канал Программист и бизнес. Каждый день интересные истории, как программист строит бизнес.

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

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

ВК-API блиц

ВК предоставляет несколько реализаций API:

  • Streaming/Long Poll — позволяет получить данные в реальном времени. Сразу же, при обновлении данных в ВК, мы получаем актуальную информацию, без обновления страницы. Streaming и Long Poll реализуют разные подходы, но суть их одинаковая.
  • Виджеты для сайта — здесь всё просто: скопировал код, без хитрых настроек, и у тебя рабочий виджет на сайте.
  • Open API — работает на клиенте. Так же просто настраивается и используется. Преимуществом является то, что не обязательно иметь сервер для выполнения запросов. Будет работать в обычном HTML + JS.
  • Callback API — позволяет получать данные от самомого ВК, не выполняя запрос. В случае обновления данных, ВК сам нам присылает новые данные. Например, пользователь подписался на нашу группу, и ВК, автоматически пришлёт информацию об этом пользователе нашему скрипту.
  • REST API — позволяет взаимодействовать с данными ВК из скрипта. Позволяет автоматизировать любые пользовательские действия.

Для нас, как для программистов, на данном этапе — интересен REST API. Который позволяет взаимодействовать с пользователями, группами, рекламой, и прочими сущностями. Подробнее, обо всех доступных методах можно почитать здесь.

Для получение доступа к REST API, необходимо иметь специальный ключ vk api token. Это уникальное значение, аналогично логину и паролю — идентифицирует пользователя, от имени которого выполняются запросы.

Как гласит 2 правило проектирования REST API — между запросами не должно сохраняться состояния. Система по определению не может использовать сессии, потому применение токена актуально для идентификации пользователя.

Как получить токен VK.COM

Получение токена состоит из двух частей: регистрации своего приложения и получение токена в этом приложении.

Создать приложение можно на странице. Указав название приложения, и выбрав его тип. Я выбираю Standalone, потому что тогда можно будет получить токены с бОльшим возможностями, чем в остальных вариантах (придётся поверить мне на слово, что это правда).

Создав приложение и перейдя на вкладку настроек, будет показано: id приложения, секретный ключ

Теперь, имея id приложения, можно получить токен доступа. Для этого нужно сформировать ссылку, подставив в неё id своего приложения.

где вместо нужно вставить id своего приложения. а в параметре scope — перечислены разрешения, которыми мы хотим наделить токен, список всех разрешений Однако здесь, одним из самых важных разрешений является offline, которое создаёт бессрочный токен, не имеющий ограниченного времени жизни.

Если вы не хотите создавать своё приложение, то можете получить токен по ссылке

Перейдя по сформированной ссылке, откроется диалоговое окно, в которому будут зачитаны права показаны разрешения, которыми наделяется токен (чем больше указано scope свойств, тем больше будет этот список)

Подтвердив, произойдёт переадресация на страницу, в адресной строке которой будет access_token, expires_in равный нулю (что логично, учитывая, что мы указывали создание вечного токена)

Я сократил токен для сохранения читабельности. У вас он будет длиннее

Скопировав этот токен, можно делать первые запросы к API.

Создание приложения для получения доступа к vk API

Нас будет интересовать обращение по HTTP протоколу к адресу https://api.vk.com/api.php . На него мы будем высылать команды с определенными параметрами, а в ответ получать какие либо данные, предоставляемые сервисом вконтакте.

Самым первым делом необходимо создать новое приложения в VK.com, поскольку для работы с vk API надо иметь на это специальную подпись. Кроме того надо проштудировать всю информацию представленную в документации сервиса

Еще по теме:  Как синхронизировать сайт и Вконтакте

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

Чтобы создать свое приложение нужно перейти к форме создания приложения вконтакте и заполнить все необходимые поля:

создание приложения API в вконтакте.jpg

После заполнения сохраняем введенные значения и получаем интересующие нас данные: id приложения и секретный ключ. Используя их мы в дальнейшем сможем работать с vk API.

После регистрации своего приложения мы сможем управлять настройками приложения созданного приложения

После этого нам потребуется класс для работы с vk API для этого скачиваем php библиотеку прямо с vk.com.

( Скачали: 2460 чел. )

Как делать запросы к API

Сохраним полученный токен, потому как его нужно будет прикреплять к каждому запросу к VK API.

Для того, чтобы сделать запрос к API из PHP, нам нужна любая из доступных функций, способных совершить HTTP-запрос: file_get_contents, curl.

К слову, даже, если открыть в браузере сформированный адрес, то получим результат

Запрос к методам API состоит из шаблона: https://api.vk.com/method/?v= где — имя метода — параметры, индивидуальные, в зависимости от метода — ранее сохранённый токен — версия API (на момент написания статья = 5.78)

Зная всё это, сделаем первый запрос, на получение всех личных записей со стены. За стену отвечает сущность wall, а метод его get, который возвращает список всех записей со стены пользователя. И, в итоге, имя метода будет сформировано в виде имени сущности (wall).имя метода (get) — wall.get

Так, первая часть URL-адреса уже сформирована: https://api.vk.com/method/wall.get

Теперь нужно определиться с передаваемыми параметрами (PARAMS). Все доступные, обязательные параметры с описанием можно посмотреть на странице метода.

Я буду передавать owner_id который соответствует id моего пользователя.

По факту же, это поле является необязательным в текущих условиях. Так как по умолчанию, ownwer_id будет проставлен id текущего пользователя.

И, можно было бы просто дописать в виде строки к существующему URL-адресу: …?owner_id=120159853

Однако, если туда добавлять множество новых параметров, то в таком виде добавлять не удобно. Потому, я создам массив параметров, где ключом будет название параметра, а значение, соответственно, его значение. А с помощью функции http_build_query() можно привести массив к виду строки нужного вида:

$params = [ ‘owner_id’ => 120159853, //params2 => ‘value2’, ]; http_build_query($params); //owner_id=120159853 $token = ’38fa46d4c0c10bab105c760cc44ed373c0bc6a34405931f34c765ea’; $version = 5.78; $params = http_build_query([ ‘owner_id’ => 120159853, ‘access_token’ => $token, ‘v’ => $version //… ]); $url = «https://api.vk.com/method/?v=»; //https://api.vk.com/method/wall.get?owner_id=120159853v=5.78

При том, что даже токен и версию теперь можно вынести в массив $params, для более централизованной записи.

Осталось последний шаг — выполнение http-запроса. И, принимая тот факт, что данные возвращаются в виде JSON, то, результат, нужно дополнительно обернуть в функцию json_decode, которая приведёт JSON к обычному PHP-массиву. Вот так просто декодировать JSON.

$result = json_decode(file_get_contents($url), true);

В итоге, получаем обычный массив записей, который можем обработать как пожелаем

И, исходя из ответа выше, для получения записей выполним:

//все записи $orders = $result[‘response’][‘items’]; //первая запись $order = $result[‘response’][‘items’][0];

Права приложения

Для доступа к данным пользователя, приложение должно обладать набором соответствующих прав.

Предварительно, перед началом использования vkapi.class.php, надо разобраться, с тем как нашему созданному приложению, получать права для работы с тем или иным пользователем.

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

Для всех приложений, api вконтакте предоставляет таблицу битовых масок, другими словами набор прав для приложения.

Советую вам самостоятельно ознакомиться с перечнем прав и их битовых масок.

Если Вы хотите получить права на «доступ к друзьям» и «доступ к обычным и расширенным методам работы со стеной», то ваша битовая маска будет равна: 2 + 8192 = 81924.

Если, имея битовую маску 81924, вы хотите проверить, имеет ли она доступ к расширенным методам работы со стеной, то можете сделать это таким образом:

1 echo 81926
Еще по теме:  Отметить непрочитанным Вконтакте что это

Если права подтверждены, то 81926

  • SETTINGS – запрашиваемые права доступа приложения;
  • REDIRECT_URI – адрес, на который будет передан code. Этот адрес должен находиться в пределах домена, указанного в настройках приложения.
  • Перейдя по такой ссылке, пользователю, будет предложено авторизоваться на vk.com и подтвердить разрешение на запрашиваемые нашим приложением права.

    В моем случае ссылка будет выглядеть таким образом:

    Параметром scope, я запрашиваю у пользователя разрешение на использование всех имеющихся данных, перечислив все известные идентификаторы прав.

    После подтверждения, vk api высылает назад на указанный redirect_uri код, по которому мы сможем в течении часа получать access_token чтобы работать с API вконтакте.

    Закончив процесс получения разрешения, от пользователя на доступ к его информации, мы можем начинать работу с API вконтакте, а именно с классом vkapi.class.php

    Источник: winac.su

    1С ВКОНТАКТЕ. РАЗРАБОТКА ЧАТ БОТА ВКОНТАКТЕ. ЧАСТЬ 1

    Программист 1С | Мобильная 1С | Оптимизация 1С

    1С ВКонтакте

    Блог

    PYTHON ДЛЯ ПРОГРАММИСТА 1C

    В работе вам понадобятся

    Скачать исходный код вы может в конце статьи.

    1С ВКОНТАКТЕ. Получение доменного имени для доступа из интернета к вашему web серверу через сервис NGROK

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

    1С ВКонтакте

    1С ВКонтакте

    Извлеките клиент из архива. Скопируйте в любую папку. Для удобства запуска, я создал bat файл сразу с необходимыми параметрами. Так как web сервер у меня работает на 80 порту, то и NGROK я настраиваю на 80 порт.

    1С ВКонтакте

    После запуска клиента появится окно с доменным именем. Через это имя вы сможете получить доступ к вашему web серверу из интернета.

    1С ВКОНТАКТЕ. Настройка сообщества для работы с чат ботом.

    Переходим в настройки сообществ. В меню «Сообщения» включаем пункт «Сообщения сообщества».

    В настройках для бота надо включить «Возможности ботов». Можно добавить кнопку «Начать».

    Переходим в «Работа с API» на вкладку «Callback API». Выполняем настройки сервера.

    В Типах сообщений устанавливаем реакцию на Входящее сообщение.

    Перейдите к «Ключи доступа» и добавьте новый ключ. Установите все разрешения, чтобы в будущем иметь доступ к большему количеству методов.

    Полученный ключ скопируйте куда-нибудь в удобное место. Потом мы его будет использовать для доступа к API ВКонтакте.

    Создание HTTP сервиса чат бота для работа с API ВКонтакте.

    К конфигураторе создайте HTTP сервис.

    Добавьте шаблон и 2 метода, Get и Post. Метод Get будем использовать только проверки доступности сервиса.

    У метода Post, измените HTTP-метод на Post.

    Для каждого метода создайте обработчики.

    Опубликуйте HTTP сервис на web сервере.

    После публикации проверим доступность нашего сервиса. В браузере введем строку нашего домена из консоли NGROK. Добавим имя нашей публикации «chat1s». Далее укажем что обращаемся к http сервису «hs». И в конце пишем наш корневой url «cb».

    Введя эту стоку в браузере, вы выполните Get запрос к нашему сервису. Но так как в базе у нас есть пользователи, то нам необходимо как-то автоматически авторизоваться.

    В 1С у пользователя Admin я задам пароль.

    Открою файл публикации нашего сервиса. Он находится в папке с сайтами нашего web сервера.

    И здесь в строке ib введу данные для автоматической авторизации.

    После наших действий, в окне браузера мы увидим ОК.

    Вернусь в 1С и добавлю 2 общих серверных модуля. В одном будем описывать работу нашего чат бота, а во втором напишем универсальные методы по работе с API ВКонтакте.

    Скачать дополнительные материалы могут только зарегистрированные пользователи. Пожалуйста войдите.

    На этом все. Продолжение в следующем уроке. И посмотреть полную версию вы можете в видео ниже.

    (1) комментарий

    soldatarzi говорит:

    Илья, добрый день. Спасибо большое за Ваши уроки, очень интересные и понятные.
    У меня к вам вопрос. Когда в чат боте отправляешь картинку и при обновлении в режиме предприятия сообщений, выскакивает ошибка «: Поле объекта не обнаружено (text)
    Если НовоеСообщение.message.text = «/start» Тогда
    »
    До этого момента все прекрасно. как отправить картинку, чтобы все не ломалось и она отображалась в 1С?
    Я видел, у вас там в коде прописан путь от диска D. Это файлы и для чего они?

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

    Для публикации комментариев Вам необходимо авторизоваться.

    Источник: nizamov.studio

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