13

我已经编写了一个 RESTful node.js 服务作为http://www.cross-copy.net的后端,并且不仅想跟踪 Web 客户端的使用情况,还想跟踪使用的其他客户端(如命令行或应用程序)设备间复制/粘贴服务。是否可以将 Google Analytics JavaScript API 嵌入到 node.js 应用程序中并进行服务器端跟踪?

4

7 回答 7

11

由于所有答案都很老,我会提到一个新的 npm 包: https ://www.npmjs.com/package/universal-analytics

它真的很棒,而且非常易于使用。

于 2015-04-09T13:00:30.063 回答
4

安装通用分析

npm install universal-analytics --save

在您的路线文件中,需要该模块。(将process.env.GA_ACCOUNT替换为“UA-12345678-1”之类的字符串)

// Init GA client
var ua = require('universal-analytics');
var visitor = ua(process.env.GA_ACCOUNT);

现在在您的端点函数中,您可以跟踪页面浏览量。(将request.url替换为当前的 url 字符串,如'/api/users/1'

// Track pageview
visitor.pageview(request.url).send();

阅读有关 UA的文档以获取有关此模块的更多信息。

于 2016-09-29T03:42:07.323 回答
2

你不能只将 ga.js 放到你的 Node 项目中。它必须加载到浏览器中才能正常运行。

我不相信 Node 还没有任何东西(如果我错了,请纠正我!),但你应该能够轻松地调整现有的 PHP 类来进行服务器端的日志记录:

https://developers.google.com/analytics/devguides/collection/other/mobileWebsites

您可以看到请求跟踪 GIF 的 URL 是如何在 ga.php 中构建的。将 ga.php 翻译成 JS 就可以了。

$utmGifLocation = "http://www.google-analytics.com/__utm.gif";

// Construct the gif hit url.
$utmUrl = $utmGifLocation . "?" .
    "utmwv=" . VERSION .
    "&utmn=" . getRandomNumber() .
    "&utmhn=" . urlencode($domainName) .
    "&utmr=" . urlencode($documentReferer) .
    "&utmp=" . urlencode($documentPath) .
    "&utmac=" . $account .
    "&utmcc=__utma%3D999.999.999.999.999.1%3B" .
    "&utmvid=" . $visitorId .
    "&utmip=" . getIP($_SERVER["REMOTE_ADDR"]);
于 2012-06-16T14:35:44.450 回答
2

正如 Brad 理所当然地难过的那样,Node 没有任何东西......所以我在过去几天写了一个为此量身定制的 nodejs 模块,并刚刚在 NPM 上发布了它:node-ga

该模块仍然很新(几乎没有在宠物项目的生产环境中尝试过),所以请不要犹豫,提供您的意见:)


于 2013-04-03T10:29:04.003 回答
1

我尝试了 node-ga,但没有让事件跟踪工作。nodealytics完成了这项工作。

于 2013-05-29T08:58:17.740 回答
1

请参阅Core Reporting API 客户端库和示例代码 (v3)

还有以下版本:Google APIs Client Library for Node.js (alpha)

于 2014-01-30T12:01:49.923 回答
0

我编写了一个脚本来使用来自 Googles Analytics Core Reporting API (v3) 的 Node.js 查询数据。此处提供了脚本和详细的设置说明。

这是脚本部分:

'use strict';
var googleapi = require('googleapis');
var ApiKeyFile = require('mywebsiteGAapi-6116b1dg49a1.json');
var viewID = 'ga:123456700';

var google = getdefaultObj(googleapi);
var Key = getdefaultObj(ApiKeyFile);

function getdefaultObj(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var jwtClient = new google.default.auth.JWT(Key.default.client_email, null, Key.default.private_key, ['https://www.googleapis.com/auth/analytics.readonly'], null);
jwtClient.authorize(function (err, tokens) {
  if (err) {
    console.log(err);
    return;
  }
  var analytics = google.default.analytics('v3');
  queryData(analytics);
});

function queryData(analytics) {
  analytics.data.ga.get({
    'auth': jwtClient,
    'ids': viewID,
    'metrics': 'ga:users,ga:pageviews',
    'start-date': 'yesterday',
    'end-date': 'today',
  }, function (err, response) {
    if (err) {
      console.log(err);
      return;
    }
    console.log(JSON.stringify(response, null, 4));
  });
}
于 2017-07-16T22:48:59.847 回答