Report abuse
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
module LogfileAnalyser
class UserAgentStringParser
def parse(user_agent_string)
user_agent_name = nil
user_agent_version = nil
case user_agent_string
when /^Opera\/(.+)\..+? \(.*?\)/
user_agent_name = :opera
user_agent_version = $1.to_i
when /^Mozilla\/4\.0 \(compatible; MSIE ([^.]+)\.([^;]+); .+?\) (.*? )*?Opera ((.+)\..+?)/
user_agent_name = :opera
user_agent_version = $4.to_i
when /^Mozilla\/4\.0 \(compatible; +MSIE ([^.]+)\.([^;]+);/
user_agent_name = :msie
user_agent_version = $1.to_i
when /^Mozilla\/.\.. \(.*?; .*?; .*?; .*?; rv:.*?\) Gecko\/\d+ (.*? )*?(Firefox|Shiretoko|Iceweasel|Iceweasel not firefox)\/(.+)\..+/
user_agent_name = :firefox
user_agent_version = $3.to_i
when /^Mozilla\/.\.. \(.*?; .*?; .*?; .*?; rv:.*?\) Gecko\/\d+ (.*? )*SeaMonkey\/(.+)\..+?/
user_agent_name = :seamonkey
user_agent_version = $2.to_i
when /^Mozilla\/5\.0 \(.*?; .*?; .*?; .*?\) AppleWebKit\/\S+ \(KHTML, like Gecko\) Version\/(.)\S+ Safari\/\S+/
user_agent_name = :safari
user_agent_version = $1.to_i
when /^Mozilla\/5\.0 \(.*?; .*?; .*?; .*?\) AppleWebKit\/\S+ \(KHTML, like Gecko\) Chrome\/(.)\S+ Safari\/\S+/
user_agent_name = :chrome
user_agent_version = $1.to_i
when /^Mozilla\/5\.0 \(compatible; Konqueror\/(.+)\..+?(;|\)) /
user_agent_name = :konqueror
user_agent_version = $1.to_i
when /^WordPress\/(.+)\..+?$/
user_agent_name = :wordpress
user_agent_version = $1.to_i
when /^Mozilla\/5\.0 \(.*?; .*?; .*?; .*?\) AppleWebKit\/\S+ \(KHTML, like Gecko\) Version\/(.)\S+ Mobile\/\S+ Safari\/\S+/
user_agent_name = :mobile_safari
user_agent_version = $1.to_i
when /^Mozilla\/.\.. \(.*?; .*?; .*?; .*?; rv:.*?\) Gecko\/\d+/
user_agent_name = :generic_gecko
user_agent_version = 1
when /^Mozilla\/5\.0 \(.*?; .*?; .*?; .*?\) AppleWebKit\/\S+/
user_agent_name = :generic_webkit
user_agent_version = 1
when /Mozilla\/5.0 \(compatible; Yahoo! Slurp\// || user_agent_string =~ /^Googlebot-Image\// || user_agent_string =~ /^msnbot-media\//
user_agent_name = :generic_spider
user_agent_version = 1
else
$stderr.puts "Unknown UA: #{user_agent_string}"
end
{
:user_agent_name => user_agent_name,
:user_agent_version => user_agent_version
}
end
end
end
|