Главная страница

Телеграммбот построения маршрута с использованием общественного транспорта города Киева


Скачать 2.02 Mb.
НазваниеТелеграммбот построения маршрута с использованием общественного транспорта города Киева
Анкорshorodok_bakalavr
Дата10.04.2023
Размер2.02 Mb.
Формат файлаpdf
Имя файлаShorodok_bakalavr.uk.ru.pdf
ТипДиплом
#1049985
страница3 из 5
1   2   3   4   5
5.5.2 HTTP-запросы
Протокол Передачи Гипертекста (HTTP) – это один из известных протоколов стека TCP/IP (Transmission Control Protocol/Internet Protocol), с самого начала он был разработан для размещения и получения HTML
(HyperText Markup Language) страниц и на данный момент используется для распределенных информационных систем. HTTP широко используется в
Интернете, а именно для передачи информации и представляет собой наиболее используемый прикладной протокол.
HTTP это протокол, который определяется типом запрос/ответ. Когда клиент или веб-браузер отправляет сообщения с запросом на сервер, HTTP протокол самостоятельно определяет типы отправленных серверу сообщений, используемых клиентом для запроса на веб-страницу, а также типы сообщений, используемых сервером для ответа. Три наиболее популярных типа сообщений это: GET, POST и PUT. На рисунке 5.5.2.1 представлен пример GET-запроса.
Письмо
ИТ51.320БАК.002 ПО
22
Изм.
Письмо
№ докум.
Подпись
Дата

Рисунок 5.5.2.1 – HTTP протокол с использованием GET
Для того, чтобы отправить сообщения, загружающие данные на веб- сервер используются POST и PUT. Например, когда пользователь вводит данные в форму, находящуюся на веб-странице, POST добавляет эти данные в сообщения и они ссылаются на сервер. PUT загружает эти ресурсы или другой контент на веб-сервер.
HTTP протокол является очень гибким, но это не делает его безопасным протоколом. Сообщения POST отправляют данные на сервер в виде обычного текста, который может быть с легкостью перехвачен. Аналогично, ответы, поступающие от сервера, также не зашифрованы.
Для того чтобы создать безопасную коммуникацию через Интернет используется безопасный HTTP протокол (HTTPS), он позволяет получать доступ или публиковать информацию на веб сервере. HTTPS позволяет использовать аутентификацию и шифрование, чтобы защитить данные от перехвата при перемещении между клиентом и сервером. HTTPS
Письмо
ИТ51.320БАК.002 ПО
23
Изм.
Письмо
№ докум.
Подпись
Дата
определяет некоторые правила для прохождения данных между прикладным и транспортным уровнями.
5.5.3 Формат JSON
JSON (JavaScript Object Notation) – это формат для обмена данными, комфортный для хранения, чтения и написания как человеком, так и компьютером. Он был основан на подмножестве известного языка программирования JavaScript и определен в стандарте ECMA-262 3rd Edition -
December 1999. JSON – представляет собой почти обычный текстовый формат, полностью независимый от языка реализации, но он использует некоторые правила, знакомые программистам C-подобных языков , таких как C, C++, C#, Java,
JavaScript, Perl, Python и многих других. Именно эти свойства делают JSON идеальным языком, который можно использовать для обмена данными.
JSON с самого начала был основан на двух структурах данных: а) коллекция пар ключ/значение. Эта концепция в разных языках может быть реализована как объект, запись, структура, словарь, хэш, именуемый список или ассоциативный массив;
б) упорядоченный перечень значений. Большинство языков программирования реализуют это в качестве массива, вектора, списка или последовательности. Это универсальные структуры данных. Почти все современные языки программирования могут поддерживать их в любой форме. Достаточно легко предположить, что формат данных, хранящихся в JSON, независим от языка программирования и должен быть основан на структурах, указанных выше.
В нотации JSON это выглядит так:
а) объект – это неупорядоченный набор пар ключ/значения. Объект начинается с открытой фигурной скобки и оканчивается закрытой фигурной скобкой. Каждое имя в объекте сопровождается двоеточием, а пара ключ/
значения разделяются запятой (рисунок 5.5.3.1);
Письмо
ИТ51.320БАК.002 ПО
24
Изм.
Письмо
№ докум.
Подпись
Дата

