从2019年4月30日开始,工作表/密钥/公共/全面服务需要NID cookie

时间:2019-04-30 14:18:25

标签: google-sheets-api

从2019年4月30日开始,如果不向请求中添加NID cookie,则公用/完整API将不起作用。 对我刚刚创建的工作表的示例GET请求:https://spreadsheets.google.com/feeds/worksheets/1_QM2VCVaerfDlhTDgYpkSErEEv7IR0_452UIC1n_CC0/public/full

如果您发送Google NID cookie并给出HTTP 500“内部错误”,则此请求有效。这曾经在几天前有效。由于我在v3.0 API中未使用过Cookie,因此我希望保持原样。

我的Java应用程序的范围是以只读模式获取数据,不需要身份验证/访问限制。拥有特定于应用程序的访问密钥不是理想的结果。

1 个答案:

答案 0 :(得分:0)

我有同样的问题;我能够通过直接从pubhtml页面解析html以使用某些jQuery输出类似的JSON格式来解决该问题:

使用“发布到网页”链接代替使用Google Sheet ID。

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);
            }
        });
    }

请注意,这不会切断空行,因此您可能要过滤输出。