Google文档:使用cURL搜索+替换外部数据

时间:2017-10-18 14:14:57

标签: bash curl google-apps-script google-docs google-docs-api

我有一个google docs模板,我想用外部数据替换模板中的一些字符串,最好是通过cURL,因为应该进行更改的脚本是一个bash脚本。

我在谷歌应用程序脚本中进行搜索和替换,如下所示,但我不知道如何调用脚本并替换为一些外部数据。

function myFunction() {

var doc = DocumentApp.openById("DOCUMENT_ID");   

  var body = DocumentApp.getActiveDocument().getBody();
  var client = {
    name: 'Some name',
    address: 'Some address'
  };

  body.replaceText('{name}', client.name);
  body.replaceText('{address}', client.address);
}

更新

我创建了以下google apps脚本:

function doPost(e) {
  var body = DocumentApp.openById("JYOfA_Uv5fxLFA84g11H9XsizHo3F7e1FvSs3EG1vvo").getBody();
  var client = new Function("return " + e.postData.contents)();
  body.replaceText('{name}', client.name);
  body.replaceText('{address}', client.address);
  return ContentService.createTextOutput("Done.")
}

我正在运行的cURL命令是:

curl -L -d '{"name":"hello","address":"world"}' 'https://script.google.com/macros/s/AKfycbxF_1gddelneCdWCsFcvqT1OgU2zqkjTKSEIulSQfXjfgx1rnY/exec'

Google应用脚本调用的文档基本上包含{name}和{address}信息。

cURL命令给出了无法找到文件的错误。

链接是可访问的,因为那里没有任何秘密。只测试东西。

更新2:

链接到测试脚本: https://script.google.com/a/macros/klarna.com/d/1Q668U_HVtv3T_vQG_39oVL7V5YkcHzYhHUVhR8_XlOmUMRoPf15jDILK/edit?uiv=2&mid=ACjPJvEnpQ77A1Mo4sw8Y5IOPH5Pxs-IxEp1BFpfJU4RsfGXA7HbiHIv23ug_Rw0Y0dPKpWGM_Bb5oVznOqQMeyBki_jQb_g_LafNNPrLM0twO1eyPil3oqR-TjbHA8JToQQk4kdT1eZkE0&splash=yes

链接到测试文档: https://docs.google.com/document/d/1JYOfA_Uv5fxLFA84g11H9XsizHo3F7e1FvSs3EG1vvo/edit

1 个答案:

答案 0 :(得分:0)

以下样本怎么样?我想过根据您的情况使用doPost() Web应用程序。要使用此样本,请确认以下流程。

流程:

  1. 准备Google文档作为示例。请将{name}{address}放在那里。
  2. 将示例脚本(doPost(e))复制并粘贴到脚本编辑器中。
  3. 部署Web应用程序
    • 在脚本编辑器上
    • 发布
      • 部署为Web App
        • 创建新的项目版本
        • 在执行应用时,选择“您的帐户”
        • 在Who有权访问该应用时,请选择“任何人,甚至匿名”
        • 点击“部署”
        • 复制“当前网络应用网址”
        • 点击“确定”
  4. 请将您的端点放入sample curl命令并运行它。
  5. Current web app URL是curl命令的端点。 Web Apps的详细信息为here修改脚本时,必须将Web Apps重新部署为新版本。

    示例脚本:

    function doPost(e) {
      var body = DocumentApp.openById("DOCUMENT_ID").getBody();
      var client = new Function("return " + e.postData.contents)();
      body.replaceText('{name}', client.name);
      body.replaceText('{address}', client.address);
      return ContentService.createTextOutput("Done.")
    }
    

    在Post方法中,可以发送JSON数据。所以我用过这个。 var client = new Function("return " + e.postData.contents)();用于从接收的字符串JSON数据转换为对象。

    示例curl命令:

    curl -L -d '{name: "Some name", address: "Some address"}' 'https://script.google.com/macros/s/#####/exec'
    

    注意:

    这是一个简单的样本。因此,当您使用它时,请将其修改为您的环境。

    如果我误解了你的问题,我很抱歉。