如何在 Google Apps 脚本中缓存对象

2024-01-10

我正在 Google Drive 电子表格的脚本中从 JIRA 获取 JSON 数据。我有一个脚本可以很好地获取数据,而且我几乎只获取该问题的数据。我返回的是 JSON 文本字段,表示有关特定 JIRA 问题的所有数据。

我不想每次需要特定 JIRA 问题中的一个字段时都调用 UrlFetch 服务,而是希望在第一次获取后缓存获取的 JSON 数据。

遗憾的是,Google 针对 Google Apps 脚本的缓存服务仅缓存字符串格式的数据,并将字符串限制为 200 个字符。从 JIRA 返回的 JSON 文本数据远远超过 200 个字符。

是否有其他方法可以缓存 javascript 对象(例如解析的 JSON 字符串)或在 Google Apps 脚本中缓存 200 多个字符?

这是我在意识到数据存储为字符串之前尝试缓存数据的代码:

function _fetchJiraData(targetIssue) {
  Logger.log("Started fetching JIRA data for '%s'", targetIssue);

  var data = cache.get(targetIssue);
  if (data == null) {
    var options = {
      headers : {
        Authorization : "Basic " + Utilities.base64Encode('user:password')
      }
    };
    var url = Utilities.formatString(
      'https://rentrak.atlassian.net/rest/api/latest/issue/%s',
      targetIssue
    );
    var result = UrlFetchApp.fetch(url, options);
    var jsonText = result.getContentText();
    data = JSON.parse(jsonText);

    cache.put(targetIssue, data);
  }

  // TODO: validate data
  return data;
};

谢谢你的帮助!


应用程序脚本缓存服务 https://developers.google.com/apps-script/reference/cache/最多可以缓存每个密钥 100KB https://developers.google.com/apps-script/reference/cache/cache#put(String,String),您不应该遇到只有“200”个字符的问题。更严格的限制仅针对密钥,即 250 个字符。

我在您的代码中看到的主要问题是您试图缓存解析的数据,而不是文本。除非你的密钥那么大(在这种情况下我建议你使用 enconding 代替),否则这应该有效:

