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