esearchy 0.2.0.7 → 0.2.0.8
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/bin/esearchy +65 -43
- data/lib/esearchy.rb +2 -0
- data/lib/esearchy/SocialEngines/classmates.rb +4 -4
- data/lib/esearchy/SocialEngines/googleprofiles.rb +4 -4
- data/lib/esearchy/SocialEngines/jigsaw.rb +3 -3
- data/lib/esearchy/SocialEngines/linkedin.rb +3 -3
- data/lib/esearchy/SocialEngines/naymz.rb +4 -4
- data/lib/esearchy/SocialEngines/plaxo.rb +3 -3
- data/lib/esearchy/SocialEngines/spoke.rb +4 -4
- data/lib/esearchy/SocialEngines/ziggs.rb +3 -3
- data/lib/esearchy/esearchy.rb +1 -1
- data/lib/esearchy/genericengine.rb +1 -1
- data/lib/esearchy/profiling.rb +87 -0
- metadata +19 -4
data/bin/esearchy
CHANGED
@@ -31,11 +31,11 @@ require 'getoptlong'
|
|
31
31
|
require 'esearchy'
|
32
32
|
|
33
33
|
ESearchy::log = true
|
34
|
-
|
35
34
|
@yahoo_key = nil
|
36
35
|
@bing_key = nil
|
37
36
|
@maxhits = nil
|
38
37
|
@docs = true
|
38
|
+
@profiling = false
|
39
39
|
@params = {}
|
40
40
|
@list = []
|
41
41
|
@output = nil
|
@@ -64,6 +64,7 @@ opts = GetoptLong.new(
|
|
64
64
|
[ '--enable-pgp', GetoptLong::NO_ARGUMENT ],
|
65
65
|
[ '--enable-usenet', GetoptLong::NO_ARGUMENT ],
|
66
66
|
[ '--enable-spider', GetoptLong::NO_ARGUMENT ],
|
67
|
+
[ '--profiling', GetoptLong::NO_ARGUMENT ],
|
67
68
|
[ '--disable-google', GetoptLong::NO_ARGUMENT ],
|
68
69
|
[ '--disable-yahoo', GetoptLong::NO_ARGUMENT ],
|
69
70
|
[ '--disable-bing', GetoptLong::NO_ARGUMENT ],
|
@@ -148,7 +149,7 @@ def print_(list)
|
|
148
149
|
print_linux(item)
|
149
150
|
end
|
150
151
|
when Array
|
151
|
-
puts item
|
152
|
+
puts item.join " "
|
152
153
|
end
|
153
154
|
end
|
154
155
|
end
|
@@ -210,6 +211,10 @@ class Output
|
|
210
211
|
end
|
211
212
|
end
|
212
213
|
|
214
|
+
def save_html(data)
|
215
|
+
|
216
|
+
end
|
217
|
+
|
213
218
|
def save_sqlite(data)
|
214
219
|
require 'sqlite3'
|
215
220
|
@db = SQLite3::Database.new(@output)
|
@@ -257,10 +262,22 @@ def execute(p)
|
|
257
262
|
end
|
258
263
|
end
|
259
264
|
end
|
265
|
+
|
266
|
+
if @profiling
|
267
|
+
puts "Gathering Profile data from people"
|
268
|
+
puts "----------------------------------\n"
|
269
|
+
res = ESearchy::Profiling.new(search.people.uniq)
|
270
|
+
res.search
|
271
|
+
search.people.concat(res.people)
|
272
|
+
search.results.concat(res.results)
|
273
|
+
end
|
274
|
+
|
260
275
|
@output.save(search.results) if @output
|
261
|
-
puts "
|
276
|
+
puts "\n-------==< FINAL RESULTS >==--------"
|
262
277
|
print_ search.emails.uniq
|
263
|
-
|
278
|
+
search.people.uniq.each do |person, profile|
|
279
|
+
puts person.join(" ") + " -> " + profile
|
280
|
+
end
|
264
281
|
end
|
265
282
|
end
|
266
283
|
|
@@ -326,6 +343,8 @@ opts.each do |opt, arg|
|
|
326
343
|
puts "\t Enables PGP searches.\n"
|
327
344
|
puts "--enable-usenet"
|
328
345
|
puts "\t Enables Usenet searches.\n"
|
346
|
+
puts "--profiling"
|
347
|
+
puts "\t Enables People's profiling.\n"
|
329
348
|
puts "--disable-docs"
|
330
349
|
puts "\t Disables searches inside docs.\n"
|
331
350
|
puts "--disable-google"
|
@@ -358,11 +377,12 @@ opts.each do |opt, arg|
|
|
358
377
|
#END OF HELP
|
359
378
|
exit(0)
|
360
379
|
when '--enable-all' then
|
361
|
-
@people_engines = [:LinkedIn, :Naymz, :Classmates, :GoogleProfiles,
|
380
|
+
@people_engines = [:LinkedIn, :Naymz, :Classmates, :GoogleProfiles,
|
362
381
|
:Spoke, :JigSaw, :Ziggs, :Plaxo]
|
363
382
|
@email_engines = [:Google, :Bing, :Yahoo, :Altavista, :PGP, :Spider ,:Usenet, :GoogleGroups ]
|
364
383
|
when '--enable-people' then
|
365
|
-
@people_engines = [:LinkedIn, :Naymz, :Classmates, :GoogleProfiles,
|
384
|
+
@people_engines = [:LinkedIn, :Naymz, :Classmates, :GoogleProfiles,
|
385
|
+
:Spoke, :JigSaw, :Ziggs, :Plaxo]
|
366
386
|
when '--enable-emails' then
|
367
387
|
@email_engines = [:Google, :Bing, :Yahoo, :Altavista, :PGP, :Spider ,:Usenet, :GoogleGroups ]
|
368
388
|
when '--enable-google' then
|
@@ -398,43 +418,45 @@ opts.each do |opt, arg|
|
|
398
418
|
when '--enable-usenet' then
|
399
419
|
@email_engines << :Usenet
|
400
420
|
when '--disable-people' then
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
421
|
+
@people_engines = []
|
422
|
+
when '--disable-emails' then
|
423
|
+
@email_engines = []
|
424
|
+
when '--disable-google' then
|
425
|
+
@email_engines.delete(:Google)
|
426
|
+
when '--disable-yahoo' then
|
427
|
+
@email_engines.delete(:Yahoo)
|
428
|
+
when '--disable-bing' then
|
429
|
+
@email_engines.delete(:Bing)
|
430
|
+
when '--disable-altavisa' then
|
431
|
+
@email_engines.delete(:Altavista)
|
432
|
+
when '--disable-spider' then
|
433
|
+
@email_engines.delete(:Spider)
|
434
|
+
when '--disable-linkedin' then
|
435
|
+
@people_engines.delete(:LinkedIn)
|
436
|
+
when '--disable-gprofiles' then
|
437
|
+
@people_engines.delete(:GoogleProfiles)
|
438
|
+
when '--disable-naymz' then
|
439
|
+
@people_engines.delete(:Naymz)
|
440
|
+
when '--disable-classmates' then
|
441
|
+
@email_engines.delete(:Classmates)
|
442
|
+
when '--disable-ggroups' then
|
443
|
+
@email_engines.delete(:GoogleGroups)
|
444
|
+
when '--disable-spoke' then
|
445
|
+
@people_engines.delete(:Spoke)
|
446
|
+
when '--disable-jigsaw' then
|
447
|
+
@people_engines.delete(:JigSaw)
|
448
|
+
when '--disable-ziggs' then
|
449
|
+
@people_engines.delete(:Ziggs)
|
450
|
+
when '--disable-plaxo' then
|
451
|
+
@people_engines.delete(:Plaxo)
|
452
|
+
when '--disable-pgp' then
|
453
|
+
@email_engines.delete(:PGP)
|
454
|
+
when '--disable-usenet' then
|
455
|
+
@email_engines.delete(:Usenet)
|
456
|
+
when '--disable-docs' then
|
457
|
+
@docs = false
|
458
|
+
when '--profiling' then
|
459
|
+
@profiling = true
|
438
460
|
when '--query' then
|
439
461
|
@params[:query] = arg
|
440
462
|
when '--company' then
|
data/lib/esearchy.rb
CHANGED
@@ -5,6 +5,7 @@ require 'cgi'
|
|
5
5
|
require 'json'
|
6
6
|
require 'digest/sha2'
|
7
7
|
require 'zip/zip'
|
8
|
+
require 'uri'
|
8
9
|
require 'zip/zipfilesystem'
|
9
10
|
require 'pdf/reader'
|
10
11
|
if RUBY_PLATFORM =~ /mingw|mswin/
|
@@ -20,5 +21,6 @@ require 'esearchy/socialengines'
|
|
20
21
|
require 'esearchy/localengines'
|
21
22
|
require 'esearchy/bugmenot'
|
22
23
|
require 'esearchy/docs'
|
24
|
+
require 'esearchy/profiling'
|
23
25
|
require 'esearchy/useragent'
|
24
26
|
require 'esearchy/esearchy'
|
@@ -23,10 +23,10 @@ module ESearchy
|
|
23
23
|
|
24
24
|
def crawl_people(html)
|
25
25
|
html.scan(/<a href="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)" class=l[\sonmousedown="return clk(this.href,'','','res','\d','')"]*>([\w\s]*) \|/).each do |profile|
|
26
|
-
|
27
|
-
|
28
|
-
@people << [ p,
|
29
|
-
@results << [
|
26
|
+
pf = profile[0].to_s
|
27
|
+
p = profile[1].split(" ")
|
28
|
+
@people << [ p, pf ]
|
29
|
+
@results << [p, "P", pf, self.class.to_s.upcase, "N"]
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -26,10 +26,10 @@ module ESearchy
|
|
26
26
|
|
27
27
|
def crawl_people(text)
|
28
28
|
text.scan(/<a href="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)" class=l[\sonmousedown="return clk(this.href,'','','res','\d','')"]*>([\w\s]*) -/).each do |profile|
|
29
|
-
|
30
|
-
|
31
|
-
@people << [ p,
|
32
|
-
@results << [
|
29
|
+
pf = profile[0].to_s
|
30
|
+
p = profile[1].split(" ")
|
31
|
+
@people << [ p, pf ]
|
32
|
+
@results << [p, "P",profile, self.class.to_s.upcase, "N"]
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -26,10 +26,10 @@ module ESearchy
|
|
26
26
|
|
27
27
|
def crawl_people(text)
|
28
28
|
text.scan(/<a href="(http\:\/\/www.jigsaw.com\/scid[0-9A-Za-z\/?&=@+%.;'_-]+\.xhtml)" class=l[\sonmousedown="return clk(this.href,'','','res','\d','')"]*>([\w\s]*),/).each do |profile|
|
29
|
-
|
29
|
+
pf = profile[0].to_s
|
30
30
|
p = profile[1].split(" ")
|
31
|
-
@people << [ p,
|
32
|
-
@results << [p, "P",
|
31
|
+
@people << [ p, pf ]
|
32
|
+
@results << [p, "P", pf, self.class.to_s.upcase, "N"]
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -25,10 +25,10 @@ module ESearchy
|
|
25
25
|
|
26
26
|
def crawl_people(text)
|
27
27
|
text.scan(/<a href="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)" class=l[\sonmousedown="return clk(this.href,'','','res','\d','')"]*>([\w\s]*) -/).each do |profile|
|
28
|
-
|
28
|
+
pf = profile[0].to_s
|
29
29
|
p = profile[1].split(" ")
|
30
|
-
@people << [ p,
|
31
|
-
@results << [p, "P",
|
30
|
+
@people << [ p, pf ]
|
31
|
+
@results << [p, "P", pf, self.class.to_s.upcase, "N"]
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -24,12 +24,12 @@ module ESearchy
|
|
24
24
|
|
25
25
|
def crawl_people(html)
|
26
26
|
html.scan(/<a href="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)" class=l[\sonmousedown="return clk(this.href,'','','res','\d','')"]*>([\w\s]*) -/).each do |profile|
|
27
|
-
|
28
|
-
|
27
|
+
pf = profile[0].to_s
|
28
|
+
p = profile[1].split(" ").delete_if do
|
29
29
|
|x| x =~ /mr.|mr|ms.|ms|phd.|dr.|dr|phd|phd./i
|
30
30
|
end
|
31
|
-
@people << [ p,
|
32
|
-
@results << [
|
31
|
+
@people << [ p, pf ]
|
32
|
+
@results << [p, "P", pf, self.class.to_s.upcase, "N"]
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -26,10 +26,10 @@ module ESearchy
|
|
26
26
|
|
27
27
|
def crawl_people(text)
|
28
28
|
text.scan(/<a href="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)" class=l[\sonmousedown="return clk(this.href,'','','res','\d','')"]*>([\w\s]*)'/).each do |profile|
|
29
|
-
|
29
|
+
pf = profile[0].to_s
|
30
30
|
p = profile[1].split(" ")
|
31
|
-
@people << [ p,
|
32
|
-
@results << [p, "P",
|
31
|
+
@people << [ p, pf ]
|
32
|
+
@results << [p, "P", pf, self.class.to_s.upcase, "N"]
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -22,13 +22,13 @@ module ESearchy
|
|
22
22
|
@totalhits = totalhits(hits[0][0].gsub(",","").to_i)
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def crawl_people(text)
|
27
27
|
text.scan(/<a href="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)" class=l[\sonmousedown="return clk(this.href,'','','res','\d','')"]*>([\w\s]*),/).each do |profile|
|
28
|
-
|
28
|
+
pf = profile[0].to_s
|
29
29
|
p = profile[1].split(" ")
|
30
|
-
@people << [ p,
|
31
|
-
@results << [p, "P",
|
30
|
+
@people << [ p, pf ]
|
31
|
+
@results << [p, "P", pf, self.class.to_s.upcase, "N"]
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -26,10 +26,10 @@ module ESearchy
|
|
26
26
|
|
27
27
|
def crawl_people(text)
|
28
28
|
text.scan(/<a href="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)" class=l[\sonmousedown="return clk(this.href,'','','res','\d','')"]*>([\w\s]*) -/).each do |profile|
|
29
|
-
|
29
|
+
pf = profile[0].to_s
|
30
30
|
p = profile[1].split(" ")
|
31
|
-
@people << [ p,
|
32
|
-
@results << [p, "P",
|
31
|
+
@people << [ p, pf ]
|
32
|
+
@results << [p, "P", pf, self.class.to_s.upcase, "N"]
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
data/lib/esearchy/esearchy.rb
CHANGED
@@ -0,0 +1,87 @@
|
|
1
|
+
module ESearchy
|
2
|
+
class Profiling
|
3
|
+
def initialize(people)
|
4
|
+
@peo = people.clone
|
5
|
+
@people = []
|
6
|
+
@results = []
|
7
|
+
end
|
8
|
+
attr_accessor :people, :results
|
9
|
+
|
10
|
+
def search
|
11
|
+
@peo.each { |person, profile| crawl(person, profile) }
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def get_profile(uri_str, limit = 10)
|
16
|
+
begin
|
17
|
+
# You should choose better exception.
|
18
|
+
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
|
19
|
+
response = Net::HTTP.get_response(URI.parse(uri_str))
|
20
|
+
case response
|
21
|
+
when Net::HTTPSuccess then response.body
|
22
|
+
when Net::HTTPRedirection then get_profile(response['location'], limit - 1)
|
23
|
+
else
|
24
|
+
response.error!
|
25
|
+
end
|
26
|
+
rescue
|
27
|
+
return nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def crawl(person, profile)
|
32
|
+
text = get_profile(profile)
|
33
|
+
if text
|
34
|
+
case profile
|
35
|
+
when /spoke.com/ then
|
36
|
+
D "Crawling #{person.join(" ")}'s profile for co-workers:"
|
37
|
+
cw = text.scan(/<a class="personLinkTag" href="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)">([\w\s]*)<\/a>/)
|
38
|
+
add_persons(cw, person, "http://www.spoke.com")
|
39
|
+
when /classmate.com/ then
|
40
|
+
return nil
|
41
|
+
when /google.com/ then
|
42
|
+
D "Crawling #{person.join(" ")}'s Google profile for other Social Networks"
|
43
|
+
text.scan(/<div class="link"><a class="url" href="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)" rel="me">([\w\s]*)<\/a>/).each do |prof|
|
44
|
+
url = prof[0]
|
45
|
+
network = prof[1]
|
46
|
+
D "\t-#{network.strip} : #{url.strip}"
|
47
|
+
end
|
48
|
+
when /jigsaw.com/ then
|
49
|
+
D "Crawling #{person.join(" ")}'s JigSaw profile for co-workers:"
|
50
|
+
cw = text.scan(/<li><p style="margin-top: 15px"><a href='([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)'>([\w\s]*)<\/a>/)
|
51
|
+
add_persons(cw, person, "http://www.jigsaw.com")
|
52
|
+
when /linkedin.com/ then
|
53
|
+
return nil
|
54
|
+
when /naymz.com/ then
|
55
|
+
D "Crawling #{person.join(" ")}'s Google profile for other Social Networks"
|
56
|
+
text.scan(/<a href="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)" rel="external">[\n\s]*([\w\s]*)\n/).each do |prof|
|
57
|
+
url = prof[0]
|
58
|
+
network = prof[1]
|
59
|
+
D "\t-#{network.strip} : #{url.strip} "
|
60
|
+
end
|
61
|
+
when /plaxo.com/ then
|
62
|
+
D "Crawling #{person.join(" ")}'s Plaxo profile for other Social Networks:"
|
63
|
+
text.scan(/rel="me nofollow" title="([0-9A-Za-z:\\\/?&=@+%.;"'()_-]+)">([\w\s]*)<\/a><\/div><\/td>/).each do |prof|
|
64
|
+
url = prof[0]
|
65
|
+
network = url.scan(/:\/\/(.*)\./)[0][0]
|
66
|
+
username = prof[1]
|
67
|
+
D "\t-#{network} : #{username} : #{url} "
|
68
|
+
end
|
69
|
+
when /ziggs.com/ then
|
70
|
+
return nil
|
71
|
+
end
|
72
|
+
else
|
73
|
+
D "Something went wrong Crawling #{person.join(" ")}'s Profile\n"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def add_persons(cowork, per, url)
|
78
|
+
cowork.uniq.each do |profile|
|
79
|
+
pf = url + profile[0].to_s
|
80
|
+
p = profile[1].split(" ")
|
81
|
+
D "\t-#{p.join(" ")} -> #{pf}"
|
82
|
+
@people << [ p, pf ]
|
83
|
+
@results << [p, "P", pf, per.to_s.upcase, "N"]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: esearchy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 79
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 2
|
8
9
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.2.0.
|
10
|
+
- 8
|
11
|
+
version: 0.2.0.8
|
11
12
|
platform: ruby
|
12
13
|
authors:
|
13
14
|
- Matias P. Brutti
|
@@ -15,16 +16,18 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2010-
|
19
|
+
date: 2010-05-17 00:00:00 -07:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
22
23
|
name: pdf-reader
|
23
24
|
prerelease: false
|
24
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
25
27
|
requirements:
|
26
28
|
- - ">="
|
27
29
|
- !ruby/object:Gem::Version
|
30
|
+
hash: 9
|
28
31
|
segments:
|
29
32
|
- 0
|
30
33
|
- 7
|
@@ -36,9 +39,11 @@ dependencies:
|
|
36
39
|
name: json
|
37
40
|
prerelease: false
|
38
41
|
requirement: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
39
43
|
requirements:
|
40
44
|
- - ">="
|
41
45
|
- !ruby/object:Gem::Version
|
46
|
+
hash: 1
|
42
47
|
segments:
|
43
48
|
- 1
|
44
49
|
- 1
|
@@ -50,9 +55,11 @@ dependencies:
|
|
50
55
|
name: FreedomCoder-rubyzip
|
51
56
|
prerelease: false
|
52
57
|
requirement: &id003 !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
53
59
|
requirements:
|
54
60
|
- - ">="
|
55
61
|
- !ruby/object:Gem::Version
|
62
|
+
hash: 61
|
56
63
|
segments:
|
57
64
|
- 0
|
58
65
|
- 9
|
@@ -64,9 +71,11 @@ dependencies:
|
|
64
71
|
name: spidr
|
65
72
|
prerelease: false
|
66
73
|
requirement: &id004 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
67
75
|
requirements:
|
68
76
|
- - ">="
|
69
77
|
- !ruby/object:Gem::Version
|
78
|
+
hash: 21
|
70
79
|
segments:
|
71
80
|
- 0
|
72
81
|
- 2
|
@@ -95,6 +104,7 @@ files:
|
|
95
104
|
- lib/esearchy/OtherEngines/spider.rb
|
96
105
|
- lib/esearchy/OtherEngines/usenet.rb
|
97
106
|
- lib/esearchy/otherengines.rb
|
107
|
+
- lib/esearchy/profiling.rb
|
98
108
|
- lib/esearchy/SearchEngines/altavista.rb
|
99
109
|
- lib/esearchy/SearchEngines/bing.rb
|
100
110
|
- lib/esearchy/SearchEngines/google.rb
|
@@ -112,6 +122,7 @@ files:
|
|
112
122
|
- lib/esearchy/useragent.rb
|
113
123
|
- lib/esearchy.rb
|
114
124
|
- README.rdoc
|
125
|
+
- bin/esearchy
|
115
126
|
has_rdoc: true
|
116
127
|
homepage: http://freedomcoder.com.ar/esearchy
|
117
128
|
licenses: []
|
@@ -122,23 +133,27 @@ rdoc_options: []
|
|
122
133
|
require_paths:
|
123
134
|
- lib
|
124
135
|
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
125
137
|
requirements:
|
126
138
|
- - ">="
|
127
139
|
- !ruby/object:Gem::Version
|
140
|
+
hash: 3
|
128
141
|
segments:
|
129
142
|
- 0
|
130
143
|
version: "0"
|
131
144
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
132
146
|
requirements:
|
133
147
|
- - ">="
|
134
148
|
- !ruby/object:Gem::Version
|
149
|
+
hash: 3
|
135
150
|
segments:
|
136
151
|
- 0
|
137
152
|
version: "0"
|
138
153
|
requirements: []
|
139
154
|
|
140
155
|
rubyforge_project:
|
141
|
-
rubygems_version: 1.3.
|
156
|
+
rubygems_version: 1.3.7
|
142
157
|
signing_key:
|
143
158
|
specification_version: 3
|
144
159
|
summary: A library to search for emails in search engines
|