实时Javascript事件追踪(Javascript统计)

5

在网上有很多实时网络统计服务(w3counter-histats-gostats)。它们只在页面请求时计算一次,但我想要的是跟踪JavaScript函数/事件,因为我的网站完全是ajax。所以我想要类似于Google Analytics事件跟踪器(http://code.google.com/intl/en/apis/analytics/docs/gaJS/gaJSApiEventTracking.html)的东西,但是实时的并且非常简单。它可以托管或者只是一个PHP脚本。谢谢。

示例事件

  • 用户创建了某些内容
  • 用户删除了某些内容
  • Ajax错误发生
  • 浏览器错误发生
  • 用户登录

我找到了答案,请看

6个回答

6

实现自己的IT技术并不难。当事件发生时,比如:tracker.gif?action=create&what=sth, tracker.gif?action=error&what=k_is_undefined等,您只需向服务器发送请求即可。

然后解析服务器日志以获取统计信息(或通过tracker.php?action=create&what=sth将请求直接发送到数据库)。

由于您控制着网站,因此现在很容易在用户登录或Ajax请求失败时进行这些请求。

对于错误处理,您可以使用window.onerror

// send a request about an event to the server
function fireEvent(action, message, options) {
  var loggerUrl = "/tracker.gif", parameters;
  options = options || {};
  options.url = options.url || window.location.href;
  options.user_agent = navigator.userAgent;
  options.message = message;
  for (var i in options) {
    if (options.hasOwnProperty(i)) {
      parameters += "&" + i + "=" + encodeURIComponent(options[i]);
    }
  }    
  new Image().src = loggerUrl + parameters;
}

// log script errors
window.onerror = function(errorMessage, url, line) {   
  fireEvent("error", errorMessage, {
    url: url, 
    line: line
  });
  return true;
};

// example event on the page
fireEvent("ajaxError", "XY page failed to load");

注意:在Safari浏览器中,window.onerror不可用。


更新

这里有一个PHP解析器的概念证明:

$i = 1;
$d = file_get_contents("log.txt");
$requests = explode("\n", $d);
foreach ($requests as $req) {
  $pos = strpos($req, "tracker.gif");
  if ($pos === false) continue;
  $start_pos = strpos($req, "?", $pos);
  $end_pos = strpos($req, " ", $start_pos); // can also be " HTTP"
  $length = $end_pos - $start_pos;
  $req = substr($req, $start_pos+1, $length);
  $exprs = explode("&", $req);
  echo $i . ".<br>"; // request number
  $i += 1;
  foreach ($exprs as $expr) {
    list($name, $value) = explode("=", $expr);
    echo $name . " =>" . $value . "<br>"; // key => value
  }
}

有趣的替代方案,我以前没有见过(tracker.gif)。 - Oguz Bilgic
2
Google Analytics 其实也是做同样的事情。有趣意味着你会尝试一下吗? - gblazex
是的,我现在正在进行测试,但我的当前问题是解析日志文件,你有什么简单的解析方法吗? - Oguz Bilgic
x.x.x.32 - - [08/Jul/2010:16:58:24 -0700] "GET /example.com/favicon.ico HTTP/1.1" 200 356 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" ------- 这是一行 - Oguz Bilgic
我喜欢这个,非常完美。谢谢。 - Oguz Bilgic

5
如果您正在使用jQuery,您可以在$.ajaxSuccess事件期间运行代码。

这与我的问题无关。我问的是记录所有这些事件和错误到数据库并实时报告时间的最佳方法是什么。 - Oguz Bilgic
3
这与什么没有关系?我不知道你正在使用哪个统计跟踪程序。我只是提供了一个运行代码来跟踪事件发生的方法。如果你问我,这完全相关。 - Jason
我没有问如何检测Ajax成功。我是想知道如何跟踪所有我的Javascript事件,记录并报告它们。 - Oguz Bilgic
3
相关的,一个自助解决方案。 - TNi
2
@oguz 当然你没有询问如何检测ajax的成功。那将是一个愚蠢、自问自答的问题。你问的是“我的页面是ajax的,我需要一种跟踪点击的方法。我该怎么做?”我回答说,“在ajaxsuccess事件期间运行你的点击跟踪代码”。我不会逐步告诉你如何跟踪你自己的分析数据!我怎么知道你的数据库等方面的任何信息呢? - Jason

0

如果有人还在寻找,我发现使用Piwik作为开源替代方案非常愉悦。

对于事件跟踪,有一个很好的JavaScript客户端,附带一些文档

对于事件跟踪,我会在需要时使用这个简单的函数:

_paq.push( [ 'category', 'action', 'name', 'value' ] );

如果您在自己的服务器上托管Piwik,则可以从其Web视图中导出所有数据,或直接查询数据库以检索信息。


0

使用Google Analytics和_trackPageview(),如此处所述。

编辑:如果这不能给你想要的解决方案,我认为你正在寻找一个尚不存在的服务,在这种情况下,请采用Jason的$.ajaxSuccess()建议并自行创建。


我想问一下,是否有类似的 PHP 脚本,或者是否有类似的免费服务。 - Oguz Bilgic

0

这就是我正在寻找的,不幸的是,它不是免费的,但我希望我能找到一个。

http://mixpanel.com


去看看kissmetrics.com,它正在私人测试中,但是是一个非常酷的产品。 - Anurag

0

如果你在谷歌上搜索“实时分析”,会有很多选择。但大部分都是收费的。

我推荐使用Mixpanel和Chartbeat。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接