Файл: Телеграммбот построения маршрута с использованием общественного транспорта города Киева.pdf
Добавлен: 12.01.2024
Просмотров: 202
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Следующее значительное преимущество – наличие большого числа подключаемых модулей, обеспечивающих различные дополнительные возможности.
Такие модули обычно пишутся на С, на самом Python, и могут быть созданы более опытными программистами. В качестве примера можно привести следующие модули:
а) Numerical Python – предоставляет программисту более расширенные математические возможности, такие как манипуляции с целыми векторами и матрицами;
б) Tkinter – позволяет строить приложения с использованием графического пользовательского интерфейса (GUI);
в) OpenGL – это большая библиотека графического моделирования двух- и трехмерных объектов Open Graphics Library.
Единственным недостатком, на который обращал внимание сам автор, является сравнительно невысокая скорость выполнения Python программы. Однако, это не играет большую роль по сравнению с преимуществами языка при написании программ не очень критичных к скорости выполнения. Из использованных модулей можно выделить:
TeleBot, CherryPy, Requests, которые будут более подробно описаны ниже.
5.4.1 Модуль TeleBot
Модуль TeleBot является оболочкой над запросами к TelegramBotAPI, используется для упрощения и минимизации написанного кода. Все типы указаны в types.py. Все они полностью соответствуют определению типов API Telegram, за исключением from поля Message, которое переименовано в from_user (поскольку from это зарезервированный токен Python). К таким атрибутам, как message_id, можно обращаться непосредственно, например: message.message_id. При написании программ не очень требовательных к скорости выполнения стоит обратить внимание, что атрибут message.chat может принадлежать как определенному пользователю, так и групповому чату, это с полностью окупаемыми преимуществами языка.
Письмо
ИТ51.320БАК.002 ПО
19
Изм.
Письмо
№ докум.
Подпись
Дата
В классе TeleBot расположены все способы API. Чтобы следовать общим соглашениям об именах Python, они переименованы. Например: sendMessage send_message, editMessageText, edit_message_text. Функция украшена декоратором экземпляра TeleBot – обработчик сообщений. Обработчики сообщений состоят из одного или нескольких фильтров. Каждый фильтр возвращает True или False для определенного сообщения и обработчик получает разрешение на обработку сообщения, если возвращается True.
5.4.2 Модуль CherryPy
Написанный на языке программирования Python, объектно-ориентированный веб-фреймворк – CherryPy. Создано для быстрой разработки веб-приложений для сети
Интернет. Представляет собой надстройку над HTTP-протоколом.
Модуль может выступать в качестве самостоятельного веб-сервера или работать под управлением другой серверной программы на основе протокола
WSGI. CherryPy не предназначен для обработки шаблонов для вывода данных, получения доступа к базе данных, авторизации пользователя. Фреймворк становится расширенным за счет фильтров, представляющих собой простые интерфейсы, вызываемые в определенных точках процесса обработки запросов/
ответов и состоят из семи функций. Главным компонентом TurboGears является модуль CherryPy.
Процесс установки CherryPy совсем несложен, достаточно просто скачать его и выполнить несколько коротких шагов из файла README. Модуль CherryPy устанавливается так же, как любой другой модуль Python, поэтому не нужно указывать каталог установки. Если сравнивать с другими, более сложными серверными технологиями, модуль CherryPy всегда доступен для использования, как и любой другой модуль Python, если он будет импортирован с помощью инструкции import. В реальности CherryPy представляет собой не более чем самостоятельное приложение на языке Python, умеющее управлять своим собственным многопоточным веб-сервером, благодаря этому мы
Письмо
ИТ51.320БАК.002 ПО
20
Изм. Письмо
№ докум.
Подпись
Дата
имеем возможность выполнить сценарий на стороне сервера достаточно просто, как запустить простую команду в окне терминала. По умолчанию сервер запускается локально на 8080 порта, и сразу выполняет функцию, которую ему передали, но также можно задать определенные настройки вручную, такие как:
IPадрес, порт, открытый и закрытый ключи SSL.
5.4.3 Модуль Requests
Requests – библиотека Python, выполняющая HTTP-запросы (HyperText
Transfer Protocol). Начиная от передачи параметров в URL-адресах до отправки пользовательских заголовков и проверки SSL.
5.5 REST API, HTTP-запросы, JSON и череда сообщений
5.5.1 REST API
REST – это стиль архитектуры программного обеспечения, который используется для построения распределенных масштабируемых веб-сервисов, использующих запросы HTTP.
REST (Representational State Transfer) – стиль взаимодействия компонентов распределенного приложения в сети. REST имеет согласованный набор учитываемых ограничений при проектировании распределенной гипермедиа-системы. В определенных случаях (интернет-магазины, поисковые системы) это влечет за собой повышение производительности и изменение архитектуры, а именно ее упрощение.
Компоненты в REST своим взаимодействием напоминают взаимодействие клиента и сервера в Интернете.
Вызов удаленной процедуры в сети Интернет может представлять собой обычный HTTP-запрос (обычно "GET" или "POST"; такой запрос называют "REST- запрос"), а все необходимые для передачи данные передаются в качестве параметров запроса.
Письмо
ИТ51.320БАК.002 ПО
21
Изм.
Письмо
№ докум.
Подпись
Дата
IPадрес, порт, открытый и закрытый ключи SSL.
5.4.3 Модуль Requests
Requests – библиотека Python, выполняющая HTTP-запросы (HyperText
Transfer Protocol). Начиная от передачи параметров в URL-адресах до отправки пользовательских заголовков и проверки SSL.
5.5 REST API, HTTP-запросы, JSON и череда сообщений
5.5.1 REST API
REST – это стиль архитектуры программного обеспечения, который используется для построения распределенных масштабируемых веб-сервисов, использующих запросы HTTP.
REST (Representational State Transfer) – стиль взаимодействия компонентов распределенного приложения в сети. REST имеет согласованный набор учитываемых ограничений при проектировании распределенной гипермедиа-системы. В определенных случаях (интернет-магазины, поисковые системы) это влечет за собой повышение производительности и изменение архитектуры, а именно ее упрощение.
Компоненты в REST своим взаимодействием напоминают взаимодействие клиента и сервера в Интернете.
Вызов удаленной процедуры в сети Интернет может представлять собой обычный HTTP-запрос (обычно "GET" или "POST"; такой запрос называют "REST- запрос"), а все необходимые для передачи данные передаются в качестве параметров запроса.
Письмо
ИТ51.320БАК.002 ПО
21
Изм.
Письмо
№ докум.
Подпись
Дата
Для веб-служб, построенных с учетом REST, применяют так называемый термин «RESTful».
В отличие от веб-сервисов на основе SOAP, не существует единого официального стандарта для термина RESTful веб-API. Поскольку REST является архитектурным стилем, в то время как SOAP является протоколом. REST не является стандартом сам по себе и, несмотря на это, большинство RESTful- реализаций используют известные стандарты, такие как: HTTP, URL, JSON и XML.
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 Формат 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
Изм. Письмо
№ докум.
Подпись
Дата
е) гарантированная доставка – сообщения в любом случае будут обработаны и доставлены, независимо от рабочего состояния системы отправителя и системы получателя сообщений. Это достигается использованием асинхронной связи и возможностью хранения сообщения на 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
Изм.
Письмо
№ докум.
Подпись
Дата