使用 http 请求更新 google 电子表格

using an http request to update google spreadsheet

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

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 Unauthorized"

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

这个修改怎么样?

修改后的脚本:

在此修改后的脚本假设如下。

  • 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)
笔记:
  • 请将访问令牌放入header。

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 应用 returns 状态码 200。
  • 您可以将 'text': "is working?" 的值检索为 e.parameter.text
  • 当您使用 SpreadsheetApp.getActiveSheet() 时,e.parameter.text 的值被放入电子表格的第一页。

参考文献:

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