如何在Python中写到一个公开的Google Sheet(未经授权)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Python中写到一个公开的Google Sheet(未经授权)?相关的知识,希望对你有一定的参考价值。
我对一个不属于我的 Google Sheet 有完全的编辑权限。我希望能够在没有Google API授权的情况下使用Python写入电子表格。我检查了几个可用的软件包(gdata
, gspread
等),似乎所有的人都要求提供凭证。
我也能够在没有授权的情况下,使用以下方法读取电子表格的内容 requests
或 pd.read_csv()
pandas (我调整了URL,把最后一部分说......改为......。edit#gid=
......改为....export?format=csv&gid=
...). 然而,当发送一个POST请求到相同的URL时,我收到了200状态代码,但同样的空电子表格。
任何帮助是非常感激的。
我相信你的目标如下。
- 你想用python把值放到公开共享的Google电子表格中。
- 在这种情况下,你想在没有授权的情况下访问电子表格。
对于这个问题,这个答案如何?
问题和解决方法。
为了将数值放到公开共享的Google Spreadsheet中,需要使用POST方法。在这种情况下,需要使用访问令牌。另一方面,在GET方法的情况下,当使用Sheets API时,可以使用API密钥。而端点如 exportLinks
你可以在不使用API密钥的情况下检索到这些值。这些都是Google方面的规范。
在这种情况下,为了实现你的目标,我想提出以下两种模式。
模式1.在这种情况下,我想提出以下两种模式。
在这个模式中,我建议使用从服务账户中获取的访问令牌来访问电子表格。在这种情况下,脚本可以更简单。
脚本示例:在这个示例脚本中,我建议使用从服务账户获取的访问令牌来访问电子表格。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
spreadsheetId = "###" # Please set the Spreadsheet ID.
scope = ['https://www.googleapis.com/auth/spreadsheets']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(spreadsheetId)
worksheet = spreadsheet.sheet1
worksheet.update_acell('A1', 'sample')
- 在这个示例脚本中
sample
在公开共享的电子表格中,使用gspread将其放到第1个标签的 "A1 "单元格中。
模式2.在此模式中,我建议使用Google Script制作的Web Apps来访问电子表格。
在这个模式中,我想建议使用Google Apps Script创建的Web Apps作为封装API来访问电子表格。在这种情况下,python脚本更简单。
使用方法。
请按以下流程操作
1. 1. 创建Google Apps Script的新项目。
Web Apps的示例脚本是一个Google Apps脚本,所以请创建一个Google Apps脚本的项目。所以请创建一个Google Apps Script的项目。
如果您想直接创建,请进入以下页面 https:/script.new. 在这种情况下,如果你没有登录谷歌,就会打开登录界面。所以请登录谷歌。这样,Google Apps Script的脚本编辑器就被打开了。
2. 2.准备脚本。
请将以下脚本(Google Apps Script)复制并粘贴到脚本编辑器中。然后 请在高级Google服务中启用Google Sheets API. 这个脚本是针对Web应用程序的。
function doPost(e) {
try {
const spreadsheetId = e.parameter.spreadsheetId;
const obj = JSON.parse(e.postData.contents);
const resource = obj.body;
const range = obj.arguments.range;
const valueInputOption = obj.arguments.valueInputOption;
Sheets.Spreadsheets.Values.update(resource, spreadsheetId, range, {valueInputOption: valueInputOption});
return ContentService.createTextOutput("ok");
} catch(e) {
return ContentService.createTextOutput(JSON.stringify(e));
}
}
- 在这种情况下,使用的是POST方法。
- 在这个示例脚本中,作为一个测试脚本,使用Sheets API中的spreadsheets.values.update方法将值放到电子表格中。
3. 部署Web应用程序。
- 在脚本编辑器上,通过 "Publish"-> "Deploy as web app "打开一个对话框。
- 选择 "我" 对于 "执行应用程序为:".
- 这样一来,脚本就会以所有者的身份运行。
- 选择 "任何人,即使是匿名的" 对于 "谁能访问该应用程序:".
- 在这种情况下,不需要请求访问令牌。我认为,我建议你的目标采用这种设置。
- 当然,你也可以使用访问令牌。届时,请将此设置为 "任何人".
- 点击 "部署 "按钮,作为新的 "项目版本"。
- 自动打开 "需要授权 "的对话框。
- 点击 "审查权限"。
- 选择自己的账户。
- 点击 "此应用未验证 "处的 "高级"。
- 点击 "转到##项目名称##(不安全)"。
- 点击 "允许 "按钮。
- 点击 "确定"。
- 复制Web Apps的URL。就像
https://script.google.com/macros/s/###/exec
.- 当您修改了Google Apps脚本,请重新部署为新版本。这样,修改后的脚本就会反映到Web Apps上。请注意这一点。
4. 4. 使用Web Apps运行该功能。
这是一个请求Web Apps的示例python脚本。请设置您的Web Apps URL、电子表格ID和范围。
import json
import requests
spreadsheet_id = '###' # Please set the Spreadsheet ID.
body = {
"arguments": {"range": "Sheet1!A1", "valueInputOption": "USER_ENTERED"},
"body": {"values": [["sample"]]}
}
url = 'https://script.google.com/macros/s/###/exec?spreadsheetId=' + spreadsheet_id
res = requests.post(url, json.dumps(body), headers={'Content-Type': 'application/json'})
print(res.text)
- 在这个示例脚本中。
sample
被放到了公开共享的电子表格的第1个标签页的 "A1 "单元格中。 - 在这种情况下,无需在python脚本中进行授权,因为在部署Web Apps时已经完成了授权。
注意:当你修改了Web Apps的脚本后,你就会发现,你的Web Apps已经被授权了。
- 当您修改了Web Apps的脚本,请将Web Apps重新部署为新版本。这样,最新的脚本就会反映到Web Apps上。请注意这一点。
参考资料
以上是关于如何在Python中写到一个公开的Google Sheet(未经授权)?的主要内容,如果未能解决你的问题,请参考以下文章
将背景颜色添加到单元格 Google 工作表(python)