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

MD4 GoogleConnector Обновления контента из Гугл Таблиц (Служба Windows)

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

О службе

MD4_ContentService (MediaDisplayContentService) – это Windows-служба для автоматического обновления медиа-контента на экранах через сервер Медиадисплей. Служба работает в фоновом режиме, периодически загружает данные из Google Таблиц (или внешнего JSON-источника) и отправляет их на сервер по протоколу SetCover.

Поддерживаются все типы контента: текст, таблицы, изображения, видео и диаграммы. Каждый элемент может обновляться с собственным интервалом (таймером). Служба также умеет переключать макеты (Cover) и имеет собственный журнал событий для диагностики.


Основные характеристики

  • Фоновая работа – служба запускается автоматически при старте Windows.
  • Гибкое обновление – каждый элемент контента (текст, таблица, диаграмма, виджет) имеет свой таймер, задаваемый в конфигурации.
  • Поддержка Google Sheets – чтение данных по source или ListRange с автоподстановкой текущего месяца ([month]).
  • Внешний JSON-источник – можно указать DataUrl для загрузки готового JSON (например, с удалённого сервера).
  • Смена макета – секция [SwitchCover] переключает экран на нужный макет перед отправкой данных.
  • Собственный журнал событий – записи пишутся в MediaDisplayContentService (или Application при недостатке прав).
  • Простая установка/удаление – с помощью бат-файла ServiceInstall.bat (требуются права администратора).

Установка и настройка

Требования

  • Операционная система: Windows 7 / Server 2008 R2 и новее (x64)
  • .NET Framework 4.7.2 (или выше)
  • Сервер Медиадисплей – должен быть доступен по сети
  • Google Sheets API (если используются данные из таблиц) – необходимо получить credentials.json
  • Права администратора для установки службы

Подготовка

  1. Скомпилируйте проект в Visual Studio (конфигурация Debug). Исполняемый файл MD4_ContentService.exe появится в bin\Debug\.
  2. Получите credentials.json для доступа к Google Sheets API (см. документацию утилиты MD4_GoogleConnector).
  3. Поместите конфигурационные INI-файлы в папку ..\MD4_GoogleConnector\Configs\ относительно рабочей папки службы (см. структуру проекта ниже).
  4. Настройте конфигурационный INI-файл (например, menu.ini). Примеры смотрите в разделе Конфигурационные файлы.

Установка службы

  1. Для начала запустите install_eventlog.bat от имени администратора, чтобы установить журналы службы MediaDisplayContentService (правой кнопкой мыши → «Запуск от имени администратора»)
  2. Запустите ServiceInstall.bat от имени администратора.
  3. Выберите номер конфигурации из списка (1–24).
  4. В меню действий выберите 1 – Установить службу.
  5. Служба будет установлена с именем MediaDisplayContentService.
  6. Отображаемое имя: «Служба обновления медиа-контента».
  7. Тип запуска: Вручную.
  8. Запустите службу:
  9. Откройте services.msc.
  10. Найдите «Служба обновления медиа-контента».
  11. Нажмите «Запустить».

Удаление службы

  1. Остановите службу через services.msc.
  2. Запустите ServiceInstall.bat от администратора.
  3. Выберите 2 – Удалить службу.

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

Проект службы MediaDisplayContentService обычно располагается в одной рабочей области с утилитой MD4_GoogleConnector. Ожидаемая структура папок:

Ваш_репозиторий/
├── MD4_GoogleConnector/               # Утилита для работы с Google Sheets
│   ├── Configs/                       # INI-файлы конфигураций
│   │   ├── flight.ini
│   │   ├── menu.ini
│   │   └── ...
│   ├── credentials.json               # Учётные данные Google API
│   └── ...
└── MD4_ContentService/                # Служба Windows
    ├── bin/
    │   └── Debug/
    │       └── MD4_ContentService.exe
    ├── Log/                           # Логи установки/удаления
    │   └── ServiceInstall.log
    ├── ServiceInstall.bat             # Установщик/удалитель
    ├── install_eventlog.bat           # Создание журнала событий
    └── ...

Важно: Путь к папке Configs и credentials.json задаётся в коде службы. При стандартной настройке служба ищет их в ..\MD4_GoogleConnector\ относительно своего местоположения.


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

Служба использует те же INI-файлы, что и консольная утилита MD4_GoogleConnector. Формат полностью совместим.

Секция [Default]

Обязательная секция с основными параметрами:

[Default]
SpreadsheetId=1n29pDQYxg3_OTY3IP8tbUvo9ynnBH_ii8H8-c0T-A8U
ReceiverId=d1
CredentialsPath=credentials.json
ApiUrl=http://127.0.0.1:5206
  • SpreadsheetId – идентификатор Google-таблицы (если используется Sheets).
  • ReceiverId – имя приёмника на сервере Медиадисплей (например d1).
  • CredentialsPath – путь к файлу credentials.json.
  • ApiUrl – адрес сервера Медиадисплей.
  • OutputFileName (необязательно) – если указан, служба будет сохранять отправленный JSON в файл (для отладки).
  • DataUrl (необязательно) – если задан, служба загружает данные по этому URL и игнорирует все остальные секции (кроме [SwitchCover]).

Секция [SwitchCover]

Переключает макет экрана перед отправкой данных:

[SwitchCover]
Cover=MenuBoard
  • Cover – имя макета (темы) на сервере Медиадисплей.

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

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

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

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

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

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

Также доступны [monthName] (русское название) и [monthEN] (английское).

Примеры секций

Текст (отдельный контейнер):

[Title]
Timer=180
enable=true
type=text
name=Title
source=Лист!A1

Таблица (помещается в контейнер widgetsTable):

[Table1]
Timer=10
enable=1
type=table
name=Table
ListRange=Лист!A2:C10
columns=col1,col2,col3

Диаграмма (помещается в контейнер Charts):

[Chart1]
Timer=60
enable=1
type=chart
charttype=line
name=chart1
ListRange=Лист!D1:F10

Изображение (помещается в контейнер Widgets):

[Logo]
Timer=300
enable=1
type=image
name=Logo
source=Лист!G1

Видео (аналогично изображению, тип type=video).


Таймеры для отдельных секций

Каждая секция контента имеет свой Timer. Служба создаёт отдельный таймер для каждой секции, поэтому даже при большом количестве элементов обновление происходит независимо.