Google App脚本:ContentService Web应用程序使用情况

时间:2012-11-09 12:29:22

标签: google-apps-script google-gadget

我被困3天,现在试图让2个Google小工具在Google网站上可靠地通信,以便根据UiInstance.getId()值交换匿名用户会话信息。由于不推荐使用gadget-to-gadget pubsub功能,我尝试使用服务器小工具中的ContentService来源自客户端小工具的doPost请求 - 我的想法是,我将会话信息存储在服务器小工具中并拉动将数据转换为网站其他页面上的小工具 - 不确定这是否可行。

但是,我甚至试图修改StackOverflow上发布的ContentService上的各种示例。我陷入了一个非常基本的步骤,无法超越下面的超级简单服务器代码。我无法弄清楚我需要在客户端小工具中使用的服务器小工具的网址是什么。我似乎得到了令人困惑的结果。

服务器代码:

function doGet(e) {
  var output = ContentService.createTextOutput();
  output.setContent("Hi from ContentServer!");
  return output;
}

我遵循的步骤:

1)将服务器作为Web应用程序发布并进行设置,以便任何人/匿名者都可以访问它。

2)发布窗口弹出窗口显示小工具可用于     https://script.google.com/macros/s/AKfycbyIa07kBC-gqG0nJq3Up5GzUntbTaYcM1KmaYF7vQvFIWN_qxA/exec

3)如果我使用浏览器打开链接,我会收到“Unknown macro doGet”。

4)如果我点击“测试网络应用程序中为您的最新代码”提供的链接。从发布窗口弹出窗口,它似乎带我去 https://script.googleusercontent.com/echo?user_content_key=WwuWW_Hhp2wlHpHWsX-qAwu7jtKrwlt1fkkesojKEWeJXKm5AoUOhuRHxu4RIHLrWovOBUsHhOB3No0RYr05RE4tWtliFlXKm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnG5I1NuldcVdfVF6dOROkmljXtr0dWIARhfeRbamxWJIIJeMc5tWnrGPpehwqDtynQ&lib=MfYY3NqJ0IdcpreIfwd3uwgmzn1S_adTp

第4步的上述链接来自浏览器,但它非常适合我的客户端小工具!它似乎是我第一次版本和发布它,但如果我更新版本甚至一次返回原始HTML。

我相信我错过了一些微不足道的步骤,或者网络应用小工具存在严重的版本控制或部署错误。

我已经检查了stackoverflow上的以下线程非常有用。 How to use ContentService and doPost to create a REST API

KamilG似乎已经克服了这个问题Another doGet() issue with Google Apps Script - "Unknown macro doGet" error

但它对我来说非常不稳定,我无法确定从服务器小工具中获取ContentService的任何可靠程序。

非常感谢任何帮助和解释。

这是我的客户端小工具代码。

function doGet(e) {
//  var url = "https://script.google.com/macros/s/AKfycbyIa07kBC-gqG0nJq3Up5GzUntbTaYcM1KmaYF7vQvFIWN_qxA/exec";
  //var url = "https://script.googleusercontent.com/echo?user_content_key=9tzQxTSPm8ADsHKl4bCg6ru-49C19kYZCW8IRuWiWi-Xe_lTlQZS4xq8v5aPqjR6Ybj7-xjjJXyQPhOH0T3KFtJUtXc7U-Dkm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJlCLn2pnKC0O1TYz53ccgjxtVC9ccM8kFegFJ0AJSK_YP_ylqfjfm1EU_BUbZUu-88PMDJ6xpj8&lib=MTLHdJRs3UPYj3bYgbhBNnNGZ7UmftE34";
  var url = "https://script.googleusercontent.com/echo?user_content_key=LvlwGkBktQ732xyD1HJbh5OhMsuhkidt_rOovw-olm-wJQF4LlErMDSxsfDaAb4UBYqOeTI3-8soIBj-KaOCDi0WlUav4Nl_m5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnG5I1NuldcVdfVF6dOROkmljXtr0dWIARhfeRbamxWJIIJeMc5tWnrGPpehwqDtynQ&lib=MfYY3NqJ0IdcpreIfwd3uwgmzn1S_adTp";

  // WELL ONE OF THE URLS WORKS FROM ABOVE!!! BUT ONLY TILL I UPDATE THE SERVER WEB APP VERSION :(

  var app = UiApp.createApplication().setTitle("ClientService Client test");
  app.setStyleAttribute("background", "azure");

  var fetchMethod = 'get';
  var response = UrlFetchApp.fetch(url, {method: fetchMethod});

  //var lbl = app.createHTML("<b>Response :</b>" + response.getContentText());
  var lbl = app.createTextArea().setText(response.getContentText());

  var lbl1 = app.createHTML("<b>Response code :</b> "
                            + response.getResponseCode()); 

  app.add(lbl);
  app.add(lbl1);
  return app;
}

请帮助。

1 个答案:

答案 0 :(得分:2)

这大部分都是有效的,但我认为可能有一些替代方案。

  1. 关于你的观点#3 - 上面的URL有效。您测试的版本肯定有问题(也许您没有正确声明doGet?)。
  2. 来自#4的链接是您在内容服务时发生的一次性使用重定向。请在底部查看重定向部分here。这个链接是短暂的,你可能足够快,可以在浏览器中捕获它,但另一个单独的调用客户端(“小工具”)可能不是那么幸运。因此,您不应该直接调用googlecontentservice.com链接。
  3. 关于ContentService的整体问题,我没有看到这个。如果我正确使用/ exec链接,然后在每次适当的更改后正确地增加版本的东西按预期的那样工作。
  4. 我构建了一个访问您的内容服务的简单Web应用程序,事情似乎对我来说一直很好。见下文。代码看起来与你的相同,但我使用的是第一个url。

    https://script.google.com/macros/s/AKfycbw6nlfv5ME6F3Z2WBdW24YAgfQm_E5gYV0xrMDvDwZLrX7PdMU/exec

    作为替代方案 - 您是否有理由将服务器端UrlFetch从一个脚本执行到另一个脚本?如果你可以获取数据服务器端,你可以只在UI脚本中执行内容脚本的逻辑吗?