рабочие листы / ключ / общедоступный / полный сервис требует NID cookie, начиная с 30.04.2019 - PullRequest
0 голосов
/ 30 апреля 2019

Начиная с 30.04.2019 рабочий лист public / full API не работает без добавления NID cookie для запроса.Пример запроса GET к листу, который я только что создал: https://spreadsheets.google.com/feeds/worksheets/1_QM2VCVaerfDlhTDgYpkSErEEv7IR0_452UIC1n_CC0/public/full

Этот запрос работает, если вы отправляете файл cookie NID Google и в противном случае выдает HTTP 500 «Внутренняя ошибка».Раньше это работало несколько дней назад.Поскольку я не использовал файлы cookie в своем API v3.0, я бы хотел сохранить все как есть.

Сфера применения моего Java-приложения заключается в получении данных в режиме только для чтения, без аутентификации /ограничения доступа необходимы.Наличие ключа доступа для конкретного приложения не является желаемым результатом.

1 Ответ

0 голосов
/ 30 апреля 2019

У меня была такая же проблема;Мне удалось обойти эту проблему, проанализировав html со страницы pubhtml напрямую, чтобы вывести аналогичный формат JSON с использованием некоторого jQuery:

Вместо использования идентификатора Google Sheet, используйте ссылку «Опубликовать на веб-странице».

function importGoogleSheets(publishedUrl, sheetId, onSuccess, onError) {

        var headers = [];
        var rows;

        $.ajax({
            url: publishedUrl+'?gid='+sheetId+'&single=true',
            success: function(data) {
                data = $.parseHTML(data)[5];
                htmldata = data;
                rows = data.getElementsByTagName('tr');

                for (var i = 0; i < rows[1].cells.length; i++) {
                    headers[i] = 'gsx$' + rows[1].cells[i].textContent.toLowerCase().replace(/[^0-9a-z]*/g, '');
                }

                for (var i = 3; i < rows.length; i++) {
                    temp = {};
                    for (var h = 1; h < headers.length; h++) {
                        temp[headers[h]] = {'$t': rows[i].cells[h].textContent};
                    }
                    all_data[i - 3] = temp;
                }
                onSuccess(all_data);
            },
            error: function(data) {
                onError(data);
            }
        });
    }

Однако следует отметить, что это не будет обрезать пустые строки, поэтому вы можете захотеть отфильтровать вывод.

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