繁体   English   中英

Google Apps Script:如何使用 Google App Script 从单个 GA 帐户创建用户列表并每月一次将其邮寄到 CSV

[英]Google Apps Script: how to create user list from single GA account using Google App Script and mail it in CSV once a month

下面的代码从谷歌开发者网站上的资源中收集而来,我已经苦苦挣扎了几天。

请注意,我的 JS 技能有限。

基本上我想做的是:

  1. 从特定 GA 帐户收集用户 - 成功(结果在控制台中可见,通过 localhost)
  2. 将此列表导入 Google 表格 - 不成功
  3. 每月以 CSV 格式邮寄此列表一次 - 不成功

以上所有内容均通过 Google Script App 编辑器完成。

所有相关的 API 都已打开(管理 API,高级服务),必要的客户端 ID 和 API 密钥已创建并且在所有范围内都处于活动状态。

我在哪里可以找到拖放资源来帮助我完成这项工作而无需修改。

还有一种方法可以不触发 Google 脚本编辑器中的 AUTH 并始终登录吗? 当我运行部分代码时,我得到了 mssg“gapi 未定义”。 当我通过本地服务器运行它时,它一切正常,但不能在编辑器中运行,并且在 GSE 和本地机器之间来回切换以进行测试非常烦人。

这是代码。

 function authenticate() {
    return gapi.auth2.getAuthInstance()
        .signIn({scope: "https://www.googleapis.com/auth/analytics.manage.users"})
        .then(function() { console.log("Sign-in successful"); },
              function(err) { console.error("Error signing in", err); });
  }
  function loadClient() {
    gapi.client.setApiKey("MY-API-KEY");
    return gapi.client.load("https://content.googleapis.com/discovery/v1/apis/analytics/v3/rest")
        .then(function() { console.log("GAPI client loaded for API"); },
              function(err) { console.error("Error loading GAPI client for API", err); });
  }
    gapi.load("client:auth2", function() {
    gapi.auth2.init({client_id: "MY ID"});
  });

function listAccountUserLinks() {
  var request = gapi.client.analytics.management.accountUserLinks.list({
      'accountId': 'SPECIFIC ACCOUNT'
  });
  request.execute(printAccountUserLinks);
}

function printAccountUserLinks(results) {
  if (results && !results.error) {
    var accountLinks = results.items;
    for (var i = 0, accountUserLink; accountUserLink = accountLinks[i]; i++) {
      var entity = accountUserLink.entity;
      var accountRef = entity.accountRef;
      var userRef = accountUserLink.userRef;
      var permissions = accountUserLink.permissions;
      console.log('User Email: ' + userRef.email);
    }
  }
}

回答:

您不能在 Google Apps 脚本中使用 gapi 客户端。 您需要使用内置的 Apps 脚本服务高级服务,或者直接发出 HTTP 请求并使用UrlFetchApp解析响应。

更多信息:

为了与表格 API 进行交互,您可以使用 Google 高级电子表格服务(可在Services + > Google Sheets API下激活)或内置的SpreadsheetApp应用程序 ZA2F2ED4F8EBC2CBB4C21A29DZ40AB1

分析管理 API没有高级服务,也没有内置 class,因此您需要为此发出 HTTP 请求。

例子:

我建议在与 Sheets 交互时使用 Advanced Spreadsheet 服务,因为它比SpreadsheetApp使用起来更快。

首先,要从分析管理 API 获取信息,您需要使用正确的身份验证来构建您的请求。 根据您对问题的评论:

所有相关的 API 都已打开(管理 API,高级服务),必要的客户端 ID 和 API 密钥已创建并且在所有范围内都处于活动状态。

我将假设Google Cloud Console中的正确设置已完成,并且该项目已链接到您的 Apps 脚本项目,因此我将在回答中跳过这些步骤。

首先,您需要使用 HTTP 请求从管理 API 获取有关用户帐户链接的响应:

// Assuming you got the account ID from elsewhere:
function getUserLinks(accountId) {
  var url = `https://www.googleapis.com/analytics/v3/management/accounts/${accountId}/entityUserLinks`

  var token = ScriptApp.getOAuthToken()
  var options = {
    "headers": {
        'Authorization': 'Bearer ' +  token,
    },
    "method": "GET",
  }

  return UrlFetchApp.fetch(url, options).getContentText()
}

然后你可以通过传递给你的 print function 来随意打印:

printAccountUserLinks(getUserLinks("SPECIFIC ACCOUNT"))

要发出表格 API 请求,您可以使用高级电子表格服务:

function importToSheet(spreadsheetId, range, results) {
  // basic request, change as required:
  var request = {
    "range": range, // for example "A1:B1"
    "values": [
      [
        "User Email"
      ],
      [
        results["items"][0]["entity"]["accountRef"]["userRef"]["email"]
      ]
    ],
    "majorDimension": "COLUMNS"
  }

  Sheets.Spreadsheets.Values.append(request, spreadsheetId, range, {    "valueInputOption": "USER_ENTERED"
  })
}

请在此处查看有关表格 API 值更新请求的完整文档。

最后,您可以将电子表格导出为 CSV 文件并将其附加到 email 以进行导入。 在这里,您可以简单地使用内置的GmailApp class:

// spreadsheetId is the ID of the spreadsheet to convert to CSV
function sendCsv(spreadsheetId) {
  var to = "username@domain.com"
  var subject = "Converted CSV"
  var body = "The converted CSV is attached, please take a look"

  GmailApp.sendEmail(to, subject, body, {
    attachments: [{
      fileName: SpreadsheetApp.openById(spreadsheetId).getName(),
      content: convertToCSV(spreadsheetId).getBlob().getBytes(),
      mimeType: "text/csv"
    }]
  })
}

function convertToCSV(spreadsheetId) {
  var token = ScriptApp.getOAuthToken()

  var options = {
    "headers": {
        'Authorization': 'Bearer ' +  token,
    },
    "method": "GET",
  }
  var params = "export?gid=0&format=csv"
  var url = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/${params}`

  var response = UrlFetchApp.fetch(url, options)
  return response
}

不要忘记:

当您使用 GCP 项目时,您必须在清单中为您的脚本设置明确的范围 您将需要的范围是:

...
"oauthScopes": [
  "https://www.googleapis.com/auth/analytics.manage.users",
  "https://www.googleapis.com/auth/script.external_request",
  "https://www.googleapis.com/auth/spreadsheets",
  "https://mail.google.com/"
],
...

我希望这对你有帮助!

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM