1

garb gem を使用して Google アナリティクス API を呼び出し、ページのページビュー数を表示する Jekyll プラグインを作成しました。私のアプローチの唯一の問題は、ページごとに API を呼び出すため、ビルド時間が遅くなり、API のユーザー呼び出し制限に達する可能性があることです。

すべてのデータを 1 回の呼び出しで返してローカルに保存し、各ページのページビュー カウントを調べることは可能ですが、私の 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 が最初に 1 回実行されることを確認してから、上記のタグを調整してそのローカル データを読み取るにはどうすればよいでしょうか?

EDITこれはジェネレーターで実行でき、データをファイルに書き込むことができるようです。このブランチの例を参照してください。結果をサブセット化する方法を理解する必要があります: https://github.com/Sija/garb/issues/22

4

1 に答える 1

0

データを保存するには、次のことを行う必要がありました。

  1. APIを呼び出すGeneratorクラス(Jekyll wikiプラグインを参照)を記述します。

  2. データをハッシュに変換します(パスによる簡単な検索については、5を参照してください)。

    result = Hash[data.collect{|row| [row.page_path, [row.exits, row.pageviews]]}]
    
  3. データハッシュをJSONファイルに書き込みます。

  4. 既存のLiquidブロッククラスのファイルからデータを読み込みます。

    ブロックタグはディレクトリから_includes機能し、ジェネレータはルートディレクトリから機能することに注意してください。

  5. データがハッシュに変換されると簡単に、ページパスを一致させます。

    result[path][1]
    

完全なプラグインのコード、ジェネレーターの作成方法やファイルの書き込み方法などをここに示します

そして、これについて助けてくれたGitHubの Sijaに感謝します。

于 2013-03-07T18:13:09.553 に答える