Библиотека для работы с Google Drive API (open-source)

11.08.24

Интеграция - WEB-интеграция

Новая небольшая библиотека в составе Открытого пакета интеграций для работы с Google Drive. Поддерживает работу с файлами, каталогами и комментариями

Если вы не слышали ранее об Открытом Пакете Интеграций (что вполне вероятно), то небольшая вводная часть ниже, под катом. Для тех, кто уже знаком с ОПИ, данный раздел можно пропустить.

 
 Что такое Открытый Пакет Интеграций

 

Открытый Пакет Интеграций (ОПИ) - это open-source набор методов для простой и быстрой интеграции с различными популярными API. Он состоит из аналогичных по функционалу 1С-расширения (CFE), OS-пакета и программы для Windows и Linux, которые предоставляют готовые функции для работы с целым набором различных онлайн-сервисов.


  • ОПИ бесплатен и имеет открытый исходный код на GitHub. Вы всегда можете получить последнюю версию библиотеки на странице репозитория, а подписавшись - узнавать о выходе обновлений. Все релизы сопровождаются статьями на Инфостарт и разделами единой документации. На Инфостарт вы можете подписаться уже хоть сейчас, а про документацию я расскажу далее.

 

 

 

  • Удобная единая документация. Она расположена на сайте opi.neocities.org и содержит в себе всю информацию, необходимую для работы: инструкции по предварительным действиям для начала интеграции, описания всех методов с параметрами и возвращаемыми значениями, примеры кода и т.д. Каждый API имеет там свой раздел.

 

 

 

 

  • Простая установка. ОПИ распространяется во множестве вариантах: как XML файлы расширения, как EDT проект расширения, как файл расширения формата .cfe (версия 1С 8.3.9), как файл пакета для OneScript и еще в целом наборе пакетов и файлов для Windows и Linux. Из этого набора вы всегда сможете выбрать тот способ установки, который лучше подойдет для вашей конкретной задачи

 

На момент последнего обновления данной статьи, доступны следующие API:

Наиболее актуальную информацию можно посмотреть в репозитории или на вводной странице документации.

 

Google Drive - популярное облачное хранилище, один из сервисов Google Workspace. В этом обновлении были добавлены основные методы, позволяющие с ним взаимодействовать посредством API

 

Реализованные методы:

  • Работа с файлами и папками
    • Получение информации об объекте
    • Получение списка каталогов
    • Получение списка файлов
    • Загрузка файлов
    • Копирование файлов
    • Обновление двоичных данных существующих файлов
    • Скачивание (получение двоичных данных) файлов
    • Создание каталогов
    • Удаление объектов
  • Работа с комментариями
    • Получение комментария по ID
    • Получение списка комментариев объекта
    • Создание комментария
    • Удаление комментария

 

Применение их, в целом и по смыслу, совпадает с таковыми у библиотеки для работы с Yandex Disk. API Яндекса мне нравится больше и функционал там шире, но вы можете выбрать (или даже уже используете) тот сервис, который вам более удобен - теперь они тут есть оба, а основные функции, будь то загрузить, скачать или удалить ничем особенно не отличаются. Зацеплю лишь некоторые основные моменты.

 

Общие токены на сервисы Google Workspace

 

До сегодняшнего релиза в Открытом пакете интеграций уже была библиотека из набора сервисов Google - это библиотека для планировщика Google Calendar. Если вы использовали её, то наверняка проходили довольно длинный и муторный процесс первоначальной регистрации и настройки всего необходимого перед началом работы, который описан в документации.

Повторять весь процесс целиком для вас, конечно же, будет не нужно - достаточно лишь выполнить два последних пункта: активировать API Google Drive и заново получить токен по ссылке из функции OPI_GoogleWorkspace.СформироватьСсылкуПолученияКода().

 

Важно

В зависимости от того, какие сервисы вы используете, зависит и количество необходимых разрешений при формировании ссылки получения токена. Определяется это параметрами функции СформироватьСсылкуПолученияКода - Calendar и Drive (на данный момент).

Разрешения тех API, которые вы не используете, необходимо передать как Ложь - значения по умолчанию для всех библиотек равны Истина
 


Данная функция не является методом для частого использования - она необходима лишь для стартовой настройки и потом больше не применяется. Так что, думаю, проблем с этим возникнуть не должно

 

Осторожное использование рекурсивных методов

 

Методы, отвечающие за получение списков объектов, а именно ПолучитьСписокКаталогов и ПолучитьСписокФайлов, рекурсивно отправляют запросы к Google Workspace до тех пор, пока те не закончатся.

Выполнение данных методов без отборов, в частности на дисках с большим количество файлов, может привести к тому, что а) все будет получаться очень долго, а найти в полученном ответе из тысяч файлов что-либо будет крайне сложно б) будет съедено очень много квоты выполнения запросов к сервису

Так что, несмотря на необязательность параметров отбора, таких как ИмяСодержит и Каталог, выполнять функции без них не рекомендуется (пусть и не воспрещается).

 

 

