ТЕХНИЧЕСКАЯ ДОКУМЕНТАЦИЯ

MD4 GoogleConnector: Обновление контента из Гугл Таблиц (Утилита)

> Медиадисплей > Интеграции > Интеграция с Google
Дата обновления: 12 июня 2026 г. Дата публикации: 30 марта 2026 г. Автор: Жапов Ананда

О проекте

MD4_GoogleConnector – это утилита для отображения данных из Google Таблиц (или внешнего JSON) на экранах через сервер Медиадисплей. Она позволяет настраивать различные типы контента: текст, таблицы, картинки, видео и диаграммы. Настройки хранятся в INI-файлах.


Установка

  1. Склонируйте репозиторий:
  2. Нажмите кнопку CodeClone with HTTPS, скопируйте ссылку.
  3. В Visual Studio: Git → Клонировать репозиторий, вставьте ссылку и выберите папку.
  4. Убедитесь, что установлен .NET Framework 4.7.2.
  5. Получите файл credentials.json для доступа к Google Sheets API и поместите его в папку с утилитой.

Как получить credentials.json для доступа к Google Sheets API?

Подробная инструкция по получению ключа доступа к Google API.


Запуск

Запустите файл MD4_GoogleConnector.bat. Вы можете изменить конфигурационный файл по умолчанию, отредактировав строку:

set EXE_PATH=%~dp0bin\Debug\MD4_GoogleConnector.exe config=Configs\charts.ini

Структура проекта

MD4_GoogleConnector/
├── bin/                  # Скомпилированные файлы
├── Configs/              # Папка с конфигурационными файлами (.ini)
│   ├── charts.ini        # Диаграммы
│   ├── flight.ini        # Аэропорт (табло вылетов)
│   ├── menu.ini          # Меню-борд (кафе)
│   ├── menu2.ini         # Второе меню
│   ├── movie.ini         # Кинотеатр (расписание)
│   ├── movie2.ini        # Кинотеатр с двумя таблицами
│   ├── movie3.ini        # Кинотеатр с полноэкранным видео
│   ├── orders.ini        # Заказы (кухня)
│   └── ...               # Другие конфиги
├── Log/                  # Логи работы утилиты
│   └── MD4_GoogleConnector.log
└── MD4_GoogleConnector.bat  # Скрипт запуска

Конфигурационные файлы (INI)

Конфигурационные файлы имеют формат INI и содержат следующие разделы.

Секция [Default] – основные настройки

