skysilver

<<< Назад

Экспорт графиков в 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

Обсуждение (0) (25)

Смотрите так же:
12.07.2019 MajorDoMo и Яндекс Алиса. Алиса, включи канал Карусель.
20.06.2019 MajorDoMo и Яндекс Алиса. Алиса, измени цвет бра на красный.
18.06.2019 MajorDoMo и Яндекс Алиса. Алиса, сделай ярче настольную лампу.
17.06.2019 MajorDoMo и Яндекс Алиса. Алиса, включи свет на кухне.
10.06.2019 MajorDoMo и Яндекс Алиса. Модуль Yandex Home.
06.06.2019 MajorDoMo и Яндекс Алиса. Объединение аккаунтов.
05.06.2019 MajorDoMo и Яндекс Алиса. Регистрация приватного навыка.
03.06.2019 Загрузка PHP-расширения PDO MySQL в Windows
01.06.2019 MajorDoMo и Яндекс Алиса. Публикация вебхуков.
29.05.2019 MajorDoMo и Яндекс Алиса. Общие сведения.
22.05.2019 Экспресс контроль состояния циклов в Linux
08.05.2019 Сценарий контроля состояния SSL сертификатов сайтов
26.01.2019 Мультисерийный кастомный график в модуле Charts
30.12.2018 Личные итоги 2018 года
13.12.2018 График с цветовой индикацией выхода величины за пределы
12.11.2018 Кастомный график в модуле Charts
15.08.2018 Кронштейн NB F120 (North Bayou)
18.07.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 3.
20.06.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 2.
15.06.2018 WiFi-информер на светодиодных матрицах MAX7219 и ESP8266. Часть 1.
20.05.2018 Кросс-компиляция ядра для Banana Pi M2U
14.05.2018 Ссылки на ресурсы по MajorDoMo
02.03.2018 Знакомство и тестирование Banana Pi M2U
21.02.2018 Распаковка Banana Pi M2U
14.02.2018 Одноплатный ПК для MajorDoMo
14.08.2018 Заметки по железу
23.01.2018 Мой взгляд на вопрос голосового управления в MajorDoMo
17.01.2018 Обзор цен на устройства Xiaomi
24.12.2017 Гирлянда на ESP8266 и WS2812
20.12.2017 Блог им. skysilver

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

На форуме: skysilver

Веб-сайт:
http://connect.smartliving.ru/profile/461