我在Rails 4.0.3上构建的网站使用google-api-client
gem来验证和查询Google AnalyticsAPI以获取分析数据。
我使用此分析数据为我的博客帖子构建简单的迷你图。
我查询的数据构成了30天的综合浏览量。
为此,我将我的代码组织成一个帮助文件和一个模型。 我不确定这是否是正确的方法,因为当我加载管理页面时,它会慢下来爬行。
pageviews.rb
class Pageviews < ActiveRecord::Base
#google analytics api shenanigans
require 'google/api_client'
require 'date'
include ReportingHelper
def self.getviews post
client, analytics, parameters = ReportingHelper.initclient
result = client.execute(:api_method => analytics.management.profiles.list, parameters: parameters)
profiles = result.data.items
parameters = {
'ids' => PROFILE,
'start-date' => (Date.today - 30).strftime("%Y-%m-%d"),
'end-date' => Date.today.strftime("%Y-%m-%d"),
'metrics' => "ga:pageviews",
'dimensions' => "ga:date",
'filters' => "ga:pagePath=~/#{post}"
}
result = client.execute(:api_method => analytics.data.ga.get, :parameters => parameters)
interim = result.data.rows.map{|hit| hit[1].to_i}.join(', ')
end
end
reporting_helper.rb
require 'google/api_client'
require 'date'
module ReportingHelper
SERVICE_ACCOUNT_EMAIL = 'my_email'
KEY_PATH = File.join(Rails.root, '/config/', 'mykey.p12')
PROFILE = 'ga:123456'
def self.initclient
client = Google::APIClient.new(:application_name => 'rishighan.com', :application_version => '1')
key = Google::APIClient::PKCS12.load_key(KEY_PATH, 'notafoo')
service_account = Google::APIClient::JWTAsserter.new(
SERVICE_ACCOUNT_EMAIL,
['https://www.googleapis.com/auth/analytics.readonly', 'https://www.googleapis.com/auth/prediction'],
key)
client.authorization = service_account.authorize
analytics = client.discovered_api('analytics', 'v3')
parameters = {
'accountId' => '~all',
'webPropertyId' => '~all'
}
return client, analytics, parameters
end
end
我使用array.map
方法从响应中提取值,然后使用join
为要使用的sparklines插件创建逗号分隔的整数序列。
我知道这个操作很昂贵,并且是减慢页面速度的错误之一。
我想知道是否有正确的方法来处理这些昂贵的API请求。
提前谢谢。
答案 0 :(得分:1)
向Google执行新的API请求非常昂贵!
您应该使用低级缓存Rails.cache.fetch
来缓存API数据。
您甚至可以使用工作程序异步发送API调用,因此您的服务不会变慢。