【问题标题】:using an http request to update google spreadsheet使用 http 请求更新 google 电子表格
【发布时间】:2018-11-19 21:20:54
【问题描述】:

尝试设置电子表格以通过 http 帖子获取数据。为了测试它,我设置了一个简单的 python 脚本来发送一个 http 请求。我不想在 python 或其他地方使用特定的 google api,因为我希望其他人能够简单地发送他们想要的请求。所以,在我的谷歌脚本中,我只有:

function doPost(e){
   sheet = SpreadsheetApp.getActiveSheet();
   range = sheet.getRange(1, 1)
   ange.setValue(e.text)
}

在python中我只有:

import requests

if __name__== "__main__":
    params = {'Authorization': "Bearer [token]",
              'contentType': 'application/json',
              'text': "is working?"}
    r = requests.post("https://script.google.com/macros/s/[uniquekey]/exec", params)
    print(r.status_code, r.reason)

我得到的只是

“401 未经授权”

我也尝试过通过 python 发送它,以及在网络服务器中和通过 chrome 运行 JS(我猜这会引发安全问题)。一切都给了我同样的回应。我确定我只是没有正确授权,但我还没有找到正确的方法来做到这一点。提前致谢。我敢肯定还有其他一些问题,但我似乎什至无法访问。

【问题讨论】:

    标签: python google-apps-script web-applications authorization http-status-code-401


    【解决方案1】:

    这个修改怎么样?

    修改后的脚本:

    在这个修改后的脚本中假设如下。

    • Web 应用程序部署为
      • Me 的身份执行应用程序
      • 谁有权访问该应用Only myselfAnyone
    • 您的访问令牌可用于访问您的 Web 应用程序。 如果您的访问令牌不能用于它,请尝试如下设置 Web 应用程序。 - Me 的身份执行应用程序 - 谁有权访问该应用Anyone, even anonymous - 在此设置下,您无需访问令牌即可访问 Web 应用。

    Python:

    import requests
    
    if __name__== "__main__":
        params = {
            'text': "is working?",
        }
        headers = {
            'Authorization': "Bearer [token]",
        }
        r = requests.post("https://script.google.com/macros/s/[uniquekey]/exec", data=params, headers=headers)
        print(r.status_code, r.reason)
    
    笔记:
    • 请将访问令牌放在标头中。

    Google Apps 脚本:

    当您修改脚本时,请重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。

    function doPost(e) {
      const sheet = SpreadsheetApp.getActiveSheet();
      const range = sheet.getRange(1, 1);
      range.setValue(e.parameter.text);
      return ContentService.createTextOutput("Done.");
    }
    
    笔记:
    • 通过返回ContentService.createTextOutput(),Web Apps 返回状态码200。
    • 您可以将'text': "is working?" 的值检索为e.parameter.text
    • 当您使用SpreadsheetApp.getActiveSheet() 时,e.parameter.text 的值会放在电子表格的第一页。

    参考资料:

    在我的环境中,我可以确认此修改有效。但是如果在您的环境中,这个修改后的脚本不起作用,我很抱歉。

    【讨论】:

    • 非常感谢。将设置更改为“甚至匿名”确实有效。我仍然在使用授权令牌做错事。我可能只是不完全知道如何通过 google api auth 系统进行设置,但这让我可以根据需要设置工作表,以后我可以处理 auth 的东西。再次感谢。
    • @Bastiat 感谢您的回复。很高兴您的部分问题得到了解决。例如关于授权,这个快速入门对您有用吗? developers.google.com/drive/api/v3/quickstart/python在这个脚本中,使用了OAuth2进程。
    • 如果它只是我的一个项目,是的,我会使用它。我曾希望能够在没有库的情况下仅通过标准请求来做到这一点,因为我只是使用 python 进行测试,而实际用例将是从 powershell 环境发送的推送请求。所以我试图避免那些依赖库。也许这是一个有效的目标,也许不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多