Блок работы с комментариями

 

Если с первой частью библиотеки, которая отвечает за работу с файлами и каталогами, все вполне понятно, то про комментарии лично я не знал до того, как увидел их описание в документации к API. Ничего сложного или невероятного в данном в функционале нет, остановимся на нем лишь вкратце.

Комментарии в Google Drive - небольшие текстовые заметки, которые можно оставлять применимо к файлам, лежащим на облачном диске. Нас они, в первую очередь, могут заинтересовать возможностью взаимодействия между пользователем из 1С и пользователем, который работает лишь напрямую с Drive через приложение или web-интерфейс.

Например, мы можем оставить комментарий через API из 1С по какому либо событию. Делается это вот таким простым кодом:

 

  Идентификатор = "1rCyOc4A8VYw7DM3HV55P9BuKWayJOSvW";
  Комментарий   = "Новый комментарий"; 

  Ответ = OPI_GoogleDrive.СоздатьКомментарий(Токен, Идентификатор, Комментарий);

 

И теперь этот комментарий будет виден всем пользователям, у которых есть доступ к файлу на диске

 

 

В свою очередь, комментарий, добавленный руками напрямую, может быть получен назад из 1С. Делается это также просто:

 

    ИДФайла = "1rCyOc4A8VYw7DM3HV55P9BuKWayJOSvW";
    Ответ   = OPI_GoogleDrive.ПолучитьСписокКомментариев(Токен, ИДФайла);

 

Ничего особенного, но применение можно найти.

 

Немного новостей проекта

 

Про новую библиотеку рассказать больше особо нечего: методы как методы, API как API - все как всегда есть в документации



 

Расскажу немного про сам проект ОПИ. Последнее время я занимаюсь автоматизацией некоторых часто повторяющихся монотонных действий, которые приходится совершать в процессе разработки библиотеки.

Я уже рассказывал про автотесты в статье про портирование Открытого пакета интеграций на OneScript, но сейчас, помимо этого, сам процесс "внутренней кухни" поддержки двух схожих кодовых баз - 1С и OneScript - перенесен на Github Actions. А значит его видно теперь и снаружи.

 

 

Я обязательно посвящу этому отдельную статью, где расскажу, что это такое и зачем оно нужно, но, если вы уже некоторым образом в теме, то есть отдельные моменты, которые могут быть вам интересны уже сейчас. В частности, в моем workflow есть примеры реализации таких вещей как:
 

  • Выполнение кода на OneScript внутри Github Actions для преобразования структуры кода проекта EDT в структуру кода пакета OneScript. В самом скрипте ничего особенного нет - на 1С же, но вот с кодом самого описания процесса запуска уже все не так однозначно.

    Не буду пока подробно его разбирать, скажу лишь, что сама возможность запуска OneScript внутри Github Actions - это очень здорово. Будущее наступило, так сказать :)
     
     
     Простой запуск OS скрипта для примера



     
  • Выполнение тестирования asserts через 1testrunner. Прописано оно достаточно топорно, но это в угоду подробности логирования 


     
  • Принцип хранения, расшифровки и последующего шифрования данных, применяемых в тестах.

    Смысл таков, что в репозитории хранится зашифрованный json с различными токенами и ключами. В процессе тестирования он расшифровывается, служит источником информации для тестов (тесты также могут записывать в него новую информацию - например, обновленные токены), после чего шифруется обратно и сохраняется в репозитории. Шифрование и расшифровка реализованы при помощи gpg.
     
  • Пример передачи файлов-артефактов между процессами. Это необходимо в тех случаях, когда один и тот же файл должен передаваться между различными процессами обработки. У меня так, например, передается тот файл с ключами и токенами между процессами Расшифровка -> Тестирование -> Шифрование

 

Если же Github Actions вам пока ни о чем не говорит, то данный блок, тем не менее, может быть интересен в других двух случаях 
 

  • При создании форков этот workflow переходит в новый репозиторий, а значит его также можно использовать в своем ответвлении. Шаблон файла данных для тестирования я добавлю чуть позже.
  • Если какой-то момент в использовании библиотеки остается для вас непонятным по документации, то глядя одним глазом в файл тестов, а другим - в результаты их выполнения внутри GA, можно получить прямой актуальный пример "программный код -> результат выполнения"

    Код библиотеки для 1С и код библиотеки для OneScript - это один и тот же код, так что результаты этих тестов релевантны для обеих библиотек
     

 

Тестирование запускается довольно часто, а значит данные в результатах всегда будут актуальны.

Не всегда, правда, весь процесс тестирования целиком выполняется успешно, но только лишь по причине постоянных временных блокировок меня различными сервисами за чрезмерное их использование :Р

 

Так или иначе, теперь процесс тестирования стал более прозрачным для вас, а процесс сборки релизов - простым для меня. Посмотреть на это все можно по ссылке.

Ну а пока все.

 

Спасибо за внимание!

 

 

Репозиторий ОПИ: github.com/Bayselonarrend/OpenIntegrations

