谷歌分析API的JSON响应

时间:2014-07-22 21:27:01

标签: javascript ruby-on-rails ruby json google-analytics-api

我正在使用google-api-ruby-client从google analytics api获得响应,这是成功的,有一点我有点困惑虽然是响应对象,我想知道如何深入研究特定的键及其值,甚至解析响应以使其更容易理解..

以下是我认为是JSON响应的相关部分

"{\"kind\":\"analytics#gaData\",\"id\":\"https://www.googleapis.com/analytics/v3/data/ga?ids=ga:88893966&dimensions=ga:pagePath&metrics=ga:pageviews&filters=ga:pagePath%3D%3D/&start-date=2014-01-01&end-date=2014-07-22\",\"query\":{\"start-date\":\"2014-01-01\",\"end-date\":\"2014-07-22\",\"ids\":\"ga:88893966\",\"dimensions\":\"ga:pagePath\",\"metrics\":[\"ga:pageviews\"],\"filters\":\"ga:pagePath==/\",\"start-index\":1,\"max-results\":1000},\"itemsPerPage\":1000,\"totalResults\":1,\"selfLink\":\"https://www.googleapis.com/analytics/v3/data/ga?ids=ga:88893966&dimensions=ga:pagePath&metrics=ga:pageviews&filters=ga:pagePath%3D%3D/&start-date=2014-01-01&end-date=2014-07-22\",\"profileInfo\":{\"profileId\":\"88893966\",\"accountId\":\"53082810\",\"webPropertyId\":\"UA-53082810-1\",\"internalWebPropertyId\":\"85713348\",\"profileName\":\"All Web Site Data\",\"tableId\":\"ga:88893966\"},\"containsSampledData\":false,\"columnHeaders\":[{\"name\":\"ga:pagePath\",\"columnType\":\"DIMENSION\",\"dataType\":\"STRING\"},{\"name\":\"ga:pageviews\",\"columnType\":\"METRIC\",\"dataType\":\"INTEGER\"}],\"totalsForAllResults\":{\"ga:pageviews\":\"8\"},\"rows\":[[\"/\",\"8\"]]}"

获得
# make queries
result = client.execute(:api_method => api_method, :parameters => {
  'ids'        => PROFILE,
  'start-date' => Date.new(2014,1,1).to_s,
  'end-date'   => Date.today.to_s,
  'dimensions' => 'ga:pagePath',
  'metrics'    => 'ga:pageviews',
  'filters'    => 'ga:pagePath==/'
 })

 puts ap(result)

当我这样做时

puts ap(result.data.rows.inspect)
#returns
"[[\"/\", \"8\"]]"

当我尝试

response = JSON.parse(result.data.totalsForAllResults)
puts ap(response)
# returns error
TypeError: no implicit conversion of #<Class:0x00000001950550> into String

我想知道如何在不使用反斜杠的情况下格式化响应以及如何获取总页面浏览量?

任何帮助表示赞赏

由于

2 个答案:

答案 0 :(得分:0)

您的语法已关闭。

如果result只是一个json对象的字符串,它看起来像上面那样,你想要的是:

response = JSON.parse(result)
ap response["totalsForAllResults"]["ga:pageviews"]

查看google-api-ruby-client,result.data如果从api架构解析,则返回一个对象;如果传递媒体类型“application / json”,则返回哈希,否则返回字符串。因此,您需要确定是否将响应数据作为对象或哈希进行访问。我上面的例子将原始字符串解析为ruby哈希。

TL;博士;有多种方法可以获得您想要的数据。

答案 1 :(得分:0)

是的,您的语法已关闭。看起来应该是这样的。

https://www.googleapis.com/analytics/v3/data/ga?ids=ga:_____&dimensions=ga:date&metrics=ga:impressions,ga:adClicks,ga:adCost&start-date=2015-10-13&end-date=today

需要BaseUrl,id,metrics,start-date和end-date。并且不要忘记插入access_token。