XlsxProxy - загрузка табличных данных с ЯндексДиск, GoogleDocs или своего сервера
В свете последних новостей (тут и тут) про будущие блокировки иностранных облачных сервисов для всех пользователей в РФ было решено подготовиться к прозрачной миграции таблиц с GoogleDocs
на ЯндексДиск
или свой сервер.
Требуется поддержка таблиц с несколькими страницами, чтобы была возможность в режиме реального времени редактировать их локализатору или гейм-дизайнеру и результаты были доступны в приложении через несколько секунд.
В качестве формата хранения был выбран xlsx
- переносим между хостингами, умеет в формулы, поддерживается опенсорсными редакторами, включая онлайн-реализации.
Но напрямую с xlsx-документами на клиенте работать неудобно, слишком “жирные” библиотеки придется таскать с собой. Так появился xlsxproxy
- сервер, проксирующий запросы к xlsx
-документам, лежащим по указанным url-адресам, разбирающий их на отдельные страницы и отдающий только нужную в формате csv
.
Особенности сервера:
- Написан на
golang
, потребляет пару десятков мегабайт памяти, хорошо себя ведет под нагрузкой. - Умеет собираться/работать в
docker
, образ занимает меньше 10Мб. - Есть поддержка аутентификации для нескольких пользователей.
- Есть поддержка
ssl
-ключи дляhttps
-шифрации трафика - будет полезным для тех, кто не хочет настраивать фронт-прокси на базе какого-нибудьnginx
для этого. - Есть поддержка кеширования для уменьшения нагрузки на внешние сервисы и снижения риска быть забаненными за многократное скачивание за короткий период (банят на короткий срок, но все-равно неприятно).
Сервер поддерживает xlsx
-документы, доступные по прямым ссылкам (CDN, свой файловый хостинг, например, Seafile
+ OnlyOffice DocumentServer
):
1 | curl -L "http://my.proxy.site/direct?url=<url-encoded-ссылка>&page=<url=encoded-имя-страницы>" |
Так же есть поддержка xlsx
-документов на ЯндексДиск
, доступные по ссылкам из веб-интерфейса окна “Поделиться” (https://disk.yandex.ru/i/aABbCcDdEeFfGg
):
1 | curl -L "http://my.proxy.site/yandex?url=<url-encoded-ссылка>&page=<url=encoded-имя-страницы>" |
Для облегчения миграции была добавлена поддержка таблиц-документов и для GoogleDocs
, доступные по ссылке из адресной строки браузера (https://docs.google.com/spreadsheets/d/111222__AaaBbb/edit?gid=1548517124
):
1 | curl -L "http://my.proxy.site/google?url=<url-encoded-ссылка>&page=<url=encoded-имя-страницы>" |
Пакет Leopotam.GoogleDocs.Unity
был расширен новым функционалом для облегчения работы с xlsxproxy
-сервером.
Поддержка скачивания с прямой ссылки:
1 | // Адрес xlsxproxy-сервера, включая порт и префикс апи. |
Поддержка скачивания с YandexDisk:
1 | string xlsxProxy = "http://my.proxy.site"; |
Поддержка скачивания с GoogleDocs:
1 | string xlsxProxy = "http://my.proxy.site"; |
Так же поддерживается http basic
аутентификация:
1 | string xlsxProxy = "http://my.proxy.site"; |