Google Analytics 测量协议

12
我尝试使用Google Analytics来跟踪一些更多的自定义数据。因此,我想使用事件。以下是我尝试的代码,在其中替换了uuiduser agent
<?php
function gen_uuid() {
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
mt_rand( 0, 0xffff ),
mt_rand( 0, 0x0fff ) | 0x4000,
mt_rand( 0, 0x3fff ) | 0x8000,
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
);
}

$data = array(
'v' => 1,
'tid' => 'UA-********-**',
'cid' => gen_uuid(),
't' => 'event'
);


$data['ec'] = "category";
$data['ea'] = "product";
$data['el'] = "element";
$data['ev'] = "34";


$url = 'http://www.google-analytics.com/collect';
$content = http_build_query($data);
$content = utf8_encode($content);
$user_agent = 'Example/1.0 (http://example.com/)';


$ch = curl_init();
curl_setopt($ch,CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-type: application/x-www-form-urlencoded'));
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
curl_setopt($ch,CURLOPT_POST, TRUE);
curl_setopt($ch,CURLOPT_POSTFIELDS, $content);
curl_exec($ch);
curl_close($ch);
?>

我错过了什么吗?


你为什么认为“我漏掉了什么”? - Sabuj Hassan
因为它似乎不起作用,或者至少我在Google Analytics中没有记录任何事件。 - user2693017
1
你能添加一些$data的最终值示例吗?当处理测量协议时,这才是最重要的。 - Eduardo
这篇文章可能会对你有所帮助:http://www.stumiller.me/implementing-google-analytics-measurement-protocol-in-php-and-wordpress/,它讲述了如何在PHP和WordPress中实现Google Analytics测量协议。 - Suketu
请记住,Google Analytics默认仅提供昨天及之前的数据。您需要选择时间间隔,并确保明确包含今天的日期。 - Atheist
2个回答

6
我已经测试了您的代码,它可以正常工作。
但是为了帮助您调试,将路径/collect更改为/debug/collect,这样Google就可以验证您的数据发送是否正确。
请尝试:
<?php
function gen_uuid() {
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
mt_rand( 0, 0xffff ),
mt_rand( 0, 0x0fff ) | 0x4000,
mt_rand( 0, 0x3fff ) | 0x8000,
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
);
}

$data = array(
'v' => 1,
'tid' => 'UA-1111111-1',
'cid' => gen_uuid(),
't' => 'event'
);


$data['ec'] = "category";
$data['ea'] = "product";
$data['el'] = "element";
$data['ev'] = "34";


$url = 'https://www.google-analytics.com/debug/collect';
$content = http_build_query($data);
$content = utf8_encode($content);
$user_agent = 'Example/1.0 (http://example.com/)';


$ch = curl_init();
curl_setopt($ch,CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-type: application/x-www-form-urlencoded'));
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
curl_setopt($ch,CURLOPT_POST, TRUE);
curl_setopt($ch,CURLOPT_POSTFIELDS, $content);
curl_exec($ch);
curl_close($ch);
?>

另外,请确保前往实时报告以检查您的点击是否已被处理。


如果你知道他们的UA,那么别人能否向某人的报告中添加数据呢? - Gary Carlyle Cook
1
当然,Gary!定期检查您的主机名报告和/或实施一些点击过滤器非常重要,以确保您的官方视图/报告仅包含所需的数据收集。 - Leonardo Naressi
我已经尝试了这段代码,在调试模式下看起来没问题,但在 https://www.google-analytics.com/collect 上执行时返回 500 错误。我应该检查什么? - kiks73
如果您正在使用测量协议(/mp/collect)并且想要调试您的请求,您应该将请求发送到测量协议验证服务器(/debug/mp/collect)。详情请参见:https://developers.google.com/analytics/devguides/collection/protocol/ga4/validating-events?client_type=gtag#sending_events_for_validation - Dzmitry Kulahin

1
你可以尝试这个。
        <?php
        function gen_uuid() {
        return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
        mt_rand( 0, 0xffff ),
        mt_rand( 0, 0x0fff ) | 0x4000,
        mt_rand( 0, 0x3fff ) | 0x8000,
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
        );
        }

        $data = array(
        'v' => 1,
        'tid' => 'UA-********-**',
        'cid' => gen_uuid(),
        't' => 'event'
        );


        $data['ec'] = "category";
        $data['ea'] = "product";
        $data['el'] = "element";
        $data['ev'] = "34";


        $url = 'http://www.google-analytics.com/collect';
        $content = http_build_query($data);
        $content = utf8_encode($content);
        $user_agent = 'Example/1.0 (http://example.com/)';


        $ch = curl_init();
        curl_setopt($ch,CURLOPT_USERAGENT, $user_agent);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-type: application/x-www-form-urlencoded'));
        curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
        curl_setopt($ch,CURLOPT_POST, TRUE);
        curl_setopt($ch,CURLOPT_POSTFIELDS, $content);
        curl_exec($ch);
        curl_close($ch);
        ?>

我认为这可能有效。

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