Рисунок 5.5.3.1 – Схематическое представление объекта JSON
б) массив – это упорядоченная коллекция, которая может содержать разные значения. Массив начинается с квадратной скобки и заканчивается этой скобкой.
Значения в массиве разделяются запятой (рисунок 5.5.3.2);
Рисунок 5.5.3.2 – Схематическое представление массива JSON
в) значение – может быть числом, строкой в двойных кавычках, true, false, null, объектом или массивом. Эти структуры могут быть вложены (рисунок 5.5.3.3);
г) строка – это так называемый набор символов в кодировке Unicode, заключенный в двойные кавычки, или символ, использующий обратный слэш в качестве символа экранирования. Символ представляется как одна символьная строка. Сходный синтаксис используется в языках программирования C и Java
(рисунок 5.5.3.4);
Число в JSON передается так, как в C или Java, кроме того, что используется только десятичная система счисления (рисунок 5.5.3.5).
Письмо
ИТ51.320БАК.002 ПО
25
Изм.
Письмо
№ докум.
Подпись
Дата

Рисунок 5.5.3.3 – Схематическое представление значения в JSON
Рисунок 5.5.3.4 – Схематическое представление строки в JS
Письмо
ИТ51.320БАК.002 ПО
26
Изм.
Письмо
№ докум.
Подпись
Дата

Рисунок 5.5.3.5 – Схематическое представление числа в JSON
5.5.4 Платформа Heroku
Heroku представляет собой облачную PaaS-платформу, которая поддерживает большое количество языков программирования. С 2010 г. она становится дочерней компанией Salesforce. Heroku, это одна из первых облачных платформ, появившаяся в июне 2007 года и в начальной версии поддерживавшей только один язык программирования Ruby, но на данный момент список поддерживаемых языков расширился и включает в себя Java, Node.js, Scala, Clojure, Python, Go и PHP. Обычно на серверах используются операционные системы Debian или Ubuntu. В 2011 году была введена поддержка Node.js и Clojure. Также платформа может поддерживать такие СУБД, как Cloudant, Membase, MongoDB и Redis, кроме PostgreSQL.
Приложения, работающие на данной облачной платформе, используют также DNS- сервер (обычно приложения имеют личное доменное имя, которое выглядит так – название проекта.herokuapp.com).
Для всех программ выделяются несколько независимых виртуальных процессов, которые называются dynos. Они размещены по специальной виртуальной сетке, состоящей из нескольких серверов. Одной из особенностей
Heroku является то, что у нее есть собственная система контроля версий.
Письмо
ИТ51.320БАК.002 ПО
27
Изм.
Письмо
№ докум.
Подпись
Дата

5.5.5 Очередь сообщений
Очередь сообщений (message queue, MQ) – это архитектура обмена сообщениями между разными компонентами в программных системах в асинхронном режиме. Это позволяет отправлять сообщения одним компонентом-отправителем системы в одно время, а получить и обработать другим компонентом-получателем в совсем другой. Системы такого типа состоят из producer'а (отправителя) и consumer'a (получателя), взаимодействующих между собой с помощью поставщика (broker), который по-другому можно определить как некоторый MQ-сервер.
Очередь – это структура данных с ограниченным доступом к элементам, которую можно описать, как «первый пришел-первый вышел». Ограниченность состоит в том, что элемент можно добавить только в конец очереди, а выбрать элемент только из начала, при удалении элемента из очереди он уничтожается.
Особенности использования MQ-архитектуры:
а) слабое связывание – создаются неявные интерфейсы, которые обмениваются данными, позволяют процессам быть независимыми друг от друга и позволяют сохранять желаемый формат сообщений;
б) избыточность – позволяет избегать нерационального использования ресурсов системы или сети, в свою очередь сохраняя еще необработанную информацию;
в) масштабируемость – посредством распределения процессов обработки информации позволяет увеличивать производительность MQ-сервера;
г) эластичность и возможность выдерживать пиковые нагрузки – при высокой нагрузке в дополнение, очереди сообщений могут служить так называемым буфером для накопления информации, позволяя изменить скорость обработки информации и, тем самым, снизить общую нагрузку на систему или сеть;
Письмо
ИТ51.320БАК.002 ПО
28
Изм.
Письмо
№ докум.
Подпись
Дата
д) устойчивость – дает возможность отделить один процесс от друга и получение сообщений, благодаря этому, в случае отказа процесса-обработчика, предоставляется возможность восстановить рабочее состояние системы, откладывая обработку сообщения;
е) гарантированная доставка – сообщения в любом случае будут обработаны и доставлены, независимо от рабочего состояния системы отправителя и системы получателя сообщений. Это достигается использованием асинхронной связи и возможностью хранения сообщения на MQ-сервере, пока оно не будет обработано;
ж) гарантированный и одноразовый порядок доставки – значительная часть MQ- серверов позволяет доставить данные именно в том порядке, в котором они были отправлены, при этом гарантирует, что после того, как сообщение будет прочитано, оно будет удалено из очереди;
з) буферизация – это гарантия доставки сообщений с максимальной эффективностью, которая достигается посредством независимости скорости обработки сообщений от скорости их отправки, это в свою очередь происходит благодаря использованию вышеупомянутой структуры очереди – своеобразного буфера между системой-обработчиком и системой. отправителем.
5.6 Telegram Bot API
Bot API представляет собой HTTP-интерфейс для работы с ботами в
Telegram. Каждый бот – это специально созданный аккаунт для автоматической обработки и отправки сообщений.
Документация Telegram Bot API выделяет два максимально противоположных способа получения обновлений:
а) периодические запросы;
б) установка веб-хуков.
Входящие обновления сохраняются до тех пор, пока сервер не обработает его, но не более 24 часов. В ответ получаем объект
Письмо
ИТ51.320БАК.002 ПО
29
Изм. Письмо
№ докум.
Подпись
Дата

