L O A D I N G

Как ChatGPT помог мне извлечь данные пользователей из Google за 12 лет

В своей работе я часто сталкиваюсь с задачами, связанными с обработкой большого объема данных. Недавно передо мной стояла задача получить информацию о пользователях, которые использовали корпоративную почту в рамках 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('Токен сброшен');
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *