如何为Google Apps Script URL添加邮箱权限以实现Python数据获取
解决方案
1. 修正Google Apps Script语法错误
你的脚本存在两处拼写错误,会导致Web应用无法正常返回数据,先修正:
function getAllData() { const ss = SpreadsheetApp.getActive(); let obj = {} ss.getSheets().forEach(sh => { obj[sh.getName()] = sh.getDataRange().getValues(); }) // 修正拼写:creatTextOutput → createTextOutput return ContentService.createTextOutput(JSON.stringify(obj)) // 修正路径:Content.Service → ContentService .setMimeType(ContentService.MimeType.JSON) }
2. 调整Web应用部署权限
如果你的Google表格允许公开访问,重新部署Web应用时,将谁可以访问此应用设置为任何人,甚至匿名。此时无需凭证,你原有Python代码就能直接获取数据。
若表格不能公开,可设置为组织内任何人,后续需在Python请求中携带公司Google账号的登录凭证。
3. 携带Cookie凭证访问(无需API密钥)
若必须验证公司邮箱身份,可通过携带Google账号的登录Cookie实现访问:
步骤1:导出浏览器的Google登录Cookie
- 用浏览器登录公司Google账号,访问Web应用URL确认能正常打开
- 打开浏览器开发者工具(F12)→ 应用 → Cookie → 复制
https://script.google.com下的NID、SID等关键Cookie内容
步骤2:在Python请求中嵌入Cookie
使用urllib构建带Cookie的请求:
import urllib.request import json import pandas as pd sheetURL = '你的Web应用URL' # 替换为你导出的实际Cookie内容 headers = { 'Cookie': 'NID=xxx; SID=xxx; HSID=xxx; SSID=xxx' } req = urllib.request.Request(sheetURL, headers=headers) res = urllib.request.urlopen(req) jsonData = res.read().decode('utf-8') # 转为DataFrame处理 data_dict = json.loads(jsonData) # 示例:获取指定工作表的数据 df = pd.DataFrame(data_dict['目标工作表名称'])
注意事项
- Cookie会定期过期,到期后需重新导出更新
- 禁止将Cookie内容提交到公共代码仓库,避免账号泄露
4. 更简便的替代方案:使用requests库管理会话
若可安装第三方库,requests的会话管理能更便捷地处理登录状态:
import requests import json import pandas as pd session = requests.Session() # 添加从浏览器导出的Cookie session.cookies.set('NID', 'xxx', domain='.google.com') session.cookies.set('SID', 'xxx', domain='.google.com') response = session.get(sheetURL) jsonData = response.text # 转为DataFrame data_dict = json.loads(jsonData) df = pd.DataFrame(data_dict['目标工作表名称'])
内容的提问来源于stack exchange,提问作者ReinholdN
相关产品推荐
相关产品推荐

