Получение курсов валют, погоды по городу.
Сказал бы, что это больше проба пера, а не готовая и быстро работающая.
Для себя работать будет быстро)
Первоначально конфигурация планировалась для сбора курсов валют банков Беларуси,у которых API в публичном доступе без регистрации и SMS. =)
Затем, рассказав одному другу про простую идею, он говорит — а сделай какого-нить робота для работы с телеграмм, чтобы можно было получать курсы и прогноз погоды.
Идея понравилась, и приступил к пробе пера работы с Телеграмм.
Первоначально опишу, что были созданы "универсальные" объекты
Справочник
Сервисы
- —имя сервера — имя сервера обращения к API
- -https — признак защищенного соединения
- -Токен — если требуется для авторизации(об этом ниже)
- -КодАбревиатуры- краткий код сервиса для того что бы определить и красиво вывести в сообщении курсов и дальше для развития
- -Формат даты — Формат в какую надо преобравывать Дату для API(если требуется).
- Количество обращений за день-некоторые сервисы.
РегистрСведений
- ЖурналРегистрацииСервисов — в нем храним обращения на сервисы, признак успешного выполнения, описаниеОшибки, если не выполнен.
В справочнике "Сервисы" будут храниться наши настроенные сервисы(заполнение их опишу чуток ниже).
В РС "Журналы регистрация запросов" пишем запросы к сервисам, к которым будем обращаться (когда обращались и успешно ли и, если была ошибка, — описание ошибки).
Для начала собрал все API банков РБ, которые есть в публичном доступе.
У половины банков, а точнее у 2/3 курсы валют хранятся в разрезе подразделений, хотя есть и просто курсы валют.
Решил, что буду делать по подразделениям.
Были созданы следующие объекты для данного куска подсистемы:
Справочники
- Валюты
- Банки
- ПодразделенияБанка
РегистрСведений
- КурсыВалют
Модуль
- РаботаСКурсамиВалют
Регламентное задание
- ЗаполнитьКурсы(по умолчанию запрос выполняется каждый час)
PS
В справочнике Банки созданы предопределенные элементы для большего удобства работы с ними.
В справочнике "Банки" в поле "Сервис" выбираем нужный нам элемент, который настроили.
После этой настройки запускаем регламентное задание.
Первоначально произойдет заполнение справочника валюты и курсы НБРБ.
Поскольку каждый банк предоставляет структуру ответа по валютам разные(у кого-то код валюты идет как USD,у кого-то код 984) ,создал 3 константы
- валютаUSD
- ВалютаEUR
- ВалютаRUB
чтобы определить как-то, что это за валюта.
После заполнения данных констант, в следующий раз при отработке обновления курсов, произойдет заполнения регистра "Курсы валют" по банкам.
PS
Как писал выше, курсы валют заполняются по подразделениям, тут чуток соврал, поскольку в коде прописал по головному офису, но задел оставил на будущую реализацию, прошу сильно не бить. = )
Настраиваем регламентное "ЗаполнитьКурсы" и по сути с валютами и все!
Дальше идет сервис для получения погоды.
Сначала идем на сайт https://openweathermap.org/ -крупный сервис предоставления данных о погодных условиях(Есть платные API и бесплатные).
-Какие мы будем использовать????
-Правильно!Бесплатные!))))
Регистрируемся на нем.
После прохождения регистрации и заполнения обычных полей к нам на почту прилетает письмо с Токеном доступа к нашему сервису.
PS
Токен, который пришел в письме, может быть сразу недоступен (до пары часов).
Это пишется в документации.У меня стал доступен примерно через мин 30.
Для данного модуля были созданы
Справочники
- Город
- ПогодныеСобытия
Модуль
- РаботаСПрогнозомПогоды
РС
- Погода
Что надо, чтобы получить данные о погоде?
В справочнике "Сервисы",там уже есть предопределенный элемент OpenWeatherMap.
Открываем его и заполняем
- Токен-берем из письма
- Адрес сервера — api.openweathermap.org
- https- ставим если защищенное соединение (в нашем случае ставим в истина)
- В обработке "Получение данных",на закладке "Получение данных" вводим город и выполняем команду "Получить погоду по городу".
При выполнении команды,происходит обращение к сервису,после если все ответ положительный,тогда создается город(по ID),события погоды(по ID) и происходит запись в регистр "Погода".
В РС записываю данные
- Погодное событие
- температру (цельсий)
- Влажность(%)
- давление (гетроПаскаль)
Данные записанные можно увидеть в выше описанном регистре сведений.
Дальше идет работа с Telegram.
Как создать бота в телеграмм и получить его Токен и прочую информацию, можно найти в интернете ,тут дублировать не буду а то и так много букав =)
Для работы с телеграмм были созданы следующие объекты
Справочники
- ПользователиТелеграм
Модуль
- РаботаСТелеграм
РС
- ИсторияСообщений
РегламентноеЗадание
- ОбщениеСБотомТелеграмм(расписание каждые 2 сек)
Для настройки необходимо зайти в справочник "Сервисы" и для одноименного элемента заполнить след. поля:
- Токен- получен от @BotFather
- Имя сервера — api.telegram.org
- https- ставим если защищенное соединение (в нашем случае ставим в истина)
Работа производится с помощью метода GetUpdates который есть в документации.
В регистр сведений записываются сообщения полученные от бота
- ID пользователя
- дата получения/отправки
- текст сообщения
Команды, которые там созданы, конечно, "запилены" руками, что не есть хорошо, но для личного пользования и поиграться интересно.
После получения списка обновлений,получаю ID пользователя и его структуру данных и смотрю есть ли с таким ID пользователь в базе.Если нету то создаю его.
Записываю данные в регистр "История сообщений" и затем анализирую команды пришедшие(текстом) уже по сравнению на имя команды выдаю то что мне надо.Данные отправленные фиксирую в том же регистре сведений.
Так же есть обработка, которая была сделана для отладки получения курсов,общение с ботом,получение погоды.
Что хотелось бы дальше попробовать и что улучшить???
1)Надо делать это все через вебхуки потому что если нагрузку дать я думаю робот будет "подтупливать" и отправлять с задержкой ответы.
2)Сделать как то универсальнне настойку команд ,что бы гибче их настраивать можно было.
3)Отправлять красивые сообщение и с клавиатурой telegram.
PS
Опыт интересный для пробы пера с telegram,поскольку опыта работы с большими мессенджерами с их API таких ресурсов не было.
Как переделаю на вебхуки и решу выше описанные цели тогда добавлю в это же статью или же уже новую.
19.07.2024
Новая версия конфигурации(v 1.1)
Что сделано было.
Было добавлена inline- клавиатура
клавиатура по получению курсов валют,поиска погоды по введенному городу на текущий момент и на ближайшие 2 дня.
Скрин шоты приложены выже.
ДТ- перезалита.
23.07.2024
Новая версия конфигурации(v 1.2)
Добавлено получение погоды по географическим координатам в обработке.
Добавлена настройка прокси если необходимо в справочнике "Сервисы".
Тестирование производилось на платформе 1С:Предприятие 8.3 (8.3.13.1644)
В файле прикреплена DT-шка с данными.
Перезалил CF так мне кажется удобнее для тех кто уже скачал и накатит обновление или просто захочет сам настроить все это сам.
Телеграмм работает через прокси? Можете описать, какой устанавливаете адрес и где берете новые, пока не заблокировали существующий?
(1)у нас в РБ такого нету))))
Не через прокси работает.
надо в настройке сервиса предусмотреть это будет.