killsite 0.1.0 → 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 +12 -11
- data/VERSION +1 -1
- data/bin/killsite +2 -2
- data/killsite.gemspec +3 -4
- data/lib/killsite.rb +27 -25
- metadata +15 -16
- data/test/test_killsite.rb +0 -7
data/README.rdoc
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
= killsite
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
3
|
+
Recursively GET all the pages of a given site through hyperlinks.
|
4
|
+
The tool is for the usage of testing and profiling.
|
5
|
+
|
6
|
+
== Installation
|
7
|
+
|
8
|
+
Simply `gem install killsite`.
|
9
|
+
|
10
|
+
== Usage
|
11
|
+
|
12
|
+
killsite [website] [# of GET for each pages]
|
13
|
+
|
14
|
+
The second argument can be omitted.
|
14
15
|
|
15
16
|
== Copyright
|
16
17
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/bin/killsite
CHANGED
data/killsite.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{killsite}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Andrew Liu"]
|
12
|
-
s.date = %q{2011-07-
|
12
|
+
s.date = %q{2011-07-16}
|
13
13
|
s.default_executable = %q{killsite}
|
14
14
|
s.description = %q{Recursively GET the site by links, try to kill the site}
|
15
15
|
s.email = %q{andrewliu33@gmail.com}
|
@@ -29,8 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
"bin/killsite",
|
30
30
|
"killsite.gemspec",
|
31
31
|
"lib/killsite.rb",
|
32
|
-
"test/helper.rb"
|
33
|
-
"test/test_killsite.rb"
|
32
|
+
"test/helper.rb"
|
34
33
|
]
|
35
34
|
s.homepage = %q{http://github.com/eggegg/killsite}
|
36
35
|
s.licenses = ["MIT"]
|
data/lib/killsite.rb
CHANGED
@@ -2,46 +2,48 @@ require 'bundler'
|
|
2
2
|
require 'uri'
|
3
3
|
Bundler.require
|
4
4
|
|
5
|
-
class
|
5
|
+
class SiteKiller
|
6
6
|
def initialize(prefix, limit = 1, verbose = false)
|
7
7
|
@count = 1
|
8
|
-
@prefix = prefix
|
9
|
-
@visited =
|
10
|
-
@queue = [prefix]
|
8
|
+
@prefix = URI.parse(prefix)
|
9
|
+
@visited = { @prefix => 0 }
|
11
10
|
@verbose = verbose
|
12
11
|
@limit = limit
|
13
12
|
end
|
14
13
|
|
15
|
-
def run
|
16
|
-
|
17
|
-
return if @queue.empty?
|
18
|
-
|
19
|
-
url = @queue.shift
|
14
|
+
def run url = nil
|
15
|
+
url ||= @prefix
|
20
16
|
|
21
17
|
http = EventMachine::HttpRequest.new(url).get
|
22
18
|
http.callback do
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
19
|
+
if @visited[url] == 0
|
20
|
+
puts "Processing '#{url}'" if @verbose
|
21
|
+
Nokogiri::HTML.parse(http.response).xpath("//a[@href]").each do |link|
|
22
|
+
next_url = process_url link['href']
|
23
|
+
if next_url and !@visited.include?(next_url)
|
24
|
+
puts " Queueing '#{next_url}'" if @verbose
|
29
25
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
26
|
+
@visited[next_url] = 0
|
27
|
+
@count += @limit
|
28
|
+
@limit.times { run next_url }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
print " Progress " if @verbose
|
32
|
+
else
|
33
|
+
print '*' if @verbose
|
34
34
|
end
|
35
|
+
|
36
|
+
@visited[url] += 1
|
37
|
+
puts if @verbose and @visited[url] == @limit
|
35
38
|
@count -= 1
|
36
|
-
EM.
|
39
|
+
EM.stop if @count == 0
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
40
|
-
private
|
43
|
+
private
|
41
44
|
def process_url url
|
42
|
-
return nil if url =~ /^http/ and URI.parse(@prefix).host != URI.parse(url).host
|
43
|
-
return nil if url =~ /^javascript/
|
44
|
-
|
45
|
-
URI.join @prefix, url
|
45
|
+
return nil if url =~ /^http/ and URI.parse(@prefix.to_s).host != URI.parse(url).host
|
46
|
+
return nil if url =~ /^javascript/ or url =~ /^#/
|
47
|
+
URI.join @prefix.to_s, url
|
46
48
|
end
|
47
49
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: killsite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-07-
|
12
|
+
date: 2011-07-16 00:00:00.000000000 +08:00
|
13
13
|
default_executable: killsite
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: em-http-request
|
17
|
-
requirement: &
|
17
|
+
requirement: &2157593620 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2157593620
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: nokogiri
|
28
|
-
requirement: &
|
28
|
+
requirement: &2157593140 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2157593140
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: shoulda
|
39
|
-
requirement: &
|
39
|
+
requirement: &2157592660 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2157592660
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: bundler
|
50
|
-
requirement: &
|
50
|
+
requirement: &2157592180 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: 1.0.0
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2157592180
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: jeweler
|
61
|
-
requirement: &
|
61
|
+
requirement: &2157591700 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ~>
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: 1.6.4
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *2157591700
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rcov
|
72
|
-
requirement: &
|
72
|
+
requirement: &2157591220 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,7 +77,7 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *2157591220
|
81
81
|
description: Recursively GET the site by links, try to kill the site
|
82
82
|
email: andrewliu33@gmail.com
|
83
83
|
executables:
|
@@ -98,7 +98,6 @@ files:
|
|
98
98
|
- killsite.gemspec
|
99
99
|
- lib/killsite.rb
|
100
100
|
- test/helper.rb
|
101
|
-
- test/test_killsite.rb
|
102
101
|
has_rdoc: true
|
103
102
|
homepage: http://github.com/eggegg/killsite
|
104
103
|
licenses:
|
@@ -115,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
114
|
version: '0'
|
116
115
|
segments:
|
117
116
|
- 0
|
118
|
-
hash:
|
117
|
+
hash: -2909793090681244207
|
119
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
119
|
none: false
|
121
120
|
requirements:
|