Доступ к результатам Garb Gem

#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-файл, когда закончите.