Я написал плагин Jekyll, чтобы отображать количество просмотров страниц на странице, вызывая API Google Analytics, используя драгоценный камень garb. Единственная проблема с моим подходом заключается в том, что он делает вызов API для каждой страницы, замедляя время сборки, а также потенциально ударяя пределы пользовательских вызовов API.Избегайте повторных вызовов API в Jekyll Ruby plugin
Можно было бы вернуть все данные за один вызов и сохранить их локально, а затем просмотреть количество просмотров страницы с каждой страницы, но мой 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
Full version of my plugin is here
Как я могу переместить все вызовы к API для некоторой другой функции и сделать Конечно, jekyll запускает это один раз в начале, а затем корректирует тег выше, чтобы прочитать эти локальные данные?
EDIT Похоже, что это можно сделать с помощью генератора и записать данные в файл. Смотрите пример на this branch Теперь мне просто нужно, чтобы выяснить, как подмножество результатов: https://github.com/Sija/garb/issues/22
Зачем ссылаться на Google? Храните свои страницы на локальном уровне. В любом случае, они будут более точными. – NotMe
Боюсь, вам придется уточнить. Я использую Google Analytics для записи просмотров страниц в первую очередь. Как еще я мог бы это сделать (что не было бы функционально эквивалентным?) Любой метод должен был бы получить текущее количество просмотров страниц при запуске Jekyll, а затем добавить его на каждую страницу, чтобы проблема осталась прежней. – cboettig
На самом деле проблема другая. Проблема заключается в том, что вы тянете с Google на каждую загрузку страницы. Просто сохраняя их локально, вы выполняете две вещи.Во-первых, у вас будут несколько более точные данные; но что более важно, если вы все еще запрашиваете каждую загрузку страницы, то это не имеет большого значения. Как бы то ни было, если вы объедините два: только запустите google при запуске, но сохраните локальный кеш, вы увидите, что ваши номера немного расходятся. – NotMe