使用 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 myself
或Anyone
- 您的访问令牌可用于访问您的 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
的值被放入电子表格的第一页。
参考文献:
在我的环境中,我可以确认此修改有效。但如果在您的环境中,此修改后的脚本不起作用,我很抱歉。
正在尝试设置电子表格以通过 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 myself
或Anyone
- 执行应用程序,因为是
- 您的访问令牌可用于访问您的 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
的值被放入电子表格的第一页。
参考文献:
在我的环境中,我可以确认此修改有效。但如果在您的环境中,此修改后的脚本不起作用,我很抱歉。