Обязательные параметры:
- SpreadsheetId – ID Google-таблицы (если не используется внешний источник).
- ReceiverId – идентификатор приёмника (название экрана в Медиадисплей).
- CredentialsPath – путь к файлу credentials.json.
- ApiUrl – URL сервера Медиадисплей (например, http://127.0.0.1:5206).

Необязательные параметры:
- OutputFileName – имя файла для сохранения выходного JSON (полезно для отладки).

[Default]
SpreadsheetId=1n29pDQYxg3_OTY3IP8tbUvo9ynnBH_ii8H8-c0T-A8U
ReceiverId=d1
CredentialsPath=credentials.json
ApiUrl=http://127.0.0.1:5206
; OutputFileName=debug.json

Примечание: Параметр Timer в секциях контента в утилите не используется – он предназначен для службы.

Секция [SwitchCover] – смена макета (темы)

Необязательный раздел. Позволяет переключить экран на нужный макет перед отправкой данных.

[SwitchCover]
Cover=MenuBoard      # Имя макета на сервере Медиадисплей

Секции контента

Каждая секция описывает один элемент на экране. Доступные параметры:

Параметр Обязательный Описание
enable да 1 / true / on – включить; 0 / false / off – выключить.
type да Тип данных: text, table, chart, image, video, external.
name да Имя контейнера в макете (должно совпадать с именем в редакторе Медиадисплей).
source для text/image/video Адрес ячейки в Google Sheets: Лист!A1.
value альтернатива source Статическое значение (текст, HTML-код).
ListRange для table/chart Диапазон данных: Лист!A1:C10.
columns для table Имена колонок через запятую (количество должно совпадать с числом столбцов в ListRange).
charttype для chart Тип диаграммы (см. список ниже).

Подстановка текущего месяца

В ListRange и source можно использовать плейсхолдер [month], который автоматически заменяется номером текущего месяца (1–12). Например:

ListRange=[month]!W3:Z29      → 6!W3:Z29 в июне

Также доступны:
- [monthName] – название месяца на русском (Май, Июнь…)
- [monthEN] – название месяца на английском (May, June…)

Секция [ExternalSource] – внешний JSON-источник

Если указана эта секция, утилита игнорирует Google Sheets и все остальные секции контента, загружает JSON по указанному DataUrl и отправляет его в Медиадисплей.

Параметр Обязательный Описание
enable да 1 / true / on – включить.
type да Должен быть external.
DataUrl да URL, откуда загружается JSON (GET-запрос).

Пример:

[ExternalSource]
enable=1
type=external
DataUrl=http://192.168.1.100:8000/display_data

Формат ожидаемого JSON – SetCoverRequest:

{
  "Name": "d1",
  "Cover": "Statistic",
  "Data": [ ... ]
}

Если поле Name отсутствует, утилита подставит значение из ReceiverId. Если задан [SwitchCover], его Cover добавится (или перезапишет существующий).


Типы диаграмм (charttype)

Значение Описание
bar Столбчатая диаграмма
line Линейная диаграмма (с областями)
pie Круговая диаграмма
polar Полярная диаграмма
radar Лепестковая диаграмма
radial Кольцевая диаграмма с процентами
range_area Область диапазона
timeline Временная шкала
funnel Воронка
candlestick Свечной график
boxplot Коробочный график
bubble Пузырьковая диаграмма
scatter Точечная диаграмма
heatmap Тепловая карта
treemap Древовидная карта
sparklines Спарклайны
text Текстовая сводка

Логирование

Логи работы автоматически сохраняются в Log/MD4_GoogleConnector.log (после запуска .bat). В логах фиксируются:
- Время запуска и завершения работы.
- Коды ошибок и их описания.
- Детали выполнения.

Коды ошибок

Код Описание Возможные причины
0 Success Корректное выполнение.
1 ConfigurationError Ошибка в конфигурационном файле .ini (неверные параметры, отсутствие обязательных секций).
2 FileNotFound Отсутствует credentials.json или указан неверный путь к конфигурационному файлу.
3 GoogleApiError Проблемы с Google Sheets API (неверный ID таблицы, превышение квоты, отсутствие прав).
4 InvalidDataFormat Неверный формат данных (повреждённый JSON, нечисловые значения в диаграмме).
5 NetworkError Нет связи с сервером Медиадисплей (неверный ApiUrl, отключена сеть).

Примеры конфигураций

Изменение макета экрана (в каждом конфиге)

[SwitchCover]
Cover=Assortment

Текст (заголовок, подзаголовок, цена)

[Title]
enable=true
type=text
name=Заголовок
source=Лист!A1

Статический текст (без Google Sheets)

[Footer]
enable=true
type=text
name=Подвал
value=© 2026 Моя компания

Логотип (изображение)

[Logotype]
enable=1
type=image
name=Логотип
value=<img src="logo.png" alt="Логотип" width="150" height="auto">

Таблица меню для кафе (menu.ini)

[TableMenuBoard]
enable=1
type=table
name=Меню
ListRange=Меню!B3:E8
columns=Name,Description,Old_Price,Price

Таблица расписания сеансов (movie.ini)

[SheetMovie]
enable=1
type=table
name=ТаблицаСеансов
ListRange=Кино!A2:E5
columns=Кадр,Дата,Фильм,Время,Цена

Диаграмма температур (charts.ini)

[Chart8]
enable=true
type=chart
charttype=range_area
name=chart8
ListRange=Диаграммы!A61:C85

Внешний JSON-источник (без Google Таблиц)

[Default]
SpreadsheetId=1
ReceiverId=d1
CredentialsPath=credentials.json
ApiUrl=http://127.0.0.1:5206

[SwitchCover]
Cover=Statistic

[ExternalSource]
enable=1
type=external
DataUrl=http://192.168.1.100:8000/display_data

Примечания

  • Timer в секциях контента не работает в консольной утилите – он предназначен только для Windows-службы.
  • Для отладки используйте OutputFileName=debug.json в [Default] – после запуска утилиты откройте полученный JSON и проверьте структуру.
  • Если используется [ExternalSource], параметры SpreadsheetId не читаются и секции контента игнорируются.