#ruby-on-rails #ruby #google-analytics
#ruby-on-rails #ruby #google-analytics
Вопрос:
Я играю с драгоценным камнем Garb для ruby, но у меня возникли проблемы с доступом к результатам.
Вот мой код.
Garb::Session.login('user@demo.com', 'password')
profile = Garb::Management::Profile.all.detect {|profile| profile.web_property_id == 'UA-XXXXX-X'}
@ga = profile.stats(:start_date => (Date.today - 1), :end_date => Date.today)
И если я использую debug в представлении, я могу видеть результаты, но что бы я ни пробовал, я не могу получить доступ к результатам.
Вот результат отладки
--- !ruby/object:Garb::ResultSet
results:
- !ruby/object:OpenStruct
table:
:exits: "7820"
:pageviews: "24171"
sampled: false
total_results: 1
ie
- @ga.results.table.exits
- @ga.exits
- @ga.table.exits
Я также пытался преобразовать его в массив, но безуспешно.
Вы использовали этот gem раньше? Если да, то как мне получить доступ к этим результатам.
Ответ №1:
Garb::ResultSet
Это перечислитель, поэтому вы можете использовать в нем любой из методов перечислителя ( each
, map
и т.д.). Отдельные результаты являются OpenStruct
s, поэтому вы можете получить к ним прямой доступ.
@ga.map amp;:exits # returns an array of all exits
Комментарии:
1. Большое вам спасибо. Это занимало мою голову.
Ответ №2:
Я использую этот код, чтобы извлечь то, что я хочу, с помощью GARB.
require 'rubygems'
require 'garb'
require 'csv'
CA_CERT_FILE = "Cthe exact location of your cacert.pem file"
username = "your google analytics email address"
password = "your google analytics password"
web_profile = "UA-the correct number here"
limit = 10000
filter = {:productName.contains => "some product"} # this is your filter
sorter = :date.desc # you can use this part to sort
csvfile = "YourResults.csv"
Garb::Session.login(username, password, :secure => true)
class Report
extend Garb::Model
metrics :itemQuantity
dimensions :productName,
:date,
:customVarName2
end
CSV.open(csvfile, "w") do |csv|
csv << [ "itemQuantity",
"productName",
"date",
"customVarName2"
]
end
1.times do |i| # Be careful, you can cause duplication with this iteration. only do once per 10,000 expected rows
profile = Garb::Management::Profile.all.detect {|p| p.web_property_id == web_profile}
options = {
:start_date => (Date.today - 30),
:end_date => Date.today,
:limit => limit,
:offset => (i*limit) 1,
:sort => sorter
}
result = Report.results(profile, options)
result = Report.results(profile, :filters => filter)
CSV.open(csvfile, "a") do |csv|
result.each do |r|
csv << ["#{r.item_quantity}",
"#{r.product_name}",
"#{r.date}",
"#{r.custom_var_name2}"
]
end
end
end
Чтобы найти файл cacert.pem, перейдите сюдаhttp://curl.haxx.se/ca/cacert.pem
сохраните это как файл и ссылайтесь на него в коде.
Следует отметить одну вещь: вам нужно будет запросить показатели и измерения в pascalcase, но затем поместить их в свой CSV с подчеркиванием (почему, я не знаю).
В остальном ты на высоте. Просто откройте CSV-файл, когда закончите.