MD4 GoogleConnector: Обновление контента из Гугл Таблиц (Утилита)
> Медиадисплей > Интеграции > Интеграция с GoogleДата обновления: 12 июня 2026 г. Дата публикации: 30 марта 2026 г. Автор: Жапов Ананда
О проекте
MD4_GoogleConnector – это утилита для отображения данных из Google Таблиц (или внешнего JSON) на экранах через сервер Медиадисплей. Она позволяет настраивать различные типы контента: текст, таблицы, картинки, видео и диаграммы. Настройки хранятся в INI-файлах.
Установка
- Склонируйте репозиторий:
- Нажмите кнопку Code → Clone with HTTPS, скопируйте ссылку.
- В Visual Studio: Git → Клонировать репозиторий, вставьте ссылку и выберите папку.
- Убедитесь, что установлен .NET Framework 4.7.2.
- Получите файл
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не читаются и секции контента игнорируются.