Как отправить в протокол измерений с помощью Ruby
Я пытаюсь опубликовать в протоколе измерений Google, используя Ruby:
uri = URI.parse("http://www.google-analytics.com/collect")
params = {"v"=>"1", "tid"=>"UA-XXXXXXXX-X", "cid"=>"XXXXXXXXX.XXXXXXXXX", "t"=>"event", "ec"=>"200", "ea"=>"John"}
result = Net::HTTP.post_form(uri, params) #<Net::HTTPOK 200 OK readbody=true>
result.body # "GIF89a\x01\x00\x01\x00\x80\xFF\x00\xFF\xFF\xFF\x00\x00\x00,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;"
Также попытался отправить запрос GET вместо POST:
RestClient.get("http://www.google-analytics.com/collect", params: params, timeout: 4, open_timeout: 4) # "GIF89a\x01\x00\x01\x00\x80\xFF\x00\xFF\xFF\xFF\x00\x00\x00,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;"
И событие не отслеживается
Они я попытался отправить те же параметры, просто набрав их в Chrome:
Это сработало:
Я предполагаю, что мне не хватает заголовка или чего-то подобного, когда я отправляю запрос в протокол управления с помощью Ruby. Но я не могу понять, чего мне не хватает.
3 ответа
Была похожая проблема с питоном. Работал после настройки User-Agent
заголовок
Пример завитка будет выглядеть так
curl -H "user-agent: Some user agent" "https://ssl.google-analytics.com/collect?v=1&<other query params>"
Попробуйте изменить:
uri = URI.parse("http://www.google-analytics.com/collect")
чтобы:
uri = URI.parse("https://www.google-analytics.com/debug/collect")
This way you will test that request against Measurement Protocol Validation Server and instead of getting "GIF89a\x01\x00\x01\x00\x80\xFF\x00\xFF\xFF\xFF\x00\x00\x00,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;"
in response body you will get something along the lines
{
"hitParsingResult": [
{
"valid": false,
"hit": "GET /debug/collect?tid=fake\u0026v=1 HTTP/1.1",
"parserMessage": [
{
"messageType": "ERROR",
"description": "The value provided for parameter 'tid' is invalid. Please see xxx for details.",
"parameter": "tid"
},
{
"messageType": "ERROR",
"description": "Tracking Id is a required field for this hit. Please see xxx for details.",
"parameter": "tid"
}
]
}
]
}
Вы можете прочитать больше здесь: https://developers.google.com/analytics/devguides/collection/protocol/v1/validating-hits
Вам не нужен пользовательский агент, просто следуйте правилам отслеживания событий и rest-client
, С помощью Post
метод и заполните все параметры.
Ты можешь использовать rest-client
с методом post следующим образом:
RestClient.post('https://www.google-analytics.com/collect?v=1&tid=UA-XXXXXXXXX-1&cid=XXXX-XXX&t=event&ec=Event%20Category&ea=Event%20Action&ev=1&el=Event%20Label', {}, {})
Отформатируйте оставшийся клиент с помощью метода post:
RestClient.post(url, payload, headers={})
Источник: