esearchy 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +112 -0
- data/bin/esearchy +334 -0
- data/lib/esearchy/LocalEngines/directory.rb +16 -0
- data/lib/esearchy/OtherEngines/googlegroups.rb +27 -0
- data/lib/esearchy/OtherEngines/ldap.rb +44 -0
- data/lib/esearchy/OtherEngines/pgp.rb +22 -0
- data/lib/esearchy/OtherEngines/spider.rb +43 -0
- data/lib/esearchy/OtherEngines/usenet.rb +22 -0
- data/lib/esearchy/SearchEngines/altavista.rb +25 -0
- data/lib/esearchy/SearchEngines/bing.rb +32 -0
- data/lib/esearchy/SearchEngines/google.rb +30 -0
- data/lib/esearchy/SearchEngines/yahoo.rb +32 -0
- data/lib/esearchy/SocialEngines/classmates.rb +33 -0
- data/lib/esearchy/SocialEngines/googleprofiles.rb +36 -0
- data/lib/esearchy/SocialEngines/linkedin.rb +35 -0
- data/lib/esearchy/SocialEngines/linkedinfull.rb +100 -0
- data/lib/esearchy/SocialEngines/naymz.rb +36 -0
- data/lib/esearchy/bugmenot.rb +26 -0
- data/lib/esearchy/docs.rb +267 -0
- data/lib/esearchy/esearchy.rb +195 -0
- data/lib/esearchy/genericengine.rb +153 -0
- data/lib/esearchy/localengines.rb +1 -0
- data/lib/esearchy/otherengines.rb +5 -0
- data/lib/esearchy/searchengines.rb +4 -0
- data/lib/esearchy/socialengines.rb +4 -0
- data/lib/esearchy/useragent.rb +188 -0
- data/lib/esearchy.rb +24 -0
- metadata +129 -0
@@ -0,0 +1,195 @@
|
|
1
|
+
def D m
|
2
|
+
puts m if ESearchy::log
|
3
|
+
end
|
4
|
+
|
5
|
+
module ESearchy
|
6
|
+
|
7
|
+
@@log = false
|
8
|
+
#BUGMENOT = ESearchy::Bugmenot::fetch("linkedin.com")
|
9
|
+
|
10
|
+
def self.log
|
11
|
+
@@log
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.log=(v)
|
15
|
+
@@log=v
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
class ESearchyMissingAppID < StandardError; end
|
20
|
+
class ESearchyMissingQuery < StandardError; end
|
21
|
+
class ESearchyMissingWebsite < StandardError; end
|
22
|
+
class ESearchyMissingCompany < StandardError; end
|
23
|
+
|
24
|
+
class Search
|
25
|
+
|
26
|
+
EMAIL_ENGINES = {
|
27
|
+
:Google => ESearchy::SearchEngines::Google,
|
28
|
+
:Bing => ESearchy::SearchEngines::Bing,
|
29
|
+
:Yahoo => ESearchy::SearchEngines::Yahoo,
|
30
|
+
:Altavista => ESearchy::SearchEngines::Altavista,
|
31
|
+
:PGP => ESearchy::OtherEngines::PGP,
|
32
|
+
:Spider => ESearchy::OtherEngines::Spider,
|
33
|
+
:Usenet => ESearchy::OtherEngines::Usenet,
|
34
|
+
:GoogleGroups => ESearchy::OtherEngines::GoogleGroups
|
35
|
+
}
|
36
|
+
|
37
|
+
PEOPLE_ENGINES = {
|
38
|
+
:LinkedIn => ESearchy::SocialEngines::LinkedIn,
|
39
|
+
:GoogleProfiles => ESearchy::SocialEngines::GoogleProfiles,
|
40
|
+
:Naymz => ESearchy::SocialEngines::Naymz,
|
41
|
+
:Classmates => ESearchy::SocialEngines::Classmates
|
42
|
+
}
|
43
|
+
|
44
|
+
def initialize(args, &block)
|
45
|
+
@@query = args[:query] || nil
|
46
|
+
@@company = args[:company] || nil
|
47
|
+
@@maxhits = args[:maxhits] || nil
|
48
|
+
@@start_at = args[:start_at] || nil
|
49
|
+
@@website = args[:website] || nil
|
50
|
+
ESearchy.log = args[:log] if args[:log]
|
51
|
+
$emails = []
|
52
|
+
$people = []
|
53
|
+
$results = []
|
54
|
+
block.call(self) if block_given?
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.query
|
58
|
+
@@query
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.company
|
62
|
+
@@company
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.website
|
66
|
+
@@website
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.maxhits
|
70
|
+
@@maxhits
|
71
|
+
end
|
72
|
+
|
73
|
+
def maxhits
|
74
|
+
@@maxhits
|
75
|
+
end
|
76
|
+
|
77
|
+
def start(&block)
|
78
|
+
block.call(self)
|
79
|
+
end
|
80
|
+
|
81
|
+
def emails
|
82
|
+
$emails
|
83
|
+
end
|
84
|
+
|
85
|
+
def people
|
86
|
+
$people
|
87
|
+
end
|
88
|
+
|
89
|
+
def results
|
90
|
+
$results
|
91
|
+
end
|
92
|
+
|
93
|
+
def Emails(*args, &block)
|
94
|
+
Emails.new(*args, &block)
|
95
|
+
end
|
96
|
+
|
97
|
+
def People(*args, &block)
|
98
|
+
People.new(*args, &block)
|
99
|
+
end
|
100
|
+
|
101
|
+
module MetaType
|
102
|
+
def results
|
103
|
+
$results
|
104
|
+
end
|
105
|
+
|
106
|
+
def docs(&block)
|
107
|
+
@engines.each_key {|e| @documents.concat(@engines[e].documents) }
|
108
|
+
res = ESearchy::Docs.new(@documents)
|
109
|
+
res.search
|
110
|
+
$emails.concat(res.emails)
|
111
|
+
$results.concat(res.results)
|
112
|
+
block.call(res) if block_given?
|
113
|
+
end
|
114
|
+
|
115
|
+
def method_missing(name, *args)
|
116
|
+
@engines[name.to_sym]
|
117
|
+
end
|
118
|
+
|
119
|
+
def maxhits=(v)
|
120
|
+
@engines.each_key {|e| @engines[e].maxhits=v}
|
121
|
+
end
|
122
|
+
|
123
|
+
def [](v)
|
124
|
+
@engine[v]
|
125
|
+
end
|
126
|
+
|
127
|
+
private
|
128
|
+
def save_results(e)
|
129
|
+
$results.concat(@engines[e].results)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
class Emails
|
134
|
+
include MetaType
|
135
|
+
|
136
|
+
def initialize(*args, &block)
|
137
|
+
@engines={}
|
138
|
+
@documents = []
|
139
|
+
args.each do |e|
|
140
|
+
@engines[e] = ESearchy::Search::EMAIL_ENGINES[e].new(Search.query)
|
141
|
+
end
|
142
|
+
self.maxhits=Search.maxhits if Search.maxhits
|
143
|
+
block.call(self) if block_given?
|
144
|
+
end
|
145
|
+
attr_reader :emails
|
146
|
+
|
147
|
+
def search(&block)
|
148
|
+
@engines.each_key do |e|
|
149
|
+
@engines[e].search
|
150
|
+
save_emails(e)
|
151
|
+
save_results(e)
|
152
|
+
block.call(@engines[e]) if block_given?
|
153
|
+
end
|
154
|
+
nil
|
155
|
+
end
|
156
|
+
|
157
|
+
private
|
158
|
+
def save_emails(e)
|
159
|
+
$emails.concat(@engines[e].emails)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
class People
|
164
|
+
include MetaType
|
165
|
+
|
166
|
+
def initialize(*args, &block)
|
167
|
+
@engines={}
|
168
|
+
args.each do |e|
|
169
|
+
@engines[e] = ESearchy::Search::PEOPLE_ENGINES[e].new(Search.company)
|
170
|
+
end
|
171
|
+
self.maxhits=Search.maxhits if Search.maxhits
|
172
|
+
block.call(self) if block_given?
|
173
|
+
end
|
174
|
+
|
175
|
+
def people
|
176
|
+
$people
|
177
|
+
end
|
178
|
+
|
179
|
+
def search(&block)
|
180
|
+
@engines.each_key do |e|
|
181
|
+
@engines[e].search
|
182
|
+
save_people(e)
|
183
|
+
save_results(e)
|
184
|
+
block.call(self) if block_given?
|
185
|
+
end
|
186
|
+
nil
|
187
|
+
end
|
188
|
+
|
189
|
+
private
|
190
|
+
def save_people(e)
|
191
|
+
$people.concat(@engines[e].people)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
module ESearchy
|
2
|
+
class GenericEngine
|
3
|
+
|
4
|
+
def initialize(query, start = 0, stop = nil, &block)
|
5
|
+
@query = CGI.escape(query) or raise ESearchyMissingQuery
|
6
|
+
@company = ESearchy::Search.company || ""
|
7
|
+
@start = start
|
8
|
+
@totalhits = stop
|
9
|
+
@documents = []
|
10
|
+
self.class::TYPE < 2 ? @emails = [] : @people = []
|
11
|
+
@results = []
|
12
|
+
block.call(self) if block_given?
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :documents
|
16
|
+
attr_reader :results
|
17
|
+
attr_reader :emails
|
18
|
+
attr_reader :people
|
19
|
+
|
20
|
+
|
21
|
+
def search
|
22
|
+
get self.class::ENGINE, self.class::PORT,
|
23
|
+
@querypath + @start.to_s, header() do |r|
|
24
|
+
parse(r.body)
|
25
|
+
D "Searching #{self.class} from #{@start} to #{calculate_top()}.\n"
|
26
|
+
crawler(r.body.gsub(/<em>|<\/em>/,"").gsub(/<b>|<\/b>/,"")) unless @totalhits == 0
|
27
|
+
@start = @start + self.class::NUM
|
28
|
+
sleep(4) and search if @totalhits > @start
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def start=(v)
|
33
|
+
@start=v
|
34
|
+
end
|
35
|
+
|
36
|
+
def maxhits=(v)
|
37
|
+
@totalhits=v
|
38
|
+
end
|
39
|
+
|
40
|
+
def company=(v)
|
41
|
+
@company=v
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def get(url, port, querystring = "/", headers = {}, &block)
|
47
|
+
http = Net::HTTP.new(url,port)
|
48
|
+
begin
|
49
|
+
http.start do |http|
|
50
|
+
request = Net::HTTP::Get.new(querystring, headers)
|
51
|
+
response = http.request(request)
|
52
|
+
case response
|
53
|
+
when Net::HTTPSuccess, Net::HTTPRedirection
|
54
|
+
block.call(response)
|
55
|
+
else
|
56
|
+
return response.error!
|
57
|
+
end
|
58
|
+
end
|
59
|
+
rescue Net::HTTPFatalError
|
60
|
+
D "Error: Something went wrong with the HTTP request"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def header
|
65
|
+
begin
|
66
|
+
return self.class::HEADER
|
67
|
+
rescue
|
68
|
+
return {'User-Agent' => UserAgent::fetch}
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def calculate_top
|
73
|
+
(@start+self.class::NUM) > @totalhits ? @totalhits : @start+self.class::NUM
|
74
|
+
end
|
75
|
+
|
76
|
+
def totalhits(realhits)
|
77
|
+
@totalhits > realhits ? realhits : @totalhits
|
78
|
+
end
|
79
|
+
|
80
|
+
def parse(object)
|
81
|
+
case object
|
82
|
+
when Array
|
83
|
+
parse_html object
|
84
|
+
when Json
|
85
|
+
parse_json object
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def parse_html ( array )
|
90
|
+
array.each do |a|
|
91
|
+
case a[0]
|
92
|
+
when /(PDF|DOC|XLS|PPT|TXT)/
|
93
|
+
@documents << [a[1],"."+$1.to_s.downcase]
|
94
|
+
when nil
|
95
|
+
if a[2] =~ /(.pdf$|.doc$|.docx$|.xlsx$|.pptx$|.odt$|.odp$\
|
96
|
+
|.ods$|.odb$|.txt$|.rtf$|.ans$|.csv$)/i
|
97
|
+
@documents << [a[2],$1.to_s.downcase]
|
98
|
+
end
|
99
|
+
when /(.pdf$|.doc$|.docx$|.xlsx$|.pptx$|.odt$|.odp$|.ods$|.odb$|.txt$|.rtf$|.ans$|.csv$)/i
|
100
|
+
@documents << [CGI.unescape(a[2] || ""),$1.to_s.downcase]
|
101
|
+
else
|
102
|
+
#D "I do not parse this doc's \"#{a}\" filetype yet:)"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def parse_json ( json )
|
108
|
+
json.each do |j|
|
109
|
+
case j["url"]
|
110
|
+
when /(.pdf$|.doc$|.docx$|.xlsx$|.pptx$|.odt$|.odp$|.ods$|.odb$|.txt$|.rtf$|.ans$|.csv$)/i
|
111
|
+
@documents << [j["url"],$1.to_s.downcase]
|
112
|
+
else
|
113
|
+
@urls << [j["url"],$1.to_s.downcase]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def crawler(text)
|
119
|
+
self.class::TYPE < 2 ? crawl_emails(text) : crawl_people(text)
|
120
|
+
end
|
121
|
+
|
122
|
+
def crawl_emails(text)
|
123
|
+
list = text.scan(/[a-z0-9!#$&'*+=?^_`{|}~-]+(?:\.[a-z0-9!#$&'*+=?^_`{|}~-]+)*_at_\
|
124
|
+
(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z](?:[a-z-]*[a-z])?|\
|
125
|
+
[a-z0-9!#$&'*+=?^_`{|}~-]+(?:\.[a-z0-9!#$&'*+=?^_`{|}~-]+)*\sat\s(?:[a-z0-9](?:[a-z0-9-]\
|
126
|
+
*[a-z0-9])?\.)+[a-z](?:[a-z-]*[a-z])?|[a-z0-9!#$&'*+=?^_`{|}~-]+\
|
127
|
+
(?:\.[a-z0-9!#$&'*+=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z](?:[a-z-]*[a-z])?|\
|
128
|
+
[a-z0-9!#$&'*+=?^_`{|}~-]+(?:\.[a-z0-9!#$&'*+=?^_`{|}~-]+)*\s@\s(?:[a-z0-9](?:[a-z0-9-]*\
|
129
|
+
[a-z0-9])?\.)+[a-z](?:[a-z-]*[a-z])?|[a-z0-9!#$&'*+=?^_`{|}~-]+(?:\sdot\s[a-z0-9!#$&'*+=?^_`\
|
130
|
+
{|}~-]+)*\sat\s(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\sdot\s)+[a-z](?:[a-z-]*[a-z])??/i)
|
131
|
+
#print_(list)
|
132
|
+
c_list = fix(list)
|
133
|
+
@emails.concat(c_list).uniq!
|
134
|
+
c_list.zip do |e|
|
135
|
+
@results << [e[0], "E", self.class.to_s.upcase,
|
136
|
+
e[0].match(/#{CGI.unescape(@query).gsub("@","").split('.')[0]}/) ? "T" : "F"]
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def fix(list)
|
141
|
+
list.each do |e|
|
142
|
+
e.gsub!(" at ","@")
|
143
|
+
e.gsub!("_at_","@")
|
144
|
+
e.gsub!(" dot ",".")
|
145
|
+
e.gsub!(/[+0-9]{0,3}[0-9()]{3,5}[-]{0,1}[0-9]{3,4}[-]{0,1}[0-9]{3,5}/,"")
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def crawl_people(text)
|
150
|
+
raise "This is just a container"
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'esearchy/localengines/directory'
|
@@ -0,0 +1,188 @@
|
|
1
|
+
class UserAgent
|
2
|
+
@USER_AGENTS=[
|
3
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Acoo Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
|
4
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
|
5
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Acoo Browser; InfoPath.2; .NET CLR 2.0.50727; Alexa Toolbar)",
|
6
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; AOL 7.0; Windows NT 5.1; FunWebProducts)",
|
7
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; AOL 8.0; Windows NT 5.1; SV1)",
|
8
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.0; Windows NT 5.1; .NET CLR 1.1.4322; Zango 10.1.181.0)",
|
9
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; AOL 6.0; Windows NT 5.1)",
|
10
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
|
11
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
|
12
|
+
"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
|
13
|
+
"Mozilla/5.0 (X11; U; Linux; C -) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.5",
|
14
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; JyxoToolbar1.0; Embedded Web Browser from: http://bsalsa.com/; Avant Browser; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322)",
|
15
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Avant Browser)",
|
16
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Avant Browser; Avant Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1)",
|
17
|
+
"Mozilla/5.0 (X11; 78; CentOS; US-en) AppleWebKit/527+ (KHTML, like Gecko) Bolt/0.862 Version/3.0 Safari/523.15",
|
18
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1",
|
19
|
+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X Mach-O; en; rv:1.8.1.12) Gecko/20080206 Camino/1.5.5",
|
20
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.0.1) Gecko/20030111 Chimera/0.6",
|
21
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.10) Gecko/20070228 Camino/1.0.4",
|
22
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en; rv:1.8.1.4pre) Gecko/20070511 Camino/1.6pre",
|
23
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.9 (KHTML, like Gecko, Safari) Safari/419.3 Cheshire/1.0.ALPHA",
|
24
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/419 (KHTML, like Gecko, Safari/419.3) Cheshire/1.0.ALPHA",
|
25
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.36 Safari/525.19",
|
26
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19",
|
27
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042815 Firefox/3.0.10 CometBird/3.0.10",
|
28
|
+
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2009011615 Firefox/3.0.5 CometBird/3.0.5",
|
29
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; Crazy Browser 3.0.0 Beta2)",
|
30
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; Crazy Browser 2.0.1)",
|
31
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Crazy Browser 1.0.5; .NET CLR 1.1.4322; InfoPath.1)",
|
32
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Deepnet Explorer 1.5.0; .NET CLR 1.0.3705)",
|
33
|
+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Demeter/1.0.9 Safari/125",
|
34
|
+
"Mozilla/5.0 (X11; U; Linux i686; en; rv:1.8.1.12) Gecko/20080208 (Debian-1.8.1.12-2) Epiphany/2.20",
|
35
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.3) Gecko/20041007 Epiphany/1.4.7",
|
36
|
+
"Mozilla/5.0 (Windows; U; Win95; en-US; rv:1.5) Gecko/20031007 Firebird/0.7",
|
37
|
+
"Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.5) Gecko/20031007 Firebird/0.7",
|
38
|
+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ko; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2",
|
39
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8",
|
40
|
+
"Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.7.9) Gecko/20050711 Firefox/1.0.5",
|
41
|
+
"Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5",
|
42
|
+
"Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.8.0.5) Gecko/20060819 Firefox/1.5.0.5",
|
43
|
+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 GTB5",
|
44
|
+
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.12) Gecko/20080214 Firefox/2.0.0.12",
|
45
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.0; es-ES; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3",
|
46
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.9) Gecko/20071113 BonEcho/2.0.0.9",
|
47
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061026 BonEcho/2.0",
|
48
|
+
"Mozilla/5.0 (BeOS; U; Haiku BePC; en-US; rv:1.8.1.21pre) Gecko/20090227 BonEcho/2.0.0.21pre",
|
49
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko/2009033017 GranParadiso/3.0.8",
|
50
|
+
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1b3pre) Gecko/20090109 Shiretoko/3.1b3pre",
|
51
|
+
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1b4pre) Gecko/20090311 Shiretoko/3.1b4pre",
|
52
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.1) Gecko/20060314 Flock/0.5.13.2",
|
53
|
+
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.2) Gecko/2008092122 Firefox/3.0.2 Flock/2.0b3",
|
54
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Fluid/0.9.4 Safari/525.13",
|
55
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12) Gecko/20050929 Galeon/1.3.21",
|
56
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko/20090327 Galeon/2.0.7",
|
57
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; GreenBrowser)",
|
58
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; GreenBrowser)",
|
59
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)",
|
60
|
+
"Mozilla/3.0 (x86 [cs] Windows NT 5.1; Sun)",
|
61
|
+
"Mozilla/5.1 (X11; U; Linux i686; en-US; rv:1.8.0.3) Gecko/20060425 SUSE/1.5.0.3-7 Hv3/alpha",
|
62
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SIMBAR={CFBFDAEA-F21E-4D6E-A9B0-E100A69B860F}; Hydra Browser; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30)",
|
63
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Hydra Browser; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)",
|
64
|
+
"Mozilla/5.0 (compatible; IBrowse 3.0; AmigaOS4.0)",
|
65
|
+
"Mozilla/4.5 (compatible; iCab 2.9.1; Macintosh; U; PPC)",
|
66
|
+
"iCab/3.0.2 (Macintosh; U; PPC Mac OS X)",
|
67
|
+
"iCab/4.0 (Macintosh; U; Intel Mac OS X)",
|
68
|
+
"Mozilla/5.0 (Java 1.6.0_01; Windows XP 5.1 x86; en) ICEbrowser/v6_1_2",
|
69
|
+
"ICE Browser/5.05 (Java 1.4.0; Windows 2000 5.0 x86)",
|
70
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.9) Gecko/20071030 Iceape/1.1.6 (Debian-1.1.6-3)",
|
71
|
+
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.8) Gecko/20071008 Iceape/1.1.5 (Ubuntu-1.1.5-1ubuntu0.7.10)",
|
72
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.11) Gecko/20071203 IceCat/2.0.0.11-g1",
|
73
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092921 IceCat/3.0.3-g1",
|
74
|
+
"Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.5) Gecko/2008122011 Iceweasel/3.0.5 (Debian-3.0.5-1)",
|
75
|
+
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.1) Gecko/20061205 Iceweasel/2.0.0.1 (Debian-2.0.0.1+dfsg-4)",
|
76
|
+
"Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.0.5) Gecko/2008122011 Iceweasel/3.0.5 (Debian-3.0.5-1)",
|
77
|
+
"Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
|
78
|
+
"Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1; .NET CLR 3.0.04506.30)",
|
79
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727)",
|
80
|
+
"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT;)",
|
81
|
+
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)",
|
82
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iRider 2.21.1108; FDM)",
|
83
|
+
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/528.7 (KHTML, like Gecko) Iron/1.0.155.0 Safari/528.7",
|
84
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Iron/0.2.152.0 Safari/12081672.525",
|
85
|
+
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/528.5 (KHTML, like Gecko) Iron/0.4.155.0 Safari/528.5",
|
86
|
+
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.8.1.19) Gecko/20081217 K-Meleon/1.5.2",
|
87
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060706 K-Meleon/1.0",
|
88
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060731 K-Ninja/2.0.2",
|
89
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
|
90
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
|
91
|
+
"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
|
92
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
|
93
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; KKman2.0)",
|
94
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; KKMAN3.2)",
|
95
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; KKman3.0)",
|
96
|
+
"Mozilla/5.0 (compatible; Konqueror/2.2.1; Linux)",
|
97
|
+
"Mozilla/5.0 (compatible; Konqueror/3.5; SunOS)",
|
98
|
+
"Mozilla/5.0 (compatible; Konqueror/4.1; OpenBSD) KHTML/4.1.4 (like Gecko)",
|
99
|
+
"Mozilla/5.0 (compatible; Konqueror/3.1-rc5; i686 Linux; 20020712)",
|
100
|
+
"Links (0.96; Linux 2.4.20-18.7 i586)",
|
101
|
+
"Links (0.98; Win32; 80x25)",
|
102
|
+
"Links (2.1pre18; Linux 2.4.31 i686; 100x37)",
|
103
|
+
"Links (2.1; Linux 2.6.18-gentoo-r6 x86_64; 80x24)",
|
104
|
+
"Links (2.2; Linux 2.6.25-gentoo-r9 sparc64; 166x52)",
|
105
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Linux 2.6.26-1-amd64) Lobo/0.98.3",
|
106
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows XP 5.1) Lobo/0.98.4",
|
107
|
+
"Mozilla/4.0 (compatible; Lotus-Notes/6.0; Windows-NT)",
|
108
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1b3pre) Gecko/2008 Lunascape/4.9.9.98",
|
109
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528+ (KHTML, like Gecko, Safari/528.0) Lunascape/5.0.2.0",
|
110
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; Lunascape 2.1.3)",
|
111
|
+
"Lynx/2.8.6rel.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.6.3",
|
112
|
+
"Lynx/2.8.3dev.6 libwww-FM/2.14",
|
113
|
+
"Lynx/2.8.5dev.16 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.7a",
|
114
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)",
|
115
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2)",
|
116
|
+
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; MAXTHON 2.0)",
|
117
|
+
"Midori/0.1.5 (X11; Linux; U; en-gb) WebKit/532+",
|
118
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020919",
|
119
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.0; it-IT; rv:1.7.12) Gecko/20050915",
|
120
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.2.1; MultiZilla v1.1.32 final) Gecko/20021130",
|
121
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4; MultiZilla v1.5.0.0f) Gecko/20030624",
|
122
|
+
"NCSA_Mosaic/2.0 (Windows 3.1)",
|
123
|
+
"NCSA_Mosaic/3.0 (Windows 95)",
|
124
|
+
"NCSA_Mosaic/2.6 (X11; SunOS 4.1.3 sun4m)",
|
125
|
+
"Mozilla/3.01 (compatible; Netbox/3.5 R92; Linux 2.2)",
|
126
|
+
"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; NetCaptor 6.5.0RC1)",
|
127
|
+
"Mozilla/4.04 [en] (X11; I; IRIX 5.3 IP22)",
|
128
|
+
"Mozilla/5.0 (Windows; U; Win 9x 4.90; de-DE; rv:0.9.2) Gecko/20010726 Netscape6/6.1",
|
129
|
+
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6",
|
130
|
+
"Mozilla/4.08 [en] (WinNT; U ;Nav)",
|
131
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02",
|
132
|
+
"Mozilla/3.0 (Win95; I)",
|
133
|
+
"Mozilla/4.51 [en] (Win98; U)",
|
134
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20060127 Netscape/8.1",
|
135
|
+
"NetSurf/2.0 (RISC OS; armv3l)",
|
136
|
+
"NetSurf/1.2 (Linux; i686)",
|
137
|
+
"Mozilla/4.7 (compatible; OffByOne; Windows 2000)",
|
138
|
+
"Mozilla/4.7 (compatible; OffByOne; Windows 98)",
|
139
|
+
"OmniWeb/2.7-beta-3 OWF/1.0",
|
140
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari) OmniWeb/v595",
|
141
|
+
"Mozilla/4.5 (compatible; OmniWeb/4.1.1-v424.6; Mac_PowerPC)",
|
142
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.10 [en]",
|
143
|
+
"Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.2.15 Version/10.00",
|
144
|
+
"Opera/5.11 (Windows 98; U) [en]",
|
145
|
+
"Opera/9.51 (Macintosh; Intel Mac OS X; U; en)",
|
146
|
+
"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 4.0) Opera 6.01 [en]",
|
147
|
+
"Opera/9.02 (Windows XP; U; ru)",
|
148
|
+
"Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 5.12 [en]",
|
149
|
+
"Opera/9.70 (Linux i686 ; U; en) Presto/2.2.1",
|
150
|
+
"Opera/7.03 (Windows NT 5.0; U) [en]",
|
151
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.24",
|
152
|
+
"Opera/6.0 (Windows 2000; U) [fr]",
|
153
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009030821 Firefox/3.0.7 Orca/1.1 build 2",
|
154
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009022300 Firefox/3.0.6 Orca/1.1 build 1",
|
155
|
+
"Mozilla/1.10 [en] (Compatible; RISC OS 3.70; Oregano 1.10)",
|
156
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; PhaseOut-www.phaseout.net)",
|
157
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4a) Gecko/20030411 Phoenix/0.5",
|
158
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2b) Gecko/20021029 Phoenix/0.4",
|
159
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/527+ (KHTML, like Gecko) QtWeb Internet Browser/2.5 http://www.QtWeb.net",
|
160
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/527+ (KHTML, like Gecko) QtWeb Internet Browser/1.2 http://www.QtWeb.net",
|
161
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/527+ (KHTML, like Gecko) QtWeb Internet Browser/1.7 http://www.QtWeb.net",
|
162
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_6; it-it) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16",
|
163
|
+
"Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/523.15 (KHTML, like Gecko) Version/3.0 Safari/523.15",
|
164
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.7",
|
165
|
+
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16",
|
166
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; fi-fi) AppleWebKit/420+ (KHTML, like Gecko) Safari/419.3",
|
167
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.8 (KHTML, like Gecko) Safari/312.6",
|
168
|
+
"Mozilla/5.0 (X11; U; Linux i686; rv:1.9.1a2pre) Gecko/20080824052448 SeaMonkey/2.0a1pre",
|
169
|
+
"Mozilla/5.0 (Windows; U; Win 9x 4.90; en-GB; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4",
|
170
|
+
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1b3pre) Gecko/20081208 SeaMonkey/2.0a3pre",
|
171
|
+
"Mozilla/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.9a1) Gecko/20060702 SeaMonkey/1.5a",
|
172
|
+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081202 SeaMonkey/2.0a2",
|
173
|
+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.13) Gecko/20080313 SeaMonkey/1.1.9",
|
174
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/419 (KHTML, like Gecko) Shiira/1.2.3 Safari/125",
|
175
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/417.9 (KHTML, like Gecko, Safari) Shiira/1.1",
|
176
|
+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; fr) AppleWebKit/418.9.1 (KHTML, like Gecko) Shiira Safari/125",
|
177
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Sleipnir/2.8.1",
|
178
|
+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727) Sleipnir/2.8.4",
|
179
|
+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Stainless/0.4 Safari/525.20.1",
|
180
|
+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/528.16 (KHTML, like Gecko) Stainless/0.5.3 Safari/525.20.1",
|
181
|
+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; en) AppleWebKit/525.18 (KHTML, like Gecko) Sunrise/1.7.4 like Safari/4525.22",
|
182
|
+
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/125.5.7 (KHTML, like Gecko) SunriseBrowser/0.853",
|
183
|
+
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10pre) Gecko/2009041814 Firefox/3.0.10pre (Swiftfox)",
|
184
|
+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322; TheWorld)"]
|
185
|
+
def self.fetch
|
186
|
+
@USER_AGENTS[rand(@USER_AGENTS.size)]
|
187
|
+
end
|
188
|
+
end
|
data/lib/esearchy.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#EXTERNAL REQUIRES
|
2
|
+
require 'rubygems'
|
3
|
+
require 'net/http'
|
4
|
+
require 'cgi'
|
5
|
+
require 'json'
|
6
|
+
require 'digest/sha2'
|
7
|
+
require 'zip/zip'
|
8
|
+
require 'zip/zipfilesystem'
|
9
|
+
require 'pdf/reader'
|
10
|
+
if RUBY_PLATFORM =~ /mingw|mswin/
|
11
|
+
require 'win32ole'
|
12
|
+
end
|
13
|
+
require 'ldap' # gem install ruby-ldap
|
14
|
+
|
15
|
+
#ESEARCHY REQUIRES
|
16
|
+
require 'esearchy/genericengine'
|
17
|
+
require 'esearchy/searchengines'
|
18
|
+
require 'esearchy/otherengines'
|
19
|
+
require 'esearchy/socialengines'
|
20
|
+
require 'esearchy/localengines'
|
21
|
+
require 'esearchy/bugmenot'
|
22
|
+
require 'esearchy/docs'
|
23
|
+
require 'esearchy/useragent'
|
24
|
+
require 'esearchy/esearchy'
|