webshooter 0.0.1a → 0.0.2a
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/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/bin/webshooter.rb +4 -4
- data/lib/webshooter/redirectfollower.rb +58 -0
- data/lib/webshooter/version.rb +1 -1
- data/lib/webshooter/webshotprocessor.rb +7 -5
- data/webshooter.gemspec +2 -1
- metadata +4 -3
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/bin/webshooter.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
|
4
|
-
require '
|
4
|
+
require 'webshooter'
|
5
5
|
|
6
|
-
module
|
6
|
+
module Webshooter
|
7
7
|
class CLI
|
8
8
|
#Ruby CLI tool - http://rubylearning.com/blog/2011/01/03/how-do-i-make-a-command-line-tool-in-ruby/
|
9
9
|
def self.execute(args)
|
10
10
|
url=args[0]
|
11
11
|
filename=args[1]
|
12
12
|
size=args[2]
|
13
|
-
webshotr=
|
13
|
+
webshotr=Webshooter.capture(url, filename, size )
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
Webshooter::CLI.execute(ARGV)
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# Inspired by http://railstips.org/blog/archives/2009/03/04/following-redirects-with-nethttp/
|
2
|
+
# But needs some of this - http://www.ruby-forum.com/topic/142745
|
3
|
+
|
4
|
+
require 'net/http'
|
5
|
+
require 'net/https'
|
6
|
+
|
7
|
+
module Webshooter
|
8
|
+
|
9
|
+
class RedirectFollower
|
10
|
+
class TooManyRedirects < StandardError; end
|
11
|
+
|
12
|
+
attr_accessor :url, :body, :redirect_limit, :response
|
13
|
+
|
14
|
+
def initialize(url, limit=5)
|
15
|
+
@url, @redirect_limit = url, limit
|
16
|
+
end
|
17
|
+
|
18
|
+
def resolve
|
19
|
+
raise TooManyRedirects if redirect_limit < 0
|
20
|
+
|
21
|
+
uri=URI.parse(url)
|
22
|
+
|
23
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
24
|
+
|
25
|
+
if uri.scheme == "https"
|
26
|
+
http.use_ssl = true
|
27
|
+
#http.verify_mode = OpenSSL::SSL::VERIFY_NONE # Not setting this explicitly will result in an error and the value being set anyway
|
28
|
+
end
|
29
|
+
|
30
|
+
if (uri.path=="")
|
31
|
+
request = Net::HTTP::Get.new("/")
|
32
|
+
else
|
33
|
+
request = Net::HTTP::Get.new(uri.path)
|
34
|
+
end
|
35
|
+
self.response = http.start {|http| http.request(request) }
|
36
|
+
|
37
|
+
if response.kind_of?(Net::HTTPRedirection)
|
38
|
+
self.url = redirect_url
|
39
|
+
self.redirect_limit -= 1
|
40
|
+
|
41
|
+
puts "redirect found, headed to #{url}"
|
42
|
+
resolve
|
43
|
+
end
|
44
|
+
return url
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
def redirect_url
|
49
|
+
if response['location'].nil?
|
50
|
+
response.body.match(/<a href=\"([^>]+)\">/i)[1]
|
51
|
+
else
|
52
|
+
response['location']
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
data/lib/webshooter/version.rb
CHANGED
@@ -3,6 +3,8 @@ require 'logger'
|
|
3
3
|
require 'uri'
|
4
4
|
|
5
5
|
require 'webshooter/newnsurlrequest'
|
6
|
+
require 'webshooter/redirectfollower'
|
7
|
+
|
6
8
|
OSX.require_framework 'WebKit'
|
7
9
|
|
8
10
|
#Respond to URL not found....
|
@@ -52,7 +54,6 @@ class WebShotProcessor
|
|
52
54
|
# Replace the window's content @webView with the web @webView
|
53
55
|
@window.setContentView(@webView)
|
54
56
|
@webView.release
|
55
|
-
puts "its not in the release"
|
56
57
|
end
|
57
58
|
|
58
59
|
def capture(uri, path, dimensions = "1024x768" )
|
@@ -61,14 +62,16 @@ class WebShotProcessor
|
|
61
62
|
# Tell the frame to load the URL we want
|
62
63
|
@webView.window.setContentSize(snapshot_dimension)
|
63
64
|
@webView.setFrameSize(snapshot_dimension)
|
65
|
+
|
66
|
+
final_link = RedirectFollower.new(uri).resolve
|
64
67
|
|
65
|
-
myURI = URI.parse(
|
68
|
+
myURI = URI.parse(final_link)
|
66
69
|
|
67
70
|
#Allow all https certificates
|
68
71
|
NewNSURLRequest.setAllowsAnyHTTPSCertificate_forHost(true,myURI.host)
|
69
72
|
|
70
73
|
#puts "Getting ready for the loadRequest"+uri
|
71
|
-
@webView.mainFrame.loadRequest(NewNSURLRequest.requestWithURL(OSX::NSURL.URLWithString(
|
74
|
+
@webView.mainFrame.loadRequest(NewNSURLRequest.requestWithURL(OSX::NSURL.URLWithString(final_link)))
|
72
75
|
|
73
76
|
#
|
74
77
|
# Run the main event loop until the frame loads
|
@@ -82,12 +85,11 @@ class WebShotProcessor
|
|
82
85
|
#OSX.CFRunLoopRun
|
83
86
|
#puts "first loop enters here"
|
84
87
|
|
85
|
-
puts "its not in the after upon success"
|
86
88
|
|
87
89
|
upon_success do |view| # Capture the content of the view as an image
|
88
90
|
|
89
91
|
view.window.orderFront(nil)
|
90
|
-
view.window.display
|
92
|
+
#view.window.display
|
91
93
|
|
92
94
|
#puts "-------------------------------------------------"
|
93
95
|
#puts "We got success"
|
data/webshooter.gemspec
CHANGED
@@ -9,12 +9,13 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = ["patrick.debois@jedi.be"]
|
10
10
|
s.homepage = "http://github.com/jedi4ever/webshooter/"
|
11
11
|
s.summary = %q{Create webshot using webkit on MacOSX}
|
12
|
-
s.description = %q{This library allows you to create webshots using webkit on MacOSX. A webshot is a screenshot
|
12
|
+
s.description = %q{This library allows you to create webshots using webkit on MacOSX. A webshot is a screenshot taken inside the browser. The advantage of this library is that it is headless and gives you the real view not a parsed view}
|
13
13
|
|
14
14
|
s.required_rubygems_version = ">= 1.3.6"
|
15
15
|
s.rubyforge_project = "webshooter"
|
16
16
|
|
17
17
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
18
|
+
#s.add_dependency "responsalizr", "~>1.0.2"
|
18
19
|
|
19
20
|
s.files = `git ls-files`.split("\n")
|
20
21
|
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2a
|
9
|
+
version: 0.0.2a
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Patrick Debois
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
name: bundler
|
32
32
|
prerelease: false
|
33
33
|
type: :development
|
34
|
-
description: This library allows you to create webshots using webkit on MacOSX. A webshot is a screenshot
|
34
|
+
description: This library allows you to create webshots using webkit on MacOSX. A webshot is a screenshot taken inside the browser. The advantage of this library is that it is headless and gives you the real view not a parsed view
|
35
35
|
email:
|
36
36
|
- patrick.debois@jedi.be
|
37
37
|
executables:
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- bin/webshooter.rb
|
50
50
|
- lib/webshooter.rb
|
51
51
|
- lib/webshooter/newnsurlrequest.rb
|
52
|
+
- lib/webshooter/redirectfollower.rb
|
52
53
|
- lib/webshooter/version.rb
|
53
54
|
- lib/webshooter/webshotprocessor.rb
|
54
55
|
- trials/darkroom.orig.rb
|