我编写了一个 Jekyll 插件,通过使用 garb gem 调用 Google Analytics API 来显示页面上的浏览量。我的方法唯一的问题是它会为每个页面调用 API,从而减慢构建时间,并且可能会达到 API 的用户调用限制。
可以在一次调用中返回所有数据并将其存储在本地,然后查找每个页面的综合浏览量,但我的 Jekyll/Ruby-fu 并没有达到标准。我不知道如何编写插件运行一次以获取所有数据并将其存储在本地我当前的函数可以访问它的地方,而不是逐页调用 API。
基本上我的代码被写成一个液体块,可以放入我的页面布局中:
class GoogleAnalytics < Liquid::Block
def initialize(tag_name, markup, tokens)
super # options that appear in block (between tag and endtag)
@options = markup # optional optionss passed in by opening tag
end
def render(context)
path = super
# Read in credentials and authenticate
cred = YAML.load_file("/home/cboettig/.garb_auth.yaml")
Garb::Session.api_key = cred[:api_key]
token = Garb::Session.login(cred[:username], cred[:password])
profile = Garb::Management::Profile.all.detect {|p| p.web_property_id == cred[:ua]}
# place query, customize to modify results
data = Exits.results(profile,
:filters => {:page_path.eql => path},
:start_date => Chronic.parse("2011-01-01"))
data.first.pageviews
end
如何将所有对 API 的调用移动到其他函数并确保 jekyll 在开始时运行一次,然后调整上面的标签以读取该本地数据?
编辑看起来这可以通过生成器完成并将数据写入文件。请参阅此分支上的示例现在我只需要弄清楚如何对结果进行子集化:https ://github.com/Sija/garb/issues/22