skysilver

 
<<< Back

Экспорт графиков в PNG-файл в модуле Charts

Используем новый функционал модуля Charts для экспорта графиков в файл с последующей отправкой в Telegram.

Как известно, библиотека Highcharts, используемая в модуле Charts, отрисовывает графики не на серверной стороне, а в браузере клиента (пк, планшет, телефон и т.п.), передавая только конфигурацию графика и собственно сами данные в текстовом виде. А чтобы использовать изображения графиков в своих сценариях, необходимо формировать их именно на стороне сервера.

С недавнего времени в модуль Charts добавлен функционал экспорта графиков в файл с изображением в формате PNG. Данный функционал основывается на использовании облачного сервиса экспорта Highcharts - https://export.highcharts.com Если по каким-то причинам сторонний внешний сервер не подходит, то есть возможность развернуть локальный сервис экспорта (подробнее здесь).

Известные ограничения:

  1. Максимум 10 запросов в минуту.
  2. Максимальная ширина графика 2000 px.
  3. Для передачи данных используется незащищенный HTTP-протокол.

Чтобы получить изображение графика в своих сценариях, потребуется три строчки кода.

include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
$chartPNG = $charts->getImage(4);

При успешном выполнении в переменной $chartPNG будет содержаться путь к изображению графика.

Как видно из примера, используется функция getImage(), которая в качестве обязательного параметра принимает уникальный идентификатор (ID) конкретного графика. Опционально можно указать высоту и ширину изображения (в пикселях) и путь сохранения файла (включая имя и расширение файла).

Описание функции getImage()

getImage($chart_id, $chart_height, $chart_width, $path)

Список параметров

  • int $chart_id - Уникальный идентификатор графика в модуле. Обязательный параметр.
  • int $chart_height - Высота изображения (пикселей). Опциональный параметр. Если не указано, используется значение 300.
  • int $chart_width - Ширина изображения (пикселей). Опциональный параметр. Если не указано, используется значение 800.
  • string $path - Полный путь к файлу изображения, включая имя файла и расширение. Опциональный параметр. Если не указано, используется каталог ./cms/cached/

Возвращаемые значения

  • string|bool Возращает строку, содержащую относительный (от корня каталога MajorDoMo) путь к файлу, или false при ошибках.

Проверка работы функции экспорта.

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

Для начала узнаем ID графика в модуле Charts (область с подсказкой на вкладке Общее).
id3_0

Пишем и сохраняем сценарий.
id3_1

include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
$chartPNG = $charts->getImage(3, 350, 1000);
print('Путь к файлу: ' . $chartPNG . '<br><br>');
print('<img src="' . $chartPNG . '">');

Затем запускаем сценарий по ссылке и получаем результат.
id3_2

Отправка графика в Telegram.

Рассмотрим отправку графика в Telegram по запросу (команде) пользователя.

Сначала определяемся с идентификатором нужного графика в модуле Charts (см. выше).

Затем в модуле Telegram создаем и настраиваем команду.

id7_1

include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
$chartPNG = $charts->getImage(7);
$this->sendImageToUser($chat_id, ROOT.$chartPNG);

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

id7_2

Discuss (1) (32)

See also:
2020-04-06 Получение данных о COVID с карты Яндекс
2019-07-12 MajorDoMo и Яндекс Алиса. Алиса, включи канал Карусель.
2019-06-20 MajorDoMo и Яндекс Алиса. Алиса, измени цвет бра на красный.
2019-06-18 MajorDoMo и Яндекс Алиса. Алиса, сделай ярче настольную лампу.
2019-06-17 MajorDoMo и Яндекс Алиса. Алиса, включи свет на кухне.
2019-06-10 MajorDoMo и Яндекс Алиса. Модуль Yandex Home.
2019-06-06 MajorDoMo и Яндекс Алиса. Объединение аккаунтов.
2019-06-05 MajorDoMo и Яндекс Алиса. Регистрация приватного навыка.
2019-06-03 Загрузка PHP-расширения PDO MySQL в Windows
2019-06-01 MajorDoMo и Яндекс Алиса. Публикация вебхуков.
2019-05-29 MajorDoMo и Яндекс Алиса. Общие сведения.
2019-05-22 Экспресс контроль состояния циклов в Linux
2019-05-08 Сценарий контроля состояния SSL сертификатов сайтов
2019-01-26 Мультисерийный кастомный график в модуле Charts
2018-12-13 График с цветовой индикацией выхода величины за пределы
2018-11-12 Кастомный график в модуле Charts
2018-08-15 Кронштейн NB F120 (North Bayou)
2018-07-18 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 3.
2018-06-20 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 2.
2018-06-15 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 1.
2018-05-20 Кросс-компиляция ядра для Banana Pi M2U
2018-05-14 Ссылки на ресурсы по MajorDoMo
2018-03-02 Знакомство и тестирование Banana Pi M2U
2018-02-21 Распаковка Banana Pi M2U
2018-02-14 Одноплатный ПК для MajorDoMo
2018-08-14 Заметки по железу
2018-01-23 Мой взгляд на вопрос голосового управления в MajorDoMo
2018-01-17 Обзор цен на устройства Xiaomi
2017-12-24 Гирлянда на ESP8266 и WS2812
2017-12-20 Блог им. skysilver

Киров, Россия

На форуме: skysilver

Web-site URL:
http://connect.smartliving.ru/profile/461