访问Garb Gem结果

时间:2011-05-13 15:28:25

标签: ruby-on-rails ruby google-analytics

我正在玩ruby的Garb gem,但我无法访问结果。

这是我的代码。

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

  • @ ga.results.table.exits
  • @ ga.exits
  • @ ga.table.exits

我已经尝试过将它制作成阵列而没有运气。

你以前用过这个宝石吗?如果是这样,我如何访问这些结果。

2 个答案:

答案 0 :(得分:4)

Garb::ResultSet是一个枚举器,因此您可以使用其中的任何枚举器方法(eachmap等)。单个结果为OpenStruct,因此您可以直接访问它们。

@ga.map &:exits # returns an array of all exits

答案 1 :(得分:0)

我使用此代码来使用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文件即可。