function _fetchJiraData(targetIssue) {
  var jsonText = cache.get(targetIssue);
  if (jsonText === null) {
    //...prepare your fetch
    var result = UrlFetchApp.fetch(url, options);
    jsonText = result.getContentText();
    cache.put(targetIssue, jsonText);
  }

  var data = JSON.parse(jsonText);
  return data;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Google Apps 脚本中缓存对象 的相关文章

  • 使用 Google Advanced Drive 服务通过 Apps 脚本在文件夹中创建新文件

    创建新文件有四种方法 DocsList 显示为DocsList在主列表中 内置于 Apps 脚本中 DriveApp 显示为Drive在主列表中 内置于 Apps 脚本中 驱动器 API 也显示为Drive在主列表中 必须添加到 Apps
  • 嵌入来自谷歌驱动器的图像,没有灰色边框和缩放工具?

    I have a webpage that has an image that is stored in google drive and using the google drive embed code results in this
  • 如何编辑范围? // Google Classroom 控制 Google Apps 脚本中学生访问的权限范围

    我是一名高中老师 正在针对 Google Classroom 编写 Google Apps 脚本 我想创建一个类似于学生成绩视图的电子表格 我的学生可以使用他们的凭据进行访问 我已经成功编写了代码 这样我就可以通过在代码中显式放置学生的 I
  • 如何将值传递到 HTML 模板侧边栏?

    我的任务是更换一些现有的 Access 数据库 我想知道你们是否可以帮助我 目前 我有一个谷歌表格 https docs google com spreadsheets d 1JS5Iwx60Zk7VL8lYz6Yj7ew4eYPhl2Nk
  • 联系人应用程序性能

    对谷歌脚本的 ContactsApp 进行一些测试并加载联系人 看起来运行 ContactsApp getContacts 加载所有联系人 所需的时间与运行 ContactsApp getContact email 特定联系人 所需的时间一
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t
  • 移动设备:缺少操作

    我正在尝试执行该操作的 POST 但是 当我发出请求时 我收到代码 400 表示操作值丢失 my code function mobileAPIPOST var response UrlFetchApp fetch https www go
  • Google 文档有内容控制吗?

    我对 Google 文档和内容控制有疑问 如果有的话 我们有一个系统 允许用户设计带有内容控件 rtf 文本 组合框等 的 MS Word 文档 并为控件分配一个 ID 以便我们的系统可以提取 ID 并注册答案 然后数据被保存在数据库中 什
  • Google 脚本过滤一个值的范围

    我想过滤第 1 列中仅包含 Bob 特定值的行的 google 工作表范围 到目前为止 我的代码允许我过滤out第 1 列中有 Bob 的行 我需要相反 我想返回第 1 列中只有 Bob 的行 因此 其中 filterSettings 不是
  • 通过脚本删除工作表

    我正在执行此代码 function deleteSheets var ss SpreadsheetApp getActiveSpreadsheet var sheets ss getSheets var transp ss getSheet
  • 根据条件格式化货币

    Google Apps 脚本新手 但有一些 VBA 编码经验 我希望能够根据不同的单元格输入决定单元格的数字格式 eg Col A 客户名称 验证范围 B 栏 货币类型 英镑 美元 欧元 经过验证的列表 Col C 费用 100 用户免费类
  • 如何从 Google 电子表格中删除项目?

    我通过在脚本编辑器上选择 文件 gt 制作副本 错误地制作了 Google Apps 脚本项目的副本 从那时起 每次我在该项目所属的电子表格屏幕上单击 工具 gt 脚本编辑器 时 我看到显示两个项目 原始项目和复制项目 的屏幕 我需要选择一
  • 许多文档引用了一个 Google Apps 脚本 [重复]

    这个问题在这里已经有答案了 我已经通过驻留在 Google 文档中的 Google Apps 脚本创建了一个脚本 我使用该文档作为模板对象 然后将其复制到我使用这些脚本函数的许多 Google 文档中 问题是 每当我编辑该主脚本时 所有子文
  • 如何使 onEdit() 触发函数应用于多个工作表

    我正在处理一张 Google 表格 我有一个脚本可以填充column B当我更新时有时间戳column A在第一个选项卡上 不过 我需要它在第二个选项卡上执行相同的操作 但我无法让它在那里工作 我需要改变什么 我当前使用的脚本是 funct
  • 如果您有多个表单向单个电子表格发送响应,Google 如何知道提交表单时要执行哪个 onsubmit 触发器

    我需要有人澄清 据我了解 多个表单可以将其回复发送到新 Google 表格中的单个电子表格 因此 我创建了两个 Google 表单 并让他们都将回复发送到新的 Google 电子表格 然后我在电子表格 而不是表单 中创建了两个脚本 每个脚本
  • 删除或删除云端硬盘中的特定文件

    我有一个每天早上 5 点运行的脚本 它将特定文件 data xls 移至垃圾箱 但是 由于 DocsList 已停用 该脚本不再起作用 并且我在更新它时遇到了问题 我在这里看到了几个删除 setTrashed 脚本 但它们似乎都适用于一组文
  • Google Web Apps - 获取用户电子邮件但以所有者身份运行脚本

    我最近迷上了谷歌网络应用程序 但我遇到了一些进退两难的问题 我正在尝试构建一个对非常特定的用户开放的应用程序 并且他们正在查看的数据根据 其访问组进行过滤 在谷歌表格中 我列出了用户电子邮件及其各自的访问组 A 列 电子邮件 B 列 访问组
  • javascript 对象是否像 Ruby 一样“开放”?

    在 Ruby 中 我可以使用与声明自己的语法相同的语法来添加和修改任何类 对象或方法的功能 因为 Ruby 有 开放类 JavaScript 是这样的吗 举个例子 就我而言 我想更改 Google Apps 脚本处理 URL 对象的方式 以
  • 如何修复 OnChange 脚本,该脚本运行良好,但在修改 Google 表格后停止运行

    概述 工作簿根据每条记录的类别分数计算每条记录 或行 的总体分数 类别分数是通过对每个记录的数百个数据点执行的计算得出的 根据我在网上找到的几个示例和教程 我编译了代码以发送名为 checkComplete 的 onChange 电子邮件
  • ReferenceError:未定义 ConferenceDataService

    我正在尝试开发像 Zoom 会议这样的谷歌日历插件 在 appsscript json 文件中 有以下代码 calendar conferenceSolution onCreateFunction createConference id 1

随机推荐

  • 如何包含动态时间?

    我正在尝试提取有关时间段的日志 当没有时 下面的程序运行得很好 给出小时数 并提取该范围内的日志 但现在我还包括动态给出的开始和结束 即说之间8 am to 8pm or 6am to 8am等等 我怎样才能得到它 当前程序中的任何编辑也可
  • 在 SwiftUI 的 Picker 中添加新元素

    我找不到如何在 SwiftUI 的选择器视图中添加某些元素 在我的示例中 我想在单击按钮时在选择器中添加 Z 值 struct ContentView View State var values String A B C State pri
  • hash( (-2,2) ) == hash( (2,-2) ) 返回 True (Python)

    所以 这很有趣 Python 的hash臭名昭著的回报True on hash 1 hash 2 正如其他地方所讨论的 https stackoverflow com questions 10130454 why do 1 and 2 bo
  • 我如何要求 Lisp 编译器忽略(标签种类)函数?

    我盯着斯蒂尔的Common Lisp 语言直到我脸色发青 仍然有这个问题 如果我编译 defun x labels y 5 princ x terpri 有时候是这样的 home clisp experiments clisp c q x
  • 信号发射结构

    这个问题在我脑海里萦绕了很多天 但直到现在我才弄清楚 如果我尝试发送一个结构信号 struct radarStruct unsigned char Data unsigned int rate unsigned int timeStamp
  • ADB 设备卡在“连接”状态

    我正在尝试将我的手机连接到 Android Studio 以跟进一些应用程序开发 我目前正在努力将手机正确连接到计算机 因为 ADB 似乎从未连接到设备 当尝试在设备上启动应用程序时 这是 Android Studio 在运行控制台中告诉我
  • 如何向背景图像添加颜色叠加? [复制]

    这个问题在这里已经有答案了 我在 SO 和 Web 上都看到过很多这个问题 但它们都不是我要寻找的 如何仅使用 CSS 将颜色叠加添加到背景图像 HTML 示例 div class testclass div CSS 示例 testclas
  • R 和 ggplot-将 x 轴更改为日期可消除位置闪避

    我一直在使用 ggplot 来创建绘图 并且我总是喜欢水平偏移数据点 这样误差线就不会重叠 我发现当我使用日期数据作为 x 轴时 我失去了偏移数据点的能力 DF data frame Date c 2006 09 01 2007 09 01
  • 我怎样才能停止ajax请求(不要等到响应到来)?

    如果我使用Ajax发送请求并且这个请求需要很长时间 如果我想发送花药请求我该怎么办 当前的行为第二个请求 我做了 等待第一个请求得到响应 NOTE 我想在整个应用程序上执行此行为 任何新请求立即执行 而不是等待旧请求首先完成 我的应用程序使
  • 为什么我必须重新解释指针指针?

    So this static cast代码是完全合法的 int n 13 void pn static cast
  • MS Visual Studio 2012 可以与 Windows Vista 一起使用吗?

    我运行 Windows Vista Business 并想尝试 MS Visual Studio Express 2012 它们兼容吗 兼容性列表在哪里 至少官方没有 http www microsoft com visualstudio
  • 这个 GCD 实现的 getter setter 线程安全并且比 @synchronized 工作得更好吗?对象

    interface ViewController property nonatomic strong NSString someString end implementation ViewController synthesize some
  • wxPython ListCtrl 帮助

    我正在使用 ListCtrl 它会动态填充项目 当项目 激活 双击 Enter 时 它会调用一个函数 def onClick self event 由于没有预设 ID 我如何找出列表中的哪个项目被单击 字符串是作为自身还是事件的一部分传递给
  • Tensorflow、train_step 馈送不正确

    我正在从 Convnetjs 切换到 Tensorflow 并且正在学习读取图像和使用 Tensorflow 训练 CNN 的基础知识 我在两个文件夹中有一堆 160 120 1 的图像 train go 和 train no 所以我使用两
  • 当模板名称是变量时如何使用 Groovy 模板引擎?

    我正在尝试找到一种方法来使用常规变量而不是使用硬编码的模板名称 当前代码如下所示 SCRIPT template groovy html template 我尝试使用嵌套变量扩展 但仍然出现错误 Example def body SCRIP
  • Apple PrefPane 示例无法构建,并出现 clang 错误,同时反对 -fobjc-arc 和 -fobjc-gc

    我正在尝试构建一个首选项窗格作为学习 OS X 开发的一部分 下载苹果的后首选项窗格示例代码 https developer apple com library mac samplecode PrefsPane Introduction I
  • python 上的 Latex:\alpha 和 \beta 不起作用?

    我使用 matplotlib 生成一些图形 并使用乳胶作为图例 更具体地说 我正在尝试使用这样的东西 loglog x x r label alpha legend show 但是 此代码不会在图形上显示图例 并且在关闭图像后出现错误 我正
  • CHtmlview (MFC) 中的 svg

    我无法在 MFC 应用程序中从 CHtmlView 派生的视图中使用 SVG 进行绘制 但是 当我在记事本中复制相同的源并使用 Internet Explorer 打开它时 它正在工作 我的机器上安装的IE版本是IE9 有人可以帮我解决这个
  • 在python中,random.uniform()和random.random()有什么区别?

    在 python 中 random 模块有什么区别random uniform and random random 它们都生成伪随机数 random uniform 从均匀分布生成数字并random random 生成下一个随机数 有什么不
  • 如何在 Google Apps 脚本中缓存对象

    我正在 Google Drive 电子表格的脚本中从 JIRA 获取 JSON 数据 我有一个脚本可以很好地获取数据 而且我几乎只获取该问题的数据 我返回的是 JSON 文本字段 表示有关特定 JIRA 问题的所有数据 我不想每次需要特定