Update, который сериализирован в JSON, независимо от способа получения обновлений.
Первый и наиболее простой вариант заключается в периодическом опросе серверов Telegram на наличие новой информации. Открывается соединение на непродолжительное время и все обновления сразу отправляются боту, все это осуществляется через связь Long Polling. Этот способ простой, но не очень надежный.
Веб-хуки работают несколько иначе. Если в чат приходит сообщение, то
Telegram сам говорит об этом, в этом и заключается работа вебхука. Теперь отпадает необходимость периодически опрашивать серверы, тем самым исчезает причина ошибок поисковых роботов. Однако за эту возможность нужно платить необходимостью установки полноценного веб-сервера на то устройство, на котором и планируется запускать поисковых ботов.
Так же для корректной работы необходимо иметь собственный сертификат
SSL (Secure Sockets Layer), поскольку веб-хуки в Telegram работают только по
HTTPS (рисунок 5.6.1).
Рисунок 5.6.1 – Принцип работы чат-бота на платформе Telegram
Письмо
ИТ51.320БАК.002 ПО
30
Изм.
Письмо
№ докум.
Подпись
Дата

Для получения токена необходимо написать специальному боту
@BotFather.
Ниже описаны примеры доступных методов для API:
а) getUpdates – это метод, используемый для получения обновлений по технологии long polling;
б) setWebhook – этот способ привязывает к роботу url домена, где содержится текущий запущенный бот;
в) sendMessage – метод, отправляющий текстовое сообщение в клиентской части Telegram;
г) sendLocation – метод, отправляющий сообщения с координатами местоположения устройства;
д) getFile – метод, возвращающий вложенные файлы по их имени.
Допускаются POST и GET запросы.
Есть 4 метода передачи характеристик в Bot API: а) запрос в URL;
б) application/x-www-form-urlencoded; в) application/json;
г) multipart/form-data (подходит для загрузки файлов).
Для работы с Telegram Bot API была исследована документация, в которой описаны все способы и характеристики, было установлено, что все ответы приходят в
JSON-формате. В ходе написания чат-бота были протестированы и использованы следующие методы и типы:
Метод getUpdates используется для получения обновлений через long polling.
Ответ возвращается посредством массива объектов Update. Параметры метода приведены в таблице 5.6.1.
Письмо
ИТ51.320БАК.002 ПО
31
Изм.
Письмо
№ докум.
Подпись
Дата

Таблица 5.6.1 – Параметры getUpdates
Параметры
Offset
Тип
Integer обязательный
Нет
Описание
Смещение относительно начала массива Update, разрешающее просматривать новые сообщения, игнорируя старые.
Ограничивает количество элементов массива
Update. Принимает значение от 1 до 100.
Таймаут в секундах для продолжительного опроса. По умолчанию 0, то есть так называемый краткий запрос.
Limit
Integer
Нет
Timeout
Integer
Нет
Метод setWebhook необходим для задания URL веб-хука, на который бот будет отправлять обновления. Каждый раз при получении обновления по этому адресу будет отправлен HTTPS POST с сериализированным в JSON объектом
Update.
При ошибке запроса на сервер попытка будет повторена несколько раз.
Для большей безопасности рекомендуется включить токен в URL веб-хука, например: https://yourwebhookserver.com/ . Мы можем быть уверены, что запросы к веб-хуку отправляет именно Telegram, поскольку никто посторонний не знает токена. Параметры данного метода приведены в таблице 5.6.2
Таблица 5.6.2 – Параметры setWebhook
Параметры url
Тип
String обязательный
Нет
Описание
HTTPS url для отправки запросов.
Sertificate
InputFile Нет
Загрузка общественного ключа для проверки корневого сертификата.
Письмо
ИТ51.320БАК.002 ПО
32
Изм.
Письмо
№ докум.
Подпись
Дата

