Class: WebAnalyticsDiscovery::YandexMetrika

Inherits:
Object
  • Object
show all
Includes:
GrabberUtils
Defined in:
lib/web_analytics_discovery/grabber/yandexmetrika.rb

Constant Summary

Constants included from GrabberUtils

GrabberUtils::AVG_DAYS_IN_MONTH, GrabberUtils::CACHE_DIR, GrabberUtils::USER_AGENT

Instance Method Summary collapse

Methods included from GrabberUtils

#download, #download_file, #mangle_url

Instance Method Details

#do_list(list) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/web_analytics_discovery/grabber/yandexmetrika.rb', line 44

def do_list(list)
  els = list.split(/,/).map { |x| x.to_i }

  # Throw out first element, it's current day, which is incomplete
  els.shift

  sum = els.inject { |a, b| a + b }
  return sum / els.size
end

#find_idObject



15
16
17
18
19
20
21
22
# File 'lib/web_analytics_discovery/grabber/yandexmetrika.rb', line 15

def find_id
  case @page
  when /yaCounter(\d+) = new Ya\.Metrika\(\{id:(\d+)/
    $1
  else
    nil
  end
end

#run(url) ⇒ Object



10
11
12
13
# File 'lib/web_analytics_discovery/grabber/yandexmetrika.rb', line 10

def run(url)
  @page = download(url)
  run_id(find_id)
end

#run_id(id) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/web_analytics_discovery/grabber/yandexmetrika.rb', line 24

def run_id(id)
  return nil unless id
  r = {:id => id}

  json = download("http://bs.yandex.ru/informer/#{id}/json")

  # Unfortunately, it's very weird JSON, so it's easier to parse it with regexp
  # {pageviews:[42917,576537,764371,843611,826967,1009246,990612],visits:[21298,278959,309217,335495,324285,420460,430497],uniques:[20511,240509,254201,275157,270031,356657,366913],

  r[:pv_day] = do_list($1) if json =~ /pageviews:\[([0-9,]+)\]/
  r[:visits_day] = do_list($1) if json =~ /visits:\[([0-9,]+)\]/
  r[:visitors_day] = do_list($1) if json =~ /uniques:\[([0-9,]+)\]/

  # Calculate approximations
  r[:pv_week] = r[:pv_day] * 7 if r[:pv_day]
  r[:pv_mon] = (r[:pv_day] * AVG_DAYS_IN_MONTH).to_i if r[:pv_day]

  return r
end