如何在php JSON编码结果中包含谷歌分析

How to include google analytics in a php JSON encode result?

本文关键字:包含 谷歌 结果 编码 php JSON      更新时间:2024-01-31

我有一个php页面,它将数组编码为JSON对象或JSONP回调,并简单地回显结果。因为这将成为一个可以直接访问的独立页面,我想收集见解并包括谷歌分析。

JSON编码的php页面:

<?php
    $arr = array('country' => 'United States', 'city' => 'New York');
    if(isset ($_GET['jsonp'])) {
        echo $_GET['jsonp'] . '(' . json_encode($arr) . ')';
    } 
    else {
        echo json_encode($arr);
    }
?>

jQuery解码部分:

<script>
    $.getJSON('https://geoip-db.com/json/geoip.php?jsonp=callback') 
         .done (function(location)
         {
             $('#country').html(location.country);
             $('#city').html(location.city);            
         });
</script>

谷歌指南建议创建一个单独的php文件,其中包含javascript跟踪代码,并将其包含在您想要跟踪的所有php页面中。类似于:

<?php include_once("analyticstracking.php") ?>

通过这种方式,跟踪器可以工作,但当试图解码生成的JSON对象时,JQuery部分会出现由注入的跟踪器脚本引起的语法错误。php编码页面也呼应了跟踪器脚本,这会产生一个无用的JSON结果。

有什么建议吗?

我不确定我是否正确理解你的问题,但你可以通过测量协议用服务器端代码调用谷歌分析:

$url = "v=1&t=pageview&tid=UA-39221247-1&cid=5555&dp=%2Fmy%2Fpage";
fopen($url);

其中"v"是版本,"tid"是帐号,"cid"是客户端id,"dp"是页面的文档路径。

这样,在解析的输出中就不会有任何会破坏jQuery代码的跟踪代码。

如果您想将各个视图聚合到一个会话中,则需要在调用之间维护cid。

请注意,这与基于Javascript的跟踪不能很好地结合在一起(即使您使用来自现有ga cookie的客户端id,它也会在ga中启动一个新会话)。

你能不能不在页脚中这样加载它?

$( document ).ready(function() {
    $("analytics-tracking").load('analyticstracking.php');
});

Eike的答案为我指明了正确的方向,因此他的答案为+1,但我不得不使用cURL而不是fopen()。

我的完整工作解决方案:

<?php
    $curl_handle=curl_init();
    curl_setopt($curl_handle, CURLOPT_URL,'http://www.google-analytics.com/collect/v=1&tid=UA-xxxxxxx-1&cid=555&t=pageview&dp=%2Fgeoip.php');
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Geoip tracker');
    $query = curl_exec($curl_handle);
    curl_close($curl_handle);
    $arr = array('country' => 'United States', 'city' => 'New York');
    if(isset ($_GET['jsonp'])) {
        echo $_GET['jsonp'] . '(' . json_encode($arr) . ')';
    } 
    else {
        echo json_encode($arr);
    }
?>

我想这对你的谷歌分析部分来说很好,jquery中断了,因为你在getJson返回了一个不是json的值,在if()部分,你返回了类似于:

callback('country'=>'UnitedStates','city'=>'NewYork');

不是一个有效的json,else部分很好,您应该在两个部分中返回相同的内容。