Как получить историю редактирования ячеек с помощью Google App Script? - PullRequest
4 голосов
/ 09 мая 2020

У меня есть таблица Google. Когда я нажимаю правую кнопку мыши в любой ячейке, я могу выбрать Show edit history из контекстного меню.

enter image description here

После этого я могу видеть историю редактирования во всплывающем окне .

Like this

Мой вопрос: как получить эти данные из ячейки с помощью скрипта?

Я пытался найти решение с помощью inspect вариант и нашел ожидаемые данные здесь:

<div class="docs-blameview-authortimestamp">
  <div class="docs-blameview-author">My name
  </div>
  <div class="docs-blameview-timestamp">May 9, 11:56 AM
  </div>
</div>

Есть предложения, как мне импортировать эти данные в какой-нибудь лист Google?

Обновлено

Я продолжаю искать решение.

Когда я проверяю это действие (до show edit history) с помощью Chrome DevTools, я обнаружил на вкладке «Сеть» этот запрос: enter image description here

fetch("https://docs.google.com/spreadsheets/d/1xVrzBezPzOmZC7Vap-reuNcWXZx_0qONbZ67pBiHVkQ/blame?token=AC4w5VhQLkaKWPQT2sGl8uO8MkXyW1N7hg%3A1589033535890&includes_info_params=true", {
  "headers": {
    "accept": "*/*",
    "accept-language": "en-US,en;q=0.9",
    "content-type": "multipart/form-data; boundary=----WebKitFormBoundaryFpwmP3acru2z5xQc",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-build": "trix_2020.18-Tue_RC02",
    "x-client-data": "CI62yQEIpLbJAQipncoBCNCvygEIvLDKAQjttcoBCI66ygEYmr7KAQ==",
    "x-rel-id": "6a4.4ffb56e6.s",
    "x-same-domain": "1"
  },
  "referrer": "https://docs.google.com/spreadsheets/d/1xVrzBezPzOmZC7Vap-reuNcWXZx_0qONbZ67pBiHVkQ/edit",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": "------WebKitFormBoundaryFpwmP3acru2z5xQc\r\nContent-Disposition: form-data; name=\"selection\"\r\n\r\n[30710966,[null,[null,[null,\"629843311\",9,1],[[null,\"629843311\",9,10,1,2]]]]]\r\n------WebKitFormBoundaryFpwmP3acru2z5xQc\r\nContent-Disposition: form-data; name=\"clientRevision\"\r\n\r\n478\r\n------WebKitFormBoundaryFpwmP3acru2z5xQc\r\nContent-Disposition: form-data; name=\"includeDiffs\"\r\n\r\ntrue\r\n------WebKitFormBoundaryFpwmP3acru2z5xQc--\r\n",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});

Я узнал значение некоторых параметров. Не уверен насчет исправления ...


Параметры строки запроса

/* token: AC4w5VhQLkaKWPQT2sGl8uO8MkXyW1N7hg:1589033535890
     AC4w5VhQLkaKWPQT2sGl8uO8MkXyW1N7hg // Probably it takes from user
     1589033535890 // Timestamp of current session of current user

   includes_info_params: true  // I think that's what gets the user data                                       and editing time of the cell

Данные формы:

/*
selection: 
    [30710966,    // Spreadsheet identificator (Any idea, how to get it???)
    [null,[null,
    [null,
    "629843311",  // Sheet ID in string
    9,            // cell's row - 1
    1],           // cell's column - 1
    [[null,
    "629843311"   // Sheet ID in string
    ,9            // cell's row - 1
    ,10           // cell's row
    ,1            // cell's column - 1
    ,2            // cell's column
    ]]]]]
    
clientRevision: 478   // Edit step number (How to get it???)

includeDiffs: true    // True shows last edition / false - look at previous steps 
*/

Я думаю, что можно создать пользовательскую выборку и получить blob. Затем извлеките имя последнего редактора и отметку времени последней редакции ячейки.

К сожалению, мои навыки плохие. Я только учусь. Кто-нибудь может мне с этим помочь?

1 Ответ

3 голосов
/ 27 августа 2020

Возможно, вы сможете получить информацию о clientRevisions с помощью Drive API, https://developers.google.com/drive/api/v2/reference/revisions. Вы сказали, что идентификатор таблицы 30710966 является общим для каждой таблицы. У меня для этого есть такая же строка. Думаю, вы очень близки к этому. Что касается обратной инженерии, я считаю, что информация, открытая для всех, должна быть доступна разными способами. Было бы здорово, если бы Google предоставил для этого несколько API, и я считаю, что они готовят это, поскольку это относительно новая функция.

...