Последний релиз: github.com/Bayselonarrend/OpenIntegrations/releases/latest

 

Другие статьи про Открытый пакет интеграций на Инфостарт:

 

 

 Мой GitHub:     https://gitub.com/Bayselonarrend 
 Лицензия MIT:   https://mit-license.org

Google Drive Google Drive Google Диск api облако облачное хранилище web интеграция workspace

См. также

WEB-интеграция Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Функциональное решение для торговли на всех популярных маркетплейсах. Работает со схемами FBO и FBS. Простое в использовании и установке, не вносит изменения в код программы. Существенно упрощает работу с товарным ассортиментом, обработку заказов с площадок, работу с поставками, а также ведение аналитики по продажам и остаткам.

72000 руб.

19.07.2024    1453    52    0    

3

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    17797    49    50    

29

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14179    41    8    

16

Обмен с ГосИС Мастера заполнения WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Оперативный учет Управляемые формы 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Универсальное расширение конфигурации для автоматической загрузки и заполнения реквизитов контрагентов (партнеров) из ОГРН для 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.4), 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.2), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.5), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.4), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.3), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.4), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.0) и 1С:Бухгалтерия 8 (Бухгалтерия предприятия, редакция 3.0).

3900 руб.

08.11.2017    63192    404    295    

72
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. seperblunt 18.03.24 16:48 Сейчас в теме
2. dmfaleleev 25 18.03.24 18:44 Сейчас в теме
Огонь! Спасибо большое за ваш труд
3. alkar 90 02.04.24 16:33 Сейчас в теме
Подскажите, может кто то сталкивался? пытаюсь с помощью данной библиотеки отправить файл ~8 гб на google disk получаю ошибку "Превышена допустимая длина потока."
4. bayselonarrend 2033 02.04.24 16:58 Сейчас в теме
(3)Да, была проблема - 1С-ная ЗаписьДанных не может проглотить такие большие двоичные данные для записи в тело запроса. Пока решения еще найдено не было.
5. bayselonarrend 2033 02.04.24 17:02 Сейчас в теме
(3) Если не слишком срочно, могу посмотреть в течении пары дней
6. alkar 90 03.04.24 15:51 Сейчас в теме
Было бы не плохо, очень ждём! Спасибо.
7. bayselonarrend 2033 03.04.24 16:21 Сейчас в теме
(6) Я как-то сразу не сообразил - вы про 1Сную версию говорите или про OneScript?

Кто-то уже писал про такую проблему на OS версии, а на 1Ске я вчера пробовал загрузить 10гб zip - у меня выпало "Превышено время ожидания", но не поток
8. alkar 90 04.04.24 09:41 Сейчас в теме
9. bayselonarrend 2033 04.04.24 09:46 Сейчас в теме
(8) Я еще посмотрю разные варианты, но пока я попытался разбить 10 гб файл на части - OneScript сожрал 12 гб оперативы и вылетел в BSOD :) В статье про Яндекс.Диск говорили, что это тех. ограничение платформы - возможно намеренное, чтобы такого не случалось
10. bayselonarrend 2033 06.04.24 16:00 Сейчас в теме
(8)Ну вроде что-то получилось.

https://github.com/Bayselonarrend/OpenIntegrations/releases/tag/1.5.2

Процесс загрузки не быстрый - 10 гб где то час - час 15 загружалось (что в версии для 1С, что в версии для OS). Но 99% времени - отправка http запроса (которая уже непосредственно Соединение.ВызватьHTTPМетод), так что тут мои полномочия все. Наверняка на это еще скорость интернета влияет и при действительно быстром соединении будет быстрее.

Функция библиотеки не поменялась - она сама определит большой файл и пустит его по новой ветке
11. alkar 90 07.04.24 09:33 Сейчас в теме
(10) Спасибо, будем пробовать, сообщу результат.
bayselonarrend; +1 Ответить
12. alkar 90 09.04.24 10:34 Сейчас в теме
Посмотрел, загрузка идёт(скриншот) но по итогу файл в google drive не появляется. Хотя маленький файл загружается без проблем и я его вижу в google.
Прикрепленные файлы:
bayselonarrend; +1 Ответить
13. bayselonarrend 2033 09.04.24 10:42 Сейчас в теме
(12)Посмотрю. Только большая просьба кинуть это в Issues на гитхабе

https://github.com/Bayselonarrend/OpenIntegrations/issues

А то я потом по комментариям из разных статей это все не соберу (историю ошибок в смысле)
14. bayselonarrend 2033 09.04.24 10:59 Сейчас в теме
(12)Хотя я кажется подозреваю, почему не вышло. В MIME должен быть не octet (он сам там проставится), а MIME type конечного файла, типа image/jpeg. Скорее всего Drive не понимает, какого типа ему файл сохранить, поэтому и не работает.
15. alkar 90 09.04.24 11:07 Сейчас в теме
ок, перенесу Issues. А для bak(архив SQl) файла, какой MIME можно указать?
16. bayselonarrend 2033 09.04.24 12:49 Сейчас в теме
Оставьте свое сообщение