Получите дату последнего обновления таблиц Google как конечную точку JSON - PullRequest
0 голосов
/ 18 марта 2020

У меня есть публичные c Google Spreadsheets, и я хотел бы получить обновленную дату с конечной точкой JSON в Javascript.

Вот конечная точка JSON: https://spreadsheets.google.com/feeds/list/1hrae_CqzDZjXR8CUs8d7_sqpit5WUk7sPv94nyHY1A4/1/public/basic?alt=json

Вы можете увидеть дату в feed.updated.$t (в настоящее время это 2020-03-17T13: 59: 25.968Z: 17 марта в 13:59).

Но когда я хочу получить это с Javascript, я всегда получаю текущую дату и время, и я не понимаю, почему.

const elDate = document.getElementById('date');
const elFormattedDate = document.getElementById('formatted-date');

$.getJSON('https://spreadsheets.google.com/feeds/list/1hrae_CqzDZjXR8CUs8d7_sqpit5WUk7sPv94nyHY1A4/1/public/basic?alt=json', function(data) {
    var date = data.feed.updated.$t;
    var formattedDate = new Date(date);
    elDate.innerHTML = date;
    elFormattedDate.innerHTML = formattedDate;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="banner-message">
  <ul>
    <li><b>Date</b> : <span id="date"></span></li>
    <li><b>Formatted date</b> : <span id="formatted-date"></span></li>
  </ul>
</div>

Ответы [ 3 ]

2 голосов
/ 18 марта 2020

Как сказал @ huyt c, каждый раз, когда вы делаете запрос к этой конечной точке, время updated обновляется, поэтому вы всегда будете получать текущую дату, а не дату, когда электронная таблица последний раз обновлялась.

Обходной путь: Использование Drive API:

Чтобы получить дату последнего обновления этой таблицы, вы можете использовать Revisions или Changes коллекция из Drive API (см. разницу между здесь ).

Вы можете, например, перечислить все ревизии, связанные с этим файлом, через Revisions.list, Вам просто нужно указать id файла в вашем запросе API. В ответ вы получите что-то вроде следующего:

{
  "revisions": [
    {
      "modifiedTime": datetime,
      // ... rest of revision 1 properties
    },
    {
      "modifiedTime": datetime,
      // ... rest of revision 2 properties
    },
    // ... rest of revisions
    {
      "modifiedTime": datetime,
      // ... rest of last revision properties
    }    
  ],
  // ... rest of properties
}

modifiedTime последней ревизии в ответе - это дата, которую вы ищете.

Ссылка:

2 голосов
/ 18 марта 2020

Каждый раз, когда вы вызываете конечную точку, поле feed.updated.$t обновляется (попробуйте обновить несколько раз, чтобы убедиться в этом). Вот почему вы получаете текущую дату. Вы не ошиблись, просто работает API Google Sheets.

0 голосов
/ 18 марта 2020

Я отвечаю на свой вопрос, чтобы прояснить.

Объяснение

Благодарность за ответ @ huyt c , стало ясно, что различий нет между вызовом конечной точки JSON из браузера, чем из сценария Javascript. Разница в датах была просто из-за кеша браузера.

Итак, чтобы быть ясным, эта конечная точка JSON всегда будет получать текущую дату, а не дату, когда электронная таблица последний раз обновлялась.

Временное решение с помощью скрипта приложения

Несмотря на то, что @ Iamblichus * обходной путь с Google Drive API выглядит намного чище, я нахожу его немного «излишним» только для того, чтобы получить дата последнего обновления, особенно потому, что для этого требуется не только ключ API, но и весь процесс oAuth.

Как подсказывает @ huyt c, я использовал триггер в скрипте приложения, чтобы сделать его Работа. Я создал новый Лист под названием «Информация» и использовал следующий скрипт:

function onEdit(e) {
  var s = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = s.getSheetByName('Informations');
  var date = new Date();
  var range = sheet.getRange(2, 1);
  range.setValue(date);
}

Этот смысл мне очень помог.

Ссылки :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...