В своей работе я часто сталкиваюсь с задачами, связанными с обработкой большого объема данных. Недавно передо мной стояла задача получить информацию о пользователях, которые использовали корпоративную почту в рамках Google Workspace. Я должен был вытащить данные, охватывающие 12 лет работы, чтобы очистить неактивные аккаунты и обновить их информацию для дальнейшего использования.
Как ChatGPT пришел на помощь
Для решения этой задачи я решил обратиться к ChatGPT. Я рассказал, что нужно вытащить данные пользователей с их email и датой создания аккаунта. Вместо того, чтобы вручную искать решения или полагаться на устаревшие инструменты, я решил использовать мощь автоматизации.
ChatGPT предложил мне решение в виде скрипта, который можно было запустить в Google Apps Script для работы с API Google Directory. Этот скрипт позволил мне извлечь нужную информацию за 12 лет с точностью до каждой учетной записи.
Этапы работы
- Подготовка данных: Я подготовил таблицу Google, куда нужно было занести данные. Это была обычная таблица с двумя колонками: email пользователей и дата их регистрации в системе.
- Написание скрипта: С помощью ChatGPT я написал скрипт на Google Apps Script. Он подключался к Google Directory API и позволял извлекать данные пользователей, включая их email и дату создания аккаунта.
- Логирование и обработка ошибок: В скрипт был встроен механизм логирования, чтобы отслеживать процесс извлечения данных. Все ошибки фиксировались, и если что-то шло не так, я мог быстро исправить проблему.
- Запуск скрипта: После настройки скрипта я запустил его. Он автоматически обрабатывал данные и записывал их в таблицу, не требуя моего вмешательства. В итоге все данные пользователей за 12 лет были получены и сохранены в нужном формате.
- Очистка ненужных аккаунтов: Теперь, когда я имел всю необходимую информацию, можно было приступить к удалению неактивных аккаунтов. Так как Google не предоставляет прямого способа массового удаления аккаунтов, я мог вручную фильтровать данные и удалять только те записи, которые уже не нужны.
Заключение
Этот опыт показал мне, как важно использовать возможности автоматизации для решения задач, связанных с большими объемами данных. Вместо того чтобы полагаться на стандартные инструменты и вручную собирать данные, с помощью скрипта я смог извлечь нужную информацию быстро и точно. А благодаря ChatGPT я смог эффективно настроить этот процесс и решить задачу, которая казалась довольно сложной на первый взгляд.
JS:
function listUsersWithCreationDate() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Users");
const props = PropertiesService.getScriptProperties();
const pageSize = 500;
let pageToken = props.getProperty('pageToken');
const isFirstRun = !pageToken;
if (!sheet) {
Logger.log('Ошибка: Лист "Users" не найден.');
throw new Error('Sheet "Users" not found');
}
if (isFirstRun) {
sheet.clear();
sheet.appendRow(['Email', 'Дата создания', 'Статус']);
Logger.log('Первый запуск: очищена таблица и добавлена шапка');
}
try {
// Очистка невалидного токена
if (pageToken && pageToken.toLowerCase().includes('invalid')) {
Logger.log('Невалидный pageToken удалён');
props.deleteProperty('pageToken');
pageToken = null;
}
const response = AdminDirectory.Users.list({
customer: 'my_customer',
maxResults: pageSize,
orderBy: 'email',
pageToken: pageToken,
projection: 'full',
viewType: 'admin_view', // или 'admin_view' при наличии прав
});
const users = response.users;
Logger.log('Получено пользователей: ' + (users ? users.length : 0));
if (users && users.length > 0) {
const rows = users.map(user => [
user.primaryEmail || 'нет email',
user.creationTime || 'нет даты',
'✓ добавлен',
]);
sheet.getRange(sheet.getLastRow() + 1, 1, rows.length, 3).setValues(rows);
Logger.log('Добавлено строк в таблицу: ' + rows.length);
} else {
sheet.appendRow(['-', '-', 'пользователи не найдены']);
Logger.log('Нет пользователей на этой странице');
}
if (response.nextPageToken) {
props.setProperty('pageToken', response.nextPageToken);
Logger.log('Следующая страница сохранена: ' + response.nextPageToken);
} else {
props.deleteProperty('pageToken');
Logger.log('Загрузка завершена, токен удалён');
}
} catch (e) {
Logger.log('Ошибка: ' + e.message);
sheet.appendRow(['-', '-', 'ошибка: ' + e.message]);
props.deleteProperty('pageToken'); // на всякий случай очищаем токен
throw e;
}
}
function resetPageToken() {
PropertiesService.getScriptProperties().deleteProperty('pageToken');
Logger.log('Токен сброшен');
}