3

我正在为我的桌面应用程序使用测量协议。如何在测量协议中发送批量请求

通过以下URL,我可以向Google Analytics(GA)发送单一请求。

https://www.google-analytics.com/collect?v=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0 

但我想向GA发送多个请求。 根据文档,使用/批可以发送多个请求。

我已经试过这个URL,

https://www.google-analytics.com/batch? 
v=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test1&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0 
&v=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test2&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0 
&v=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test3&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0 

但报告仅3日的事件得到记录。

请帮我解决这个问题。

回答

4

您应该将原始文本中的有效负载/数据发送到不同的行。另外,请确保您发出POST请求。这对我有效。这里是显示了它在邮差的图像:

Batch request to Google Analytics Measurement Protocol

从邮递员可以再生成您使用的语言的代码。例如PHP Curl,它看起来像这样。

<?php 

$curl = curl_init(); 

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://www.google-analytics.com/batch", 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_ENCODING => "", 
    CURLOPT_MAXREDIRS => 10, 
    CURLOPT_TIMEOUT => 30, 
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
    CURLOPT_CUSTOMREQUEST => "POST", 
    CURLOPT_POSTFIELDS => "v=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test1&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0\r\nv=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test2&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0\r\nv=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test3&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0", 
    CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache", 
    "content-type: text/html", 
    "postman-token: de143f21-c12e-d268-32a0-9e5101541a07" 
), 
)); 

$response = curl_exec($curl); 
$err = curl_error($curl); 

curl_close($curl); 

if ($err) { 
    echo "cURL Error #:" . $err; 
} else { 
    echo $response; 
} 
0

有用的帖子从@Søren关于邮差,我从来没有用过。不幸的是,它仍然花了我一些时间来找出为什么我的电话https://www.google-analytics.com/batch不能在JavaScript中工作,引用CORS 403错误作为问题。在邮差工作正常,但从邮差的JS输出不是。

var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "https://www.google-analytics.com/batch", 
    "method": "POST", 
    "headers": { 
    "cache-control": "no-cache", 
    "postman-token": "bec425da-11af-ec17-f702-fd7d01133ee4" 
    }, 
    "data": "v=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test1&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0\r\nv=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test2&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0\r\nv=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test3&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0" 
} 

$.ajax(settings).done(function (response) { 
    console.log(response); 
}); 

所以使用招和比较呼叫邮差做,唯一的区别我可以在原始视图中看到被邮递员使用POST https://www.google-analytics.com/batch作为JS使用OPTIONS https://www.google-analytics.com/batch哪里。通过执行原始脚本并将其从OPTIONS更改为POST,它工作正常。那么,为什么我的邮件没有发送?然后我读了一些关于标题需要匹配的内容,否则它将不会作为POST执行。那么解决方案?取下头...

var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "https://www.google-analytics.com/batch", 
    "method": "POST", 
    "data": "v=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test1&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0\r\nv=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test2&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0\r\nv=1&tid=UA-XXXXXX-1&cid=754654B98786B&t=event&ec=Test3&ea=click&cd=XYZ&an=XYZ&aid=123&av=3.0&aiid=1.0" 
} 

$.ajax(settings).done(function (response) { 
    console.log(response); 
}); 

我花了大量的时间,如果要得到这个工作,对于这么简单的东西,并希望这将帮助别人了。