Выгрузка данных в Google-таблицу в 2026 году
Понадобилось выгружать данные в Google-таблицу.
При разработке я опирался на опыт, изложенный в статье на Инфостарте. Правда, это как раз одна из обработок с плохим кодом, где код сильно привязан к форме.
Мне пришлось долго прорываться через дебри нюансов Google-авторизации и доступов, часто с помощью ИИ. Но все же в итоге удалось победить эту заградительную конструкцию. Делюсь с Вами, как организовать доступ к Google-таблицам в 2026 году.
Создание приложения
Заходим в консоль API Google https://console.cloud.google.com/apis/dashboard
Далее Credentials — Create Credentials — OAuth client ID.
Выбираем Десктопное приложение.
Если запросит страну, выбираем страну Польша, России и Белоруссии там нет.
Также нужно включить API «Google Sheets API» по ссылке. Найти в поиске и добавить. Без этого приложение не будет работать с Гугл-таблицами:

Также проверьте настройку особенностей публикации приложения в разделе «Нюансы тестовых приложений» этой статьи.
Получение кодов доступа
В примерах из интернета я видел код вроде такого:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=***************************.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&access_type=offline&scope=https://www.googleapis.com/auth/drive.readonly+https://www.googleapis.com/auth/drive.file+https://www.googleapis.com/auth/spreadsheets
Но так больше не работает, потому что с определенного момента Google оставил из соображений безопасности и защиты от подделки только ответный код в переадресации:

Поэтому будем по-прежнему использовать redirect_URI, но на localhost. При этом на localhost может не быть развернуто сервера, нам нужно просто событие перехода на этот сайт.
Непосредственно localhost использовать нельзя:

Поэтому в запросе используется: redirect_uri=https://localhost:80. Порт не играет особой роли, просто вроде бы он должен быть обязательным. Также протокол должен быть https.
У пользователя будет запрошен вход в аккаунт:

Далее буден запрошен доступ ко всем гугл-таблицам аккаунта:

После этого будет открыта финальная страница, которой нет на localhost, текст которой содержит искомый code:

Если будет открыто что-то другое, то копировать код придется вручную.
При открытии сработает событие «Документ сформирован» и содержимое страницы можно будет получить в Элементы.Браузер.Документ.body.InnerText и извлечь оттуда значение параметра code.
Код может словить это событие и автоматом обновить код доступа.
Также важно понимать следующее, что я выяснил путем диалога с ИИ:
- Код доступа одноразовый и живет около 10 минут. Поэтому сразу после получения нужно запросить access и refresh токены.
- Access токен живет час, обновить его можно через refresh токен. Если работа приложения редкая, можно сразу обновлять перед началом работы. Если частая — можно смотреть срок жизни токена.
- При запросе redirect_URI должно быть такое же, как и в запросе на код доступа.
- redirect_URI, код доступа нужно кодировать в кодировку URL, иначе будут ошибки вроде Invalid Grant. Как кодировать можно посмотреть на Инфостарте.
- Имя листа в JSON нужно использовать такое же, как оно в таблице, конвертировать в URL не надо, у меня было русское имя и оно прошло.
Нюансы тестовых приложений
На внедрении у пользователя возникла ошибка:

У меня приложение работало, потому что оно было в статусе In production, а приложение клиента было с статусе Testing:

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




Свежие комментарии