Метод getWebhookInfo включает в себя информацию о текущем состоянии веб- хука. Параметры данного метода приведены в таблице 5.6.3.
Таблица 5.6.3 – Настройки возвращаемые getWebhookIn
Параметры url has_custom_cer tificate pending_update
_count last_error_date
Тип
String
Boolean
Описание url веб-хука, может быть пустым.
Да, только если веб-хук использует свой самозаверенный сертификат.
Количество обновлений, ожидающих своей очереди.
Integer
Integer
Не обязательно. Unix – время последней ошибки доставки обновления на указанный веб-хук.
Не обязательно. Описание последней ошибки доставки обновления на указанный веб-хук.
last_error_mess String age
Метод sendMessage используется для отправки сообщений.
Параметры метода приведены в таблице 5.6.5.
Таблица 5.6.4 – Параметры sendMessage
Параметры chat_id
Тип
Integer
String
Обязательный
Да
Описание
Уникальный целевого чата или имени целевого канала.
Текст сообщения,
необходимо отправить.
или идентификатор
Text
String
Да какое
Письмо
ИТ51.320БАК.002 ПО
33
Изм.
Письмо
№ докум.
Подпись
Дата

Продолжение таблицы 5.6.4.
Параметры
Тип
Обязательный
Описание
Нужно
Markdown или HTML, чтобы приложения Telegram отражали курсивный,
фиксированной встроенные сообщении бота.
Отключает просмотр сообщении.
Отправляет тихо. Пользователи iOS не получат пользователи получат сообщение без звука
Идентификатор сообщения.
отправить parse_mode
String
Нет полужирный,
текст шириной
URL-адреса в с
или disable_web_pag e_
preview
Boolean
Нет предварительный ссылок в сообщение disable_notificati Boolean on
Нет сообщение,
Android replay_to message_id
Integer
Нет выходного
InlineKeybo ard Markup или
ReplyKeybo ard Markup или ReplyKe yboard Hide
Расширенные поиска собой объект клавиатуры,
пользовательская.
возможности интерфейс. Представляет
JSON-сериализированный для replay_markup
Нет встроенной какая
Письмо
ИТ51.320БАК.002 ПО
34
Изм. Письмо
№ докум.
Подпись
Дата

Метод sendPhoto используется для отправки фотографий. Параметры метода приведены в таблице 5.6.5.
Таблица 5.6.5 – Настройки sendPhoto
Параметры chat_id
Тип
Integer
String
Обязательный
Да
Описание
Уникальный идентификатор целевого чата или имя целевого канала.
Фото для отправки.
Можно передать file_id как строку, чтобы фотографию находится
Telegram,
скачать фотографию.
Описание или
InputFile
String или
Photo
Да отправить какая уже на серверах или новую
Параметры
Тип
Обязательный
Caption
String
Нет
Тема фотографии от 0 до
200 символов.
Идентификатор исходящего сообщения.
replay_to message_id
Integer
Нет
Метод editMessageText используется для редактирования текстовых сообщений, отправленных ботом или через бота. Параметры метода приведены в таблице 5.6.6.
Письмо
ИТ51.320БАК.002 ПО
35
Изм.
Письмо
№ докум.
Подпись
Дата

Продолжение таблицы 5.6.5.
Параметры
Тип
InlineKeyboard
Markup or
ReplyKeyboard
Markup or
ReplyKeyboard
Hide or
ForceкReply
Обязательный
Описание
Расширенные поиск интерфейса. Представляет из себя
JSON- сериализированный объект для встроенной клавиатуры, предназначенной пользователя,
инструкции используются,
сокрытие пользователя принудительного ответа пользователя.
возможности
Replay_markup
Нет для определенные какие для клавиатуры или от
Таблица 5.6.6 – Настройки метода editMessageText
Параметры
Тип
Integer
String
Обязательный
Описание
Необходим если inline_message_id не указан.
идентификатор чата или имени канала.
Описание или параметр,
chat_id
Нет
Уникальный целевого
Параметры
Тип
Обязательный
Обязательно если chat_id и message_id не указаны.
Идентификатор встроенного сообщения inline_message_id
String
Нет
Письмо
ИТ51.320БАК.002 ПО
36
Изм.
Письмо
№ докум.
Подпись
Дата

Продолжение таблицы 5.6.6.
Параметры
Text
Тип
String
Обязательный
Да
Описание
Новый сообщения.
Нужно
Markdown или чтобы приложения отражали полужирный,
текст из шириной
URL-адреса сообщении сапога.
Отключает просмотр ссылок сообщении.
текст отправить
HTML,
Telegram parse_mode
1   2   3   4   5


написать администратору сайта