Периодически нужно предоставлять данные из Getcourse по пользователям в связке с покупками или заказами.
Раньше я делала выгрузки и собирала в Excel из нескольких листов на один.
Тратила уйму времени.
А вот Александр Силич заморочился и написал скрипт, благодаря которому можно процессом передавать любые доступные данные (в том числе допполя) из Getcourse в Google-таблицу.
Этот способ - самый легкий и нетребовательный из тех, что я знаю (5 или 6 других способов).
+ Скрипт один для всех файлов
+ При изменении полей - просто переписываем URL в строке процесса
+ Можно писать в несколько листов таблицы
Если кратко, то весь процесс настройки состоит из:
1. Создание скрипта (не написание)
- Развертывание скрипта
- Получение ссылки на скрипт
- Создание Google-таблицы
- Формирование URL для запроса
- Настройка процесса в Getcourse
- Тестирование
- Запуск процесса
На скрине показываю, для чего я сразу применила способ
1. В проекте по reels вступивших в клуб добавляют в “близкие друзья”. Чтобы отслеживать кого добавить, а кого убрать и при этом не заходить в Getcourse, был настроен процесс, которых передает в таблицу дату (сегодня), статус участника, почту и аккаунт Instagram (*организация, запрещенная на территории РФ, принадлежит Meta).
Итак, сам процесс настройки
В Google-аккаунте переходим на https://script.Google.com/ создаем проект и называем его (чтобы не запутаться потом)
В проекте сразу создается файл с названием Код.gs и пустой функцией.
Дальше вам нужно просто скопировать следующий код и вставить его вместо пустой функции (авторство сохранено с указанием первоисточника скрипта).
ВМЕСТО function myFunction() {}
вставить скрипт (целиком, со всеми скобочками)
/**
* Добавление строки в Гугл-таблицу.
*
* Скрипт вызывается GET или POST запросом с параметрами:
* SSID: идентификатор таблицы
* SHEET: имя или индекс листа, по умолчанию лист с индексом 0
* DATA: набор данных, разделенных запятой
*
* Больше скриптов для Геткурса здесь: https://t.me/pro_getcourse
*/
function doGet(request){
return doRequest(request)
}
function doPost(request){
return doRequest(request)
}
function doRequest(request) {
try {
const sheet = findSheet(request)
const DATA = request.parameter['DATA']
if( !DATA ) throw {code: 'DATA_NOT_DEFINED', message: 'No DATA'}
const data = [...DATA.matchAll(/(?:"(.*?)"|([^,]*))(?:,?|$)/g)]
.filter(m => m[0])
.map(m => (m[1] ?? m[2] ?? '').trim())
const lock = LockService.getScriptLock()
lock.waitLock(60000)
sheet.appendRow(data)
lock.releaseLock()
return sendResult()
} catch ( error ) {
console.log(error)
return sendError(error)
}
}
function findSheet(request) {
const SSID = request.parameter['SSID']
if( !SSID ) throw {code: 'SSID_NOT_DEFINED', message: 'SSID is not defined'}
const SHEET = request.parameter['SHEET'] || '0'
if( !SHEET ) throw {code: 'SHEET_NOT_DEFINED', message: 'SHEET is not defined'}
let ss
try {
ss = SpreadsheetApp.openById(SSID)
if( !ss ) throw ''
} catch ( e ) {
console.log(e)
throw {code: 'SSID_NOT_FOUND', message: `SpreadSheet is not found: ${SSID}`}
}
let sheet = ss.getSheetByName(SHEET) ?? ss.getSheets()?.[parseInt(SHEET)]
if( !sheet ) throw {code: 'SHEET_NOT_FOUND', message: `Sheet is not found: ${SHEET}`}
return sheet
}
function sendResult(res) {
return json({success: 1, data: res})
}
function sendError(error) {
return json({success: 0, error})
}
function json(res) {
return ContentService.createTextOutput(JSON.stringify(res)).setMimeType(ContentService.MimeType.JSON)
}
СОХРАНИТЬ (Ctrl+S)
Теперь нажимаем Развертывание скрипта
Для обработки входящих запросов нам нужно Веб-приложение.
ВАЖНО!
- В описании можно ничего не указывать. Если вы в дальнейшем делаете какие-то изменения в скрипте, а потом делаете новое развертывание, тогда в описании можно указать что вы изменили. Но это не обязательно, поэтому сейчас оставляем поле пустым.
- Веб-приложение запускаете от своего имени! Потому что когда запрос будет выполняться из процесса Getcourse, то процесс, конечно же, не будет авторизован. Но запрос должен быть выполнен от имени какого-то пользователя.
- Доступ к приложению должен быть у всех! (Доступ будет иметь только тот, кто знает ссылку на это приложение. Так что кроме вас и вашего процесса на Getcourse никто не сможет сделать запрос.)
Нажимаем "Начать развертывание"
Если мы все это проделываем в первый раз, то потребуется предоставить доступ для скрипта. Для того, чтобы он мог выполнять действия (добавлять данные в таблицу) от вашего имени, т.к. мы указали, что скрипт будет работать от нашего имени.
Нажимаем кнопку "Предоставить доступ". Затем выбираем наш аккаунт.
А вот потом появляется предупреждение, в котором Google сообщает, что приложение, которое мы развернули, запрашивает у нас же доступ, чтобы выполнять действия от нашего имени. Звучит странно, но это просто стандартная процедура. Типа, доверяет ли тот кто будет пользоваться приложением, тому, кто создал это приложение.
Поэтому нажимаем "Показать доп опции". И ниже нажимаем перейти к вашему проекту.
И на следующем экране еще раз подтверждаем, что согласны предоставить доступ приложению. Здесь уже конкретно указывается, что у приложения будут полные права от вашего имени просматривать, редактировать, создавать и удалять Google-таблицы.
Может появится сообщение о циклической ошибке.
Говорим Попробовать снова.
После этого возвращаемся к окну с развертываниями, там где была кнопка "Предоставить доступ".
Если у вас что-то пошло не так из-за глюка и приложение не развернулось (такое может быть), тогда просто повторите процедуру развертывания заново. При этом подтверждать доступ к приложению уже не придется.
Вот что мы видим, когда все получилось
Так выглядит ссылка:
https://script.Google.com/macros/s/AKfycb...KPA0-mpIvyQ/exec
Сохраните где-то эту ссылку, она еще пригодится.
На самом деле, можно ее протестировать прямо сейчас. Можно ее вставить в адресную строку браузера и попробовать открыть.
Важно! Вы можете быть авторизованы в нескольких Google-аккаунтах, один их которых является основным. Если вы создали скрипт в основном аккаунте, то вы без проблем сможете открыть адрес скрипта.
Создаем теперь пустую тестовую таблицу и копируем ее идентификатор
Теперь у нас есть значение для параметра SSID!
Напомню, что у нас есть еще параметр SHEET, в котором можно указать порядковый номер листа в таблице, начиная с нуля (0, 1, 2...) или можно указать имя листа. Если этот параметр не указывать, тогда будет выбран первый лист в документе.
(Лист должен физически существовать. Автоматически создается только Лист 1)
И еще у нас есть параметр DATA, в котором мы через запятую будем перечислять данные для ячеек.
В Getcourse создаем процесс, настраиваем условия вхождения, внутри добавляем блок “Вызов URL”.
В строку URL вставляем нужный запрос:
Ссылка из развертывания?SSID=идентификатор таблицы&DATA=перечисляем нужные поля для передачи через запятую.
Для примера мой URL и получившаяся таблица
https://script.Google.com/macros/s/AKfycbzbaZsv…_sQWkPCUfcYLaqJwxDGDdslUO22y6OqNFG4/exec?SSID=1NL…cJFx1U&DATA={object.user.email},{object.user.first_name},{object.user.last_name},{object.user.club_score},{object.user.club_experience},{object.start_at},{object.finish_at format="d.m.y"},{object.training_title},{object.state},{object.period_string},{object.user.Telegram},{object.user.club_color},https://аккаунтGetcourse/user/control/user/update/id/{object.user.uid}
Тестируем.
Если все написано правильно - то в таблицу придет запись, если нет - то проверяем скобочки, знаки между параметрами)
ВАЖНО: русские слова не передает, нужно их кодировать, если планируете передавать какие-то свои слова (не из полей Getcourse) (Условно: Привет! будет как %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%21)
Кодировать можно тут, например https://www.URLencoder.org/
p.s. есть процесс работы на видео (без звука)