class GaTrackable::VideoPlaysFetcher
Constants
- GA_FILTER
Public Instance Methods
counter_class()
click to toggle source
# File lib/ga_trackable/video_plays_fetcher.rb, line 6 def counter_class GaTrackable::VideoPlaysCounter end
get_details_for(start_date: 1.year.ago, path:)
click to toggle source
Поулчить данные по просмотрам для конкретного пути. Используется в rake-таске.
# File lib/ga_trackable/video_plays_fetcher.rb, line 11 def get_details_for(start_date: 1.year.ago, path:) ga_start_date = start_date.in_time_zone.strftime(GA_DATE_FORMAT) ga_end_date = DateTime.current.strftime(GA_DATE_FORMAT) data = @client.execute(api_method: @analytics.data.ga.get, parameters: { 'ids' => "ga:#{@config.view_id}", 'start-date' => ga_start_date, 'end-date' => ga_end_date, 'dimensions' => 'ga:eventCategory,ga:eventAction', 'metrics' => 'ga:uniqueEvents,ga:totalEvents', 'sort' => 'ga:eventCategory,ga:eventAction', 'filters' => "ga:eventCategory==#{GA_FILTER};ga:eventAction=@#{path}" }).data end
Private Instance Methods
fetch_video_url(event_action)
click to toggle source
# File lib/ga_trackable/video_plays_fetcher.rb, line 108 def fetch_video_url(event_action) index = nil @config.video_url_base.each do |base| index = event_action.index base break if index.present? end if index.present? trailing_index = event_action.index('/playlist.m3u8') || event_action.length key = event_action.slice(index...trailing_index) else key = event_action end end
get_data(tstart, tend, start_index, max_results)
click to toggle source
# File lib/ga_trackable/video_plays_fetcher.rb, line 80 def get_data(tstart, tend, start_index, max_results) ga_start_date = tstart.strftime(GA_DATE_FORMAT) ga_end_date = tend.strftime(GA_DATE_FORMAT) params = { 'ids' => "ga:#{@config.view_id}", 'start-date' => ga_start_date, 'end-date' => ga_end_date, 'start-index' => start_index, 'max-results' => max_results, 'dimensions' => 'ga:eventCategory,ga:eventAction', 'metrics' => 'ga:uniqueEvents,ga:totalEvents', 'sort' => 'ga:eventCategory,ga:eventAction', 'filters' => "ga:eventCategory==#{GA_FILTER}" } data = @client.execute(api_method: @analytics.data.ga.get, parameters: params).data GaTrackable.out << "Video plays data:\n" GaTrackable.out << "params:\n" GaTrackable.out << params.to_s GaTrackable.out << "\n" GaTrackable.out << "response:\n" GaTrackable.out << data.rows.to_s GaTrackable.out << "\n" data end
get_entity(video_url)
click to toggle source
# File lib/ga_trackable/video_plays_fetcher.rb, line 122 def get_entity(video_url) @config.video_plays_entity_fetcher.call(video_url) end
process_entity(entity, row, create_in_past: false)
click to toggle source
# File lib/ga_trackable/video_plays_fetcher.rb, line 40 def process_entity(entity, row, create_in_past: false) event_category = row[0] event_action = row[1] unique_events = row[2].to_i total_events = row[3].to_i # Пытаемся получить каунтер на сегодняшний день для полученного видеофайла (event_action). today_counters = entity.video_plays_counters.where('created_at >= ? AND event_action = ?', start_date, event_action) fail "more than one today counter for #{entity.class.name}##{entity.id} and <#{event_action}>" if today_counters.size > 1 if today_counters.any? counter = today_counters.first else counter = entity.video_plays_counters.build( event_category: event_category, event_action: event_action ) if create_in_past counter.created_at = 1.day.ago counter.updated_at = counter.created_at counter.initial_data = true end end # Мы считаем просмотры по event_action плейлист. # В выдаче аналитики комбинации страница + видеофайл могут встречаться много раз. # По этому код ниже определяет надо инициализировать счетчики, или инкрементировать. key = event_action if sometime_processed_counters.index(key) counter.unique_events += unique_events counter.total_events += total_events else counter.unique_events = unique_events counter.total_events = total_events sometime_processed_counters << key end counter.save! end
process_row(row, hsh = {})
click to toggle source
create_in_past нужен для создания счетчика “вчера”. Это нужно в случае стартовой инициализации счетчиков. Стартовые данные за весь период записываем вчерашним днем, за сегодня и далее – записываем стандартным образом. По-просмотрам видео есть специфика:
одной странице могут соответствовать разные видеофайлы(event_action) в разное время.
# File lib/ga_trackable/video_plays_fetcher.rb, line 32 def process_row(row, hsh = {}) event_action = row[1] entities = get_entities(fetch_video_url(event_action)) entities.each {|e| process_entity(e, row, hsh) } end