grabzit 1.1.1 → 2.0.1

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/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ end
6
+
7
+ desc "Run tests"
8
+ task :default => :test
data/lib/grabzit.rb ADDED
@@ -0,0 +1,3 @@
1
+ Dir[File.join(File.dirname(__FILE__), "grabzit", "*rb")].each do |file|
2
+ require file
3
+ end
@@ -0,0 +1,443 @@
1
+ # The public REST API for http://grabz.it
2
+ # @example To include the GrabzIt module do the following
3
+ # require 'grabzit'
4
+ module GrabzIt
5
+ require 'digest/md5'
6
+ require 'net/http'
7
+ require 'rexml/document'
8
+ require 'cgi'
9
+ require 'uri'
10
+ require File.join(File.dirname(__FILE__), 'screenshotstatus')
11
+ require File.join(File.dirname(__FILE__), 'cookie')
12
+ require File.join(File.dirname(__FILE__), 'watermark')
13
+
14
+ # This client provides access to the GrabzIt web services
15
+ # This API allows you to take screenshot of websites for free and convert them into images, PDF's and tables.
16
+ # @example Example usage
17
+ # require 'grabzit'
18
+ #
19
+ # grabzItClient = GrabzIt::Client.new("YOUR APPLICATION KEY", "YOUR APPLICATION SECRET")
20
+ # grabzItClient.set_image_options("http://www.google.com")
21
+ # grabzItClient.save("http://www.mysite.com/grabzit/handler")
22
+ # @version 2.0
23
+ # @author GrabzIt
24
+ # @see http://grabz.it/api/ruby/ GrabzIt Ruby API
25
+ class Client
26
+
27
+ WebServicesBaseURL = "http://grabz.it/services/"
28
+ private_constant :WebServicesBaseURL
29
+ TrueString = "True"
30
+ private_constant :TrueString
31
+
32
+ @@signaturePartOne;
33
+ @@signaturePartTwo;
34
+ @@request;
35
+
36
+ # Create a new instance of the Client class in order to access the GrabzIt API.
37
+ # @param applicationKey [String] your application key
38
+ # @param applicationSecret [String] your application secret
39
+ # @see http://grabz.it/register.aspx You can get an application key and secret by registering for free with GrabzIt
40
+ def initialize(applicationKey, applicationSecret)
41
+ @applicationKey = applicationKey
42
+ @applicationSecret = applicationSecret
43
+ end
44
+
45
+ # Sets the parameters required to take a screenshot of a web page.
46
+ # @param url [String] the URL that the screenshot should be made of
47
+ # @param customId [String, nil] custom identifier that you can pass through to the screenshot webservice. This will be returned with the callback URL you have specified.
48
+ # @param browserWidth [Integer, nil] the width of the browser in pixels
49
+ # @param browserHeight [Integer, nil] the height of the browser in pixels
50
+ # @param width [Integer, nil] the width of the resulting thumbnail in pixels
51
+ # @param height [Integer, nil] the height of the resulting thumbnail in pixels
52
+ # @param format [String, nil] the format the screenshot should be in: bmp8, bmp16, bmp24, bmp, gif, jpg, png
53
+ # @param delay [Integer, nil] the number of milliseconds to wait before taking the screenshot
54
+ # @param targetElement [String, nil] the id of the only HTML element in the web page to turn into a screenshot
55
+ # @param requestMobileVersion [Boolean, false] request a mobile version of the target website if possible
56
+ # @param customWaterMarkId [String, nil] add a custom watermark to the image
57
+ # @return [void]
58
+ def set_image_options(url, customId = nil, browserWidth = nil, browserHeight = nil, width = nil, height = nil, format = nil, delay = nil, targetElement = nil, requestMobileVersion = false, customWaterMarkId = nil)
59
+ @@request = WebServicesBaseURL + "takepicture.ashx?key="+CGI.escape(nil_check(@applicationKey))+"&url="+CGI.escape(nil_check(url))+"&width="+nil_int_check(width)+"&height="+nil_int_check(height)+"&format="+CGI.escape(nil_check(format))+"&bwidth="+nil_int_check(browserWidth)+"&bheight="+nil_int_check(browserHeight)+"&customid="+CGI.escape(nil_check(customId))+"&delay="+nil_int_check(delay)+"&target="+CGI.escape(nil_check(targetElement))+"&customwatermarkid="+CGI.escape(nil_check(customWaterMarkId))+"&requestmobileversion="+b_to_str(requestMobileVersion)+"&callback="
60
+ @@signaturePartOne = nil_check(@applicationSecret)+"|"+nil_check(url)+"|"
61
+ @@signaturePartTwo = "|"+nil_check(format)+"|"+nil_int_check(height)+"|"+nil_int_check(width)+"|"+nil_int_check(browserHeight)+"|"+nil_int_check(browserWidth)+"|"+nil_check(customId)+"|"+nil_int_check(delay)+"|"+nil_check(targetElement)+"|"+nil_check(customWaterMarkId)+"|"+b_to_str(requestMobileVersion)
62
+
63
+ return nil
64
+ end
65
+
66
+ # Sets the parameters required to extract one or more tables from a web page.
67
+ # @param url [String] the URL that the should be used to extract tables
68
+ # @param customId [String, nil] a custom identifier that you can pass through to the webservice. This will be returned with the callback URL you have specified.
69
+ # @param tableNumberToInclude [Integer, 1] the index of the table to be converted, were all tables in a web page are ordered from the top of the web page to bottom
70
+ # @param format [String, 'csv'] the format the table should be in: csv, xlsx
71
+ # @param includeHeaderNames [Boolean, true] if true header names will be included in the table
72
+ # @param includeAllTables [Boolean, true] if true all table on the web page will be extracted with each table appearing in a seperate spreadsheet sheet. Only available with the XLSX format.
73
+ # @param targetElement [String, nil] the id of the only HTML element in the web page that should be used to extract tables from
74
+ # @param requestMobileVersion [Boolean, false] request a mobile version of the target website if possible
75
+ # @return [void]
76
+ def set_table_options(url, customId = nil, tableNumberToInclude = 1, format = 'csv', includeHeaderNames = true, includeAllTables = false, targetElement = nil, requestMobileVersion = false)
77
+ @@request = WebServicesBaseURL + "taketable.ashx?key=" + CGI.escape(nil_check(@applicationKey))+"&url="+CGI.escape(url)+"&includeAllTables="+b_to_str(includeAllTables)+"&includeHeaderNames="+b_to_str(includeHeaderNames)+"&format="+CGI.escape(nil_check(format))+"&tableToInclude="+nil_int_check(tableNumberToInclude)+"&customid="+CGI.escape(nil_check(customId))+"&target="+CGI.escape(nil_check(targetElement))+"&requestmobileversion="+b_to_str(requestMobileVersion)+"&callback="
78
+ @@signaturePartOne = nil_check(@applicationSecret)+"|"+nil_check(url)+"|"
79
+ @@signaturePartTwo = "|"+nil_check(customId)+"|"+nil_int_check(tableNumberToInclude)+"|"+b_to_str(includeAllTables)+"|"+b_to_str(includeHeaderNames)+"|"+nil_check(targetElement)+"|"+nil_check(format)+"|"+b_to_str(requestMobileVersion)
80
+
81
+ return nil
82
+ end
83
+
84
+ # Sets the parameters required to convert a web page into a PDF.
85
+ # @param url url [String] the URL that the should be converted into a pdf
86
+ # @param customId [String, nil] a custom identifier that you can pass through to the webservice. This will be returned with the callback URL you have specified.
87
+ # @param includeBackground [Boolean, true] if true the background of the web page should be included in the screenshot
88
+ # @param pagesize [String, 'A4'] the page size of the PDF to be returned: 'A3', 'A4', 'A5', 'B3', 'B4', 'B5'.
89
+ # @param orientation [String, 'Portrait'] the orientation of the PDF to be returned: 'Landscape' or 'Portrait'
90
+ # @param includeLinks [Boolean, true] true if links should be included in the PDF
91
+ # @param includeOutline [Boolean, false] True if the PDF outline should be included
92
+ # @param title [String, nil] provide a title to the PDF document
93
+ # @param coverURL [String, nil] the URL of a web page that should be used as a cover page for the PDF
94
+ # @param marginTop [Integer, 10] the margin that should appear at the top of the PDF document page
95
+ # @param marginLeft [Integer, 10] the margin that should appear at the left of the PDF document page
96
+ # @param marginBottom [Integer, 10] the margin that should appear at the bottom of the PDF document page
97
+ # @param marginRight [Integer, 10] the margin that should appear at the right of the PDF document
98
+ # @param delay [Integer, nil] the number of milliseconds to wait before taking the screenshot
99
+ # @param requestMobileVersion [Boolean, false] request a mobile version of the target website if possible
100
+ # @param customWaterMarkId [String, nil] add a custom watermark to each page of the PDF document
101
+ # @return [void]
102
+ def set_pdf_options(url, customId = nil, includeBackground = true, pagesize = 'A4', orientation = 'Portrait', includeLinks = true, includeOutline = false, title = nil, coverURL = nil, marginTop = 10, marginLeft = 10, marginBottom = 10, marginRight = 10, delay = nil, requestMobileVersion = false, customWaterMarkId = nil)
103
+ pagesize = nil_check(pagesize).upcase
104
+ $orientation = nil_check(orientation).capitalize
105
+
106
+ @@request = WebServicesBaseURL + "takepdf.ashx?key=" + CGI.escape(nil_check(@applicationKey))+"&url="+CGI.escape(nil_check(url))+"&background="+b_to_str(includeBackground)+"&pagesize="+pagesize+"&orientation="+orientation+"&customid="+CGI.escape(nil_check(customId))+"&customwatermarkid="+CGI.escape(nil_check(customWaterMarkId))+"&includelinks="+b_to_str(includeLinks)+"&includeoutline="+b_to_str(includeOutline)+"&title="+CGI.escape(nil_check(title))+"&coverurl="+CGI.escape(nil_check(coverURL))+"&mleft="+nil_int_check(marginLeft)+"&mright="+nil_int_check(marginRight)+"&mtop="+nil_int_check(marginTop)+"&mbottom="+nil_int_check(marginBottom)+"&delay="+nil_int_check(delay)+"&requestmobileversion="+b_to_str(requestMobileVersion)+"&callback="
107
+
108
+ @@signaturePartOne = nil_check(@applicationSecret)+"|"+nil_check(url)+"|"
109
+ @@signaturePartTwo = "|"+nil_check(customId)+"|"+b_to_str(includeBackground)+"|"+pagesize +"|"+orientation+"|"+nil_check(customWaterMarkId)+"|"+b_to_str(includeLinks)+"|"+b_to_str(includeOutline)+"|"+nil_check(title)+"|"+nil_check(coverURL)+"|"+nil_int_check(marginTop)+"|"+nil_int_check(marginLeft)+"|"+nil_int_check(marginBottom)+"|"+nil_int_check(marginRight)+"|"+nil_int_check(delay)+"|"+b_to_str(requestMobileVersion)
110
+
111
+ return nil
112
+ end
113
+
114
+ # Calls the GrabzIt web service to take the screenshot
115
+ #
116
+ # The handler will be passed a URL with the following query string parameters:
117
+ # - message (is any error message associated with the screenshot)
118
+ # - customId (is a custom id you may have specified in the {#set_image_options}, {#set_table_options} or {#set_pdf_options} method)
119
+ # - id (is the unique id of the screenshot which can be used to retrieve the screenshot with the {#get_result} method)
120
+ # - filename (is the filename of the screenshot)
121
+ # - format (is the format of the screenshot)
122
+ # @note This is the recommended method of saving a screenshot
123
+ # @param callBackURL [String, nil] the handler the GrabzIt web service should call after it has completed its work
124
+ # @return [String] the unique identifier of the screenshot. This can be used to get the screenshot with the {#get_result} method
125
+ # @raise [RuntimeError] if the GrabzIt service reports an error with the request it will be raised as a RuntimeError
126
+ def save(callBackURL = nil)
127
+ if @@signaturePartOne == nil && @@signaturePartTwo == nil && @@request == nil
128
+ raise "No screenshot parameters have been set."
129
+ end
130
+
131
+ sig = Digest::MD5.hexdigest(@@signaturePartOne+nil_check(callBackURL)+@@signaturePartTwo)
132
+ @@request += CGI.escape(nil_check(callBackURL))+"&sig="+sig
133
+
134
+ return get_result_value(get(@@request), "ID")
135
+ end
136
+
137
+ # Calls the GrabzIt web service to take the screenshot and saves it to the target path provided
138
+ # @note Warning, this is a SYNCHONOUS method and can take up to 5 minutes before a response
139
+ # @param saveToFile [String] the file path that the screenshot should saved to.
140
+ # @example Synchronously save the screenshot to test.jpg
141
+ # save_to('images/test.jpg')
142
+ # @raise [RuntimeError] if the screenshot cannot be saved a RuntimeError will be raised that will contain an explanation
143
+ # @return [Boolean] returns the true if it is successful otherwise it throws an exception.
144
+ def save_to(saveToFile)
145
+ id = save()
146
+
147
+ #Wait for it to be ready.
148
+ while true do
149
+ status = get_status(id)
150
+
151
+ if !status.cached && !status.processing
152
+ raise "The screenshot did not complete with the error: " + status.Message
153
+ break;
154
+ elsif status.cached
155
+ result = get_result(id)
156
+ if !result
157
+ raise "The screenshot image could not be found on GrabzIt."
158
+ break
159
+ end
160
+
161
+ screenshot = File.new(saveToFile, "wb")
162
+ screenshot.write(result)
163
+ screenshot.close
164
+
165
+ break
166
+ end
167
+
168
+ sleep(1)
169
+ end
170
+
171
+ return true
172
+ end
173
+
174
+
175
+ # Get the current status of a GrabzIt screenshot
176
+ # @param id [String] the id of the screenshot
177
+ # @return [ScreenShotStatus] a object representing the status of the screenshot
178
+ def get_status(id)
179
+ result = get(WebServicesBaseURL + "getstatus.ashx?id=" + nil_check(id))
180
+
181
+ doc = REXML::Document.new(result)
182
+
183
+ processing = doc.root.elements["Processing"].text()
184
+ cached = doc.root.elements["Cached"].text()
185
+ expired = doc.root.elements["Expired"].text()
186
+ message = doc.root.elements["Message"].text()
187
+
188
+ return ScreenShotStatus.new((processing == TrueString), (cached == TrueString), (expired == TrueString), message)
189
+ end
190
+
191
+ # This method returns the screenshot itself. If nothing is returned then something has gone wrong or the screenshot is not ready yet
192
+ # @param id [String] the id of the screenshot
193
+ # @return [Object] returns the screenshot
194
+ # @raise [RuntimeError] if the GrabzIt service reports an error with the request it will be raised as a RuntimeError
195
+ def get_result(id)
196
+ return get(WebServicesBaseURL + "getfile.ashx?id=" + nil_check(id))
197
+ end
198
+
199
+ # Get all the cookies that GrabzIt is using for a particular domain. This may include your user set cookies as well
200
+ # @param domain [String] the domain to return cookies for
201
+ # @return [Array<Cookie>] an array of cookies
202
+ # @raise [RuntimeError] if the GrabzIt service reports an error with the request it will be raised as a RuntimeError
203
+ def get_cookies(domain)
204
+ sig = Digest::MD5.hexdigest(nil_check(@applicationSecret)+"|"+nil_check(domain))
205
+
206
+ qs = "key=" +CGI.escape(nil_check(@applicationKey))+"&domain="+CGI.escape(nil_check(domain))+"&sig="+sig
207
+
208
+ result = get(WebServicesBaseURL + "getcookies.ashx?" + qs)
209
+
210
+ doc = REXML::Document.new(result)
211
+
212
+ message = doc.root.elements["Message"].text()
213
+
214
+ if message != nil
215
+ raise message
216
+ end
217
+
218
+ cookies = Array.new
219
+
220
+ xml_cookies = doc.elements.to_a("//WebResult/Cookies/Cookie")
221
+ xml_cookies.each do |cookie|
222
+ expires = nil
223
+ if cookie.elements["Expires"] != nil
224
+ expires = cookie.elements["Expires"].text
225
+ end
226
+ grabzItCookie = GrabzIt::Cookie.new(cookie.elements["Name"].text, cookie.elements["Domain"].text, cookie.elements["Value"].text, cookie.elements["Path"].text, (cookie.elements["HttpOnly"].text == TrueString), expires, cookie.elements["Type"].text)
227
+ cookies << grabzItCookie
228
+ end
229
+
230
+ return cookies
231
+ end
232
+
233
+ # Sets a new custom cookie on GrabzIt, if the custom cookie has the same name and domain as a global cookie the global
234
+ # cookie is overridden
235
+ # @note This can be useful if a websites functionality is controlled by cookies
236
+ # @param name [String] the name of the cookie to set
237
+ # @param domain [String] the domain of the website to set the cookie for
238
+ # @param value [String, ''] the value of the cookie
239
+ # @param path [String, '/'] the website path the cookie relates to
240
+ # @param httponly [Boolean, false] is the cookie only used on HTTP
241
+ # @param expires [String, ''] when the cookie expires. Pass a nil value if it does not expire
242
+ # @return [Boolean] returns true if the cookie was successfully set
243
+ # @raise [RuntimeError] if the GrabzIt service reports an error with the request it will be raised as a RuntimeError
244
+ def set_cookie(name, domain, value = "", path = "/", httponly = false, expires = "")
245
+ sig = Digest::MD5.hexdigest(nil_check(@applicationSecret)+"|"+nil_check(name)+"|"+nil_check(domain)+"|"+nil_check(value)+"|"+nil_check(path)+"|"+b_to_str(httponly)+"|"+nil_check(expires)+"|0")
246
+
247
+ qs = "key=" +CGI.escape(nil_check(@applicationKey))+"&domain="+CGI.escape(nil_check(domain))+"&name="+CGI.escape(nil_check(name))+"&value="+CGI.escape(nil_check(value))+"&path="+CGI.escape(nil_check(path))+"&httponly="+b_to_str(httponly)+"&expires="+nil_check(expires)+"&sig="+sig
248
+
249
+ return (get_result_value(get(WebServicesBaseURL + "setcookie.ashx?" + qs), "Result") == TrueString)
250
+ end
251
+
252
+ # Delete a custom cookie or block a global cookie from being used
253
+ # @param name [String] the name of the cookie to delete
254
+ # @param domain [String] the website the cookie belongs to
255
+ # @return [Boolean] returns true if the cookie was successfully set
256
+ # @raise [RuntimeError] if the GrabzIt service reports an error with the request it will be raised as a RuntimeError
257
+ def delete_cookie(name, domain)
258
+ sig = Digest::MD5.hexdigest(nil_check(@applicationSecret)+"|"+nil_check(name)+"|"+nil_check(domain)+"|1")
259
+
260
+ qs = "key=" + CGI.escape(nil_check(@applicationKey))+"&domain="+CGI.escape(nil_check(domain))+"&name="+CGI.escape(nil_check(name))+"&delete=1&sig="+sig
261
+
262
+ return (get_result_value(get(WebServicesBaseURL + "setcookie.ashx?" + qs), "Result") == TrueString)
263
+ end
264
+
265
+ # Get your uploaded custom watermarks
266
+ # @param identifier [String, nil] the identifier of a particular custom watermark you want to view
267
+ # @return [Array<WaterMark>] an array of uploaded watermarks
268
+ def get_watermarks(identifier = nil)
269
+ sig = Digest::MD5.hexdigest(nil_check(@applicationSecret)+"|"+nil_check(identifier))
270
+
271
+ qs = "key=" +CGI.escape(nil_check(@applicationKey))+"&identifier="+CGI.escape(nil_check(identifier))+"&sig="+sig
272
+
273
+ result = get(WebServicesBaseURL + "getwatermarks.ashx?" + qs)
274
+
275
+ doc = REXML::Document.new(result)
276
+
277
+ watermarks = Array.new
278
+
279
+ xml_watemarks = doc.elements.to_a("//WebResult/WaterMarks/WaterMark")
280
+ xml_watemarks.each do |watemark|
281
+ grabzItWaterMark = GrabzIt::WaterMark.new(watemark.elements["Identifier"].text, watemark.elements["XPosition"].text.to_i, watemark.elements["YPosition"].text.to_i, watemark.elements["Format"].text)
282
+ watermarks << grabzItWaterMark
283
+ end
284
+
285
+ return watermarks
286
+ end
287
+
288
+ # Add a new custom watermark
289
+ # @param identifier [String] the identifier you want to give the custom watermark. It is important that this identifier is unique.
290
+ # @param path [String] the absolute path of the watermark on your server. For instance C:/watermark/1.png
291
+ # @param xpos [Integer] the horizontal position you want the screenshot to appear at: Left = 0, Center = 1, Right = 2
292
+ # @param ypos [Integer] the vertical position you want the screenshot to appear at: Top = 0, Middle = 1, Bottom = 2
293
+ # @return [Boolean] returns true if the watermark was successfully set
294
+ # @raise [RuntimeError] if the GrabzIt service reports an error with the request it will be raised as a RuntimeError
295
+ def add_watermark(identifier, path, xpos, ypos)
296
+ if !File.file?(path)
297
+ raise "File: " + path + " does not exist"
298
+ end
299
+ sig = Digest::MD5.hexdigest(nil_check(@applicationSecret)+"|"+nil_check(identifier)+"|"+nil_int_check(xpos)+"|"+nil_int_check(ypos));
300
+
301
+ boundary = '--------------------------'+Time.now.to_f.to_s
302
+
303
+ url = WebServicesBaseURL + "addwatermark.ashx"
304
+ uri = URI.parse(url)
305
+
306
+ file = File.open(path, "rb")
307
+ data = file.read
308
+
309
+ post_body = Array.new
310
+ post_body << "\r\n--"+boundary+"\r\n"
311
+ post_body << "Content-Disposition: form-data; name=\"watermark\"; filename=\""+File.basename(path)+"\"\r\nContent-Type: image/jpeg\r\n\r\n"
312
+ post_body << data
313
+ post_body << "\r\n--"+boundary+"\r\n"
314
+
315
+ post_body << "Content-Disposition: form-data; name=\"key\"\r\n\r\n"
316
+ post_body << CGI.escape(nil_check(@applicationKey))
317
+ post_body << "\r\n--"+boundary+"\r\n"
318
+
319
+ post_body << "Content-Disposition: form-data; name=\"identifier\"\r\n\r\n"
320
+ post_body << CGI.escape(nil_check(identifier))
321
+ post_body << "\r\n--"+boundary+"\r\n"
322
+
323
+ post_body << "Content-Disposition: form-data; name=\"xpos\"\r\n\r\n"
324
+ post_body << nil_check(xpos)
325
+ post_body << "\r\n--"+boundary+"\r\n"
326
+
327
+ post_body << "Content-Disposition: form-data; name=\"ypos\"\r\n\r\n"
328
+ post_body << nil_check(ypos)
329
+ post_body << "\r\n--"+boundary+"\r\n"
330
+
331
+ post_body << "Content-Disposition: form-data; name=\"sig\"\r\n\r\n"
332
+ post_body << sig
333
+ post_body << "\r\n--"+boundary+"--\r\n"
334
+
335
+ request = Net::HTTP::Post.new(url)
336
+ request.content_type = "multipart/form-data, boundary="+boundary
337
+ request.body = post_body.join
338
+
339
+ response = Net::HTTP.new(uri.host, uri.port).start {|http| http.request(request) }
340
+
341
+ return (get_result_value(response.body(), "Result") == TrueString)
342
+ end
343
+
344
+ # Delete a custom watermark
345
+ # @param identifier [String] the identifier of the custom watermark you want to delete
346
+ # @return [Boolean] returns true if the watermark was successfully deleted
347
+ # @raise [RuntimeError] if the GrabzIt service reports an error with the request it will be raised as a RuntimeError
348
+ def delete_watermark(identifier)
349
+ sig = Digest::MD5.hexdigest(nil_check(@applicationSecret)+"|"+nil_check(identifier))
350
+
351
+ qs = "key=" +CGI.escape(nil_check(@applicationKey))+"&identifier="+CGI.escape(nil_check(identifier))+"&sig="+sig
352
+
353
+ return (get_result_value(get(WebServicesBaseURL + "deletewatermark.ashx?" + qs), "Result") == TrueString)
354
+ end
355
+
356
+ # This method calls the GrabzIt web service to take the screenshot.
357
+ # @param url [String] the URL that the screenshot should be made of
358
+ # @param callback [String, nil] the handler the GrabzIt web service should call after it has completed its work
359
+ # @param customId [String, nil] custom identifier that you can pass through to the screenshot webservice. This will be returned with the callback URL you have specified.
360
+ # @param browserWidth [Integer, nil] the width of the browser in pixels
361
+ # @param browserHeight [Integer, nil] the height of the browser in pixels
362
+ # @param width [Integer, nil] the width of the resulting thumbnail in pixels
363
+ # @param height [Integer, nil] the height of the resulting thumbnail in pixels
364
+ # @param format [String, nil] the format the screenshot should be in: bmp8, bmp16, bmp24, bmp, gif, jpg, png
365
+ # @param delay [Integer, nil] the number of milliseconds to wait before taking the screenshot
366
+ # @param targetElement [String, nil] the id of the only HTML element in the web page to turn into a screenshot
367
+ # @return [String] returns the unique identifier of the screenshot. This can be used to get the screenshot with the get_result method
368
+ # @raise [RuntimeError] if the GrabzIt service reports an error with the request it will be raised as a RuntimeError
369
+ # @deprecated Use {#set_image_options} and {#save} instead.
370
+ def take_picture(url, callback = nil, customId = nil, browserWidth = nil, browserHeight = nil, width = nil, height = nil, format = nil, delay = nil, targetElement = nil)
371
+ set_image_options(url, customId, browserWidth, browserHeight, width, height, format, delay, targetElement)
372
+ return save(callback)
373
+ end
374
+
375
+ # This method takes the screenshot and then saves the result to a file. WARNING this method is synchronous
376
+ # @param url [String] the URL that the screenshot should be made of
377
+ # @param saveToFile [String] the file path that the screenshot should saved to
378
+ # @param browserWidth [Integer, nil] the width of the browser in pixels
379
+ # @param browserHeight [Integer, nil] the height of the browser in pixels
380
+ # @param width [Integer, nil] the width of the resulting thumbnail in pixels
381
+ # @param height [Integer, nil] the height of the resulting thumbnail in pixels
382
+ # @param format [String, nil] the format the screenshot should be in: bmp8, bmp16, bmp24, bmp, gif, jpg, png
383
+ # @param delay [Integer, nil] the number of milliseconds to wait before taking the screenshot
384
+ # @param targetElement [String, nil] the id of the only HTML element in the web page to turn into a screenshot
385
+ # @example Synchronously save the screenshot to test.jpg
386
+ # save_picture('images/test.jpg')
387
+ # @return [Boolean] returns the true if it is successfull otherwise it throws an exception
388
+ # @raise [RuntimeError] if the screenshot cannot be saved a RuntimeError will be raised that will contain an explanation
389
+ # @deprecated Use {#set_image_options} and {#save_to} instead.
390
+ def save_picture(url, saveToFile, browserWidth = nil, browserHeight = nil, width = nil, height = nil, format = nil, delay = nil, targetElement = nil)
391
+ set_image_options(url, nil, browserWidth, browserHeight, width, height, format, delay, targetElement)
392
+ return save_to(saveToFile)
393
+ end
394
+
395
+ # This method returns the image itself. If nothing is returned then something has gone wrong or the image is not ready yet.
396
+ # @param id [String] the id of the screenshot
397
+ # @return [Object] returns the screenshot
398
+ # @deprecated Use {#get_result} instead.
399
+ def get_picture(id)
400
+ return get_result(id)
401
+ end
402
+
403
+ private
404
+ def get(url)
405
+ Net::HTTP.get(URI.parse(url))
406
+ end
407
+
408
+ private
409
+ def b_to_str(bValue)
410
+ if bValue
411
+ return 1.to_s
412
+ end
413
+ return 0.to_s
414
+ end
415
+
416
+ private
417
+ def nil_check(param)
418
+ if param == nil
419
+ return ""
420
+ end
421
+ return param
422
+ end
423
+
424
+ private
425
+ def nil_int_check(param)
426
+ return param.to_i.to_s
427
+ end
428
+
429
+ private
430
+ def get_result_value(result, field)
431
+ doc = REXML::Document.new(result)
432
+
433
+ message = doc.root.elements["Message"].text()
434
+ value = doc.root.elements[field].text()
435
+
436
+ if message != nil
437
+ raise message
438
+ end
439
+
440
+ return value
441
+ end
442
+ end
443
+ end
@@ -0,0 +1,45 @@
1
+ module GrabzIt
2
+ # This class represents the cookies stored in GrabzIt
3
+ # @version 2.0
4
+ # @author GrabzIt
5
+ class Cookie
6
+ # @api private
7
+ def initialize(name = '', domain = '', value = '', path = '', httpOnly = false, expires = nil, type = nil)
8
+ @Name = name
9
+ @Value = value
10
+ @Domain = domain
11
+ @Path = path
12
+ @HttpOnly = httpOnly
13
+ @Expires = expires
14
+ @Type = type
15
+ end
16
+ # @return [String] the name of the cookie
17
+ def name
18
+ @Name
19
+ end
20
+ # @return [String] the value of the cookie
21
+ def value
22
+ @Value
23
+ end
24
+ # @return [String] the domain of the cookie
25
+ def domain
26
+ @Domain
27
+ end
28
+ # @return [String] the path of the cookie
29
+ def path
30
+ @Path
31
+ end
32
+ # @return [Boolean] is the cookie httponly
33
+ def httpOnly
34
+ @HttpOnly
35
+ end
36
+ # @return [String] the date and time the cookie expires
37
+ def expires
38
+ @Expires
39
+ end
40
+ # @return [String] the type of cookie
41
+ def type
42
+ @Type
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,30 @@
1
+ module GrabzIt
2
+ # This class represents the screenshot status
3
+ # @version 2.0
4
+ # @author GrabzIt
5
+ class ScreenShotStatus
6
+ # @api private
7
+ def initialize(processing = false, cached = false, expired = false, message = '')
8
+ @Processing = processing
9
+ @Cached = cached
10
+ @Expired = expired
11
+ @Message = message
12
+ end
13
+ # @return [Boolean] if true the screenshot is still being processed
14
+ def processing
15
+ @Processing
16
+ end
17
+ # @return [Boolean] if true the screenshot has been cached
18
+ def cached
19
+ @Cached
20
+ end
21
+ # @return [Boolean] if true the screenshot has expired
22
+ def expired
23
+ @Expired
24
+ end
25
+ # @return [String] returns any error messages associated with the screenshot
26
+ def message
27
+ @Message
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ module GrabzIt
2
+ # This class represents the custom watermarks stored in GrabzIt
3
+ # @version 2.0
4
+ # @author GrabzIt
5
+ class WaterMark
6
+ # @api private
7
+ def initialize(identifier = '', xPosition = 0, yPosition = 0, format = '')
8
+ @Identifier = identifier
9
+ @XPosition = xPosition
10
+ @YPosition = yPosition
11
+ @Format = format
12
+ end
13
+ # @return [String] the identifier of the watermark
14
+ def identifier
15
+ @Identifier
16
+ end
17
+ # @return [Integer] the horizontal postion of the watermark. 0 = Left, 1 = Center, 2 = Right
18
+ def xPosition
19
+ @XPosition
20
+ end
21
+ # @return [Integer] the vertical postion of the watermark. 0 = Top, 1 = Middle, 2 = Bottom
22
+ def yPosition
23
+ @YPosition
24
+ end
25
+ # @return [String] the format of the watermark
26
+ def format
27
+ @Format
28
+ end
29
+ end
30
+ end
data/test/test.png ADDED
Binary file
@@ -0,0 +1,185 @@
1
+ require 'test/unit'
2
+ require 'grabzit'
3
+
4
+ class GrabzItTest < Test::Unit::TestCase
5
+ Cookie_Name = "test_cookie"
6
+ Cookie_Domain = ".example.com"
7
+ WaterMark_Identifier = "test_watermark"
8
+ WaterMark_Path = "test/test.png"
9
+ Screenshot_Path = "test/tmp.jpg"
10
+
11
+ def setup
12
+ @applicationKey = "c3VwcG9ydEBncmFiei5pdA=="
13
+ @applicationSecret = "AD8/aT8/Pz8/Tz8/PwJ3Pz9sVSs/Pz8/Pz9DOzJoPwY="
14
+ #Set to true if the account is subscribed
15
+ @isSubscribedAccount = true
16
+ end
17
+
18
+ def test_application_key
19
+ assert_not_nil(@applicationKey, "Please set your application key variable in the setup method. You can get a application key for free from: http://grabz.it")
20
+ end
21
+
22
+ def test_application_secret
23
+ assert_not_nil(@applicationSecret, "Please set your application secret variable in the setup method. You can get a application key for free from: http://grabz.it")
24
+ end
25
+
26
+ def test_take_picture
27
+ assert_nothing_raised "An error occured when trying to take a picture" do
28
+ grabzItClient = GrabzIt::Client.new(@applicationKey, @applicationSecret)
29
+ assert_not_nil(grabzItClient.take_picture("http://www.google.com"), "Failed to take screenshot using depreceated method")
30
+ end
31
+ end
32
+
33
+ def test_take_pdf
34
+ assert_nothing_raised "An error occured when trying to take a pdf screenshot" do
35
+ grabzItClient = GrabzIt::Client.new(@applicationKey, @applicationSecret)
36
+ grabzItClient.set_pdf_options("http://www.google.com")
37
+ assert_not_nil(grabzItClient.save(), "Failed to take screenshot using set_pdf_options method")
38
+ end
39
+ end
40
+
41
+ def test_take_image
42
+ assert_nothing_raised "An error occured when trying to take a image screenshot" do
43
+ grabzItClient = GrabzIt::Client.new(@applicationKey, @applicationSecret)
44
+ grabzItClient.set_image_options("http://www.google.com")
45
+ assert_not_nil(grabzItClient.save(), "Failed to take screenshot using set_image_options method")
46
+ end
47
+ end
48
+
49
+ def test_save_picture
50
+ if File.file?(Screenshot_Path)
51
+ File.delete(Screenshot_Path)
52
+ end
53
+ assert_nothing_raised "An error occured when trying to take a image screenshot" do
54
+ grabzItClient = GrabzIt::Client.new(@applicationKey, @applicationSecret)
55
+ assert_equal(true, grabzItClient.save_picture("http://www.google.com", Screenshot_Path), "Screenshot not saved")
56
+ assert_equal(true, File.file?(Screenshot_Path), "Not saved screenshot file")
57
+ end
58
+ File.delete(Screenshot_Path)
59
+ end
60
+
61
+ def test_status
62
+ assert_nothing_raised "An error occured when trying to test the status method" do
63
+ grabzItClient = GrabzIt::Client.new(@applicationKey, @applicationSecret)
64
+ grabzItClient.set_image_options("http://www.google.com")
65
+ id = grabzItClient.save()
66
+ status = grabzItClient.get_status(id)
67
+
68
+ assert_equal(true, (status.processing || status.cached), "Failed to get correct screenshot status!")
69
+ end
70
+ end
71
+
72
+ def test_add_cookie
73
+ assert_nothing_raised "An error occured when trying to add a cookie" do
74
+ grabzItClient = GrabzIt::Client.new(@applicationKey, @applicationSecret)
75
+
76
+ if @isSubscribedAccount
77
+ grabzItClient.set_cookie(Cookie_Name, Cookie_Domain)
78
+ elsif
79
+ assert_raise RuntimeError, "User not subscribed should throw error. If user is subscribed please set @isSubscribedAccount in the setup method" do
80
+ grabzItClient.set_cookie(Cookie_Name, Cookie_Domain)
81
+ end
82
+ return
83
+ end
84
+
85
+ assert(find_cookie(grabzItClient), "Set cookie has not been found!")
86
+ end
87
+ end
88
+
89
+ def test_delete_cookie
90
+ assert_nothing_raised "An error occured when trying to add a cookie" do
91
+ grabzItClient = GrabzIt::Client.new(@applicationKey, @applicationSecret)
92
+ if @isSubscribedAccount
93
+ grabzItClient.set_cookie(Cookie_Name, Cookie_Domain)
94
+ elsif
95
+ assert_raise RuntimeError, "User not subscribed should throw error. If user is subscribed please set @isSubscribedAccount in the setup method" do
96
+ grabzItClient.set_cookie(Cookie_Name, Cookie_Domain)
97
+ end
98
+ return
99
+ end
100
+
101
+ assert_equal(true, find_cookie(grabzItClient), "Test cookie not found!")
102
+
103
+ grabzItClient.delete_cookie(Cookie_Name, Cookie_Domain)
104
+
105
+ assert_equal(false, find_cookie(grabzItClient), "Failed to delete cookie!")
106
+ end
107
+ end
108
+
109
+ def test_delete_watermark
110
+ assert_nothing_raised "An error occured when trying to add a watermark" do
111
+ grabzItClient = GrabzIt::Client.new(@applicationKey, @applicationSecret)
112
+ begin
113
+ grabzItClient.delete_watermark(WaterMark_Identifier)
114
+ rescue
115
+ end
116
+
117
+ if @isSubscribedAccount
118
+ grabzItClient.add_watermark(WaterMark_Identifier, WaterMark_Path, 2, 2)
119
+ elsif
120
+ assert_raise RuntimeError, "User not subscribed should throw error. If user is subscribed please set @isSubscribedAccount in the setup method" do
121
+ grabzItClient.add_watermark(WaterMark_Identifier, WaterMark_Path, 2, 2)
122
+ end
123
+ return
124
+ end
125
+
126
+ assert_equal(true, find_watermark(grabzItClient), "Test watermark not found!")
127
+
128
+ grabzItClient.delete_watermark(WaterMark_Identifier)
129
+
130
+ assert_equal(false, find_watermark(grabzItClient), "Failed to delete watermark!")
131
+ end
132
+ end
133
+
134
+ def test_add_watermark
135
+ assert_nothing_raised "An error occured when trying to add a watermark" do
136
+ grabzItClient = GrabzIt::Client.new(@applicationKey, @applicationSecret)
137
+ begin
138
+ grabzItClient.delete_watermark(WaterMark_Identifier)
139
+ rescue
140
+ end
141
+ if @isSubscribedAccount
142
+ grabzItClient.add_watermark(WaterMark_Identifier, WaterMark_Path, 2, 2)
143
+ elsif
144
+ assert_raise RuntimeError, "User not subscribed should throw error. If user is subscribed please set @isSubscribedAccount in the setup method" do
145
+ grabzItClient.add_watermark(WaterMark_Identifier, WaterMark_Path, 2, 2)
146
+ end
147
+ return
148
+ end
149
+
150
+ assert(find_watermark(grabzItClient), "Set watermark has not been found!")
151
+ end
152
+ end
153
+
154
+ def find_cookie(grabzItClient)
155
+ cookies = grabzItClient.get_cookies(Cookie_Domain)
156
+
157
+ if cookies == nil
158
+ return false
159
+ end
160
+
161
+ cookies.each { |cookie|
162
+ if cookie.name == Cookie_Name
163
+ return true
164
+ end
165
+ }
166
+
167
+ return false
168
+ end
169
+
170
+ def find_watermark(grabzItClient)
171
+ watermarks = grabzItClient.get_watermarks(WaterMark_Identifier)
172
+
173
+ if watermarks == nil
174
+ return false
175
+ end
176
+
177
+ watermarks.each { |watermark|
178
+ if watermark.identifier == WaterMark_Identifier
179
+ return true
180
+ end
181
+ }
182
+
183
+ return false
184
+ end
185
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grabzit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 2.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,18 +9,40 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-22 00:00:00.000000000 Z
13
- dependencies: []
14
- description: Automatically create and download website screenshots with GrabzIt for
15
- free.
12
+ date: 2013-03-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: ! 'Automatically create screenshots of website for free, with GrabzIt.
31
+ Screenshots can be output in a variety of formats including: JPEG, PNG, TIFF, BMP,
32
+ PDF, CSV and XLSX.'
16
33
  email: support@grabz.it
17
34
  executables: []
18
35
  extensions: []
19
36
  extra_rdoc_files: []
20
37
  files:
21
- - lib/grabzitclient.rb
22
- - lib/grabzitcookie.rb
23
- - lib/screenshotstatus.rb
38
+ - Rakefile
39
+ - lib/grabzit.rb
40
+ - lib/grabzit/client.rb
41
+ - lib/grabzit/cookie.rb
42
+ - lib/grabzit/screenshotstatus.rb
43
+ - lib/grabzit/watermark.rb
44
+ - test/test.png
45
+ - test/test_grabzit.rb
24
46
  homepage: http://grabz.it/api/ruby
25
47
  licenses: []
26
48
  post_install_message:
@@ -41,8 +63,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
63
  version: '0'
42
64
  requirements: []
43
65
  rubyforge_project:
44
- rubygems_version: 1.8.24
66
+ rubygems_version: 1.8.23
45
67
  signing_key:
46
68
  specification_version: 3
47
69
  summary: GrabzIt Ruby Client
48
70
  test_files: []
71
+ has_rdoc:
data/lib/grabzitclient.rb DELETED
@@ -1,268 +0,0 @@
1
- require 'digest/md5'
2
- require 'net/http'
3
- require 'rexml/document'
4
- require 'cgi'
5
- require File.join(File.dirname(__FILE__), 'screenshotstatus')
6
- require File.join(File.dirname(__FILE__), 'grabzitcookie')
7
-
8
- class GrabzItClient
9
-
10
- WebServicesBaseURL = "http://grabz.it/services/"
11
- TrueString = "True"
12
-
13
-
14
- def initialize(applicationKey, applicationSecret)
15
- @applicationKey = applicationKey
16
- @applicationSecret = applicationSecret
17
- end
18
-
19
-
20
- #
21
- #This method calls the GrabzIt web service to take the screenshot.
22
- #
23
- #url - The URL that the screenshot should be made of
24
- #callback - The handler the GrabzIt web service should call after it has completed its work
25
- #browserWidth - The width of the browser in pixels
26
- #browserHeight - The height of the browser in pixels
27
- #outputHeight - The height of the resulting thumbnail in pixels
28
- #outputWidth - The width of the resulting thumbnail in pixels
29
- #customId - A custom identifier that you can pass through to the screenshot webservice. This will be returned with the callback URL you have specified.
30
- #format - The format the screenshot should be in: bmp8, bmp16, bmp24, bmp, gif, jpg, png
31
- #delay - The number of milliseconds to wait before taking the screenshot
32
- #targetElement - The id of the only HTML element in the web page to turn into a screenshot
33
- #
34
- #This function returns the unique identifier of the screenshot. This can be used to get the screenshot with the GetPicture method.
35
- #
36
- def take_picture(url, callback = nil, customId = nil, browserWidth = nil, browserHeight = nil, width = nil, height = nil, format = nil, delay = nil, targetElement = nil)
37
- qs = "key=" + CGI.escape(@applicationKey) + "&url=" + CGI.escape(url) + "&width=" + nil_check(width) + "&height=" + nil_check(height) + "&format=" + nil_check(format) + "&bwidth=" + nil_check(browserWidth) + "&bheight=" + nil_check(browserHeight) + "&callback=" + CGI.escape(nil_check(callback)) + "&customid=" + CGI.escape(nil_check(customId)) + "&delay=" + nil_check(delay) + "&target=" + CGI.escape(nil_check(targetElement))
38
- sig = Digest::MD5.hexdigest(@applicationSecret+"|"+url+"|"+nil_check(callback)+"|"+nil_check(format)+"|"+nil_check(height)+"|"+nil_check(width)+"|"+nil_check(browserHeight)+"|"+nil_check(browserWidth)+"|"+nil_check(customId)+"|"+nil_check(delay)+"|"+nil_check(targetElement))
39
- qs = qs + "&sig=" + sig
40
-
41
- result = get(WebServicesBaseURL + "takepicture.ashx?" + qs)
42
-
43
- doc = REXML::Document.new(result)
44
-
45
- message = doc.root.elements["Message"].text()
46
- id = doc.root.elements["ID"].text()
47
-
48
- if message != nil
49
- raise message
50
- end
51
-
52
- return id
53
- end
54
-
55
- #
56
- #This method takes the screenshot and then saves the result to a file. WARNING this method is synchronous.
57
- #
58
- #url - The URL that the screenshot should be made of
59
- #saveToFile - The file path that the screenshot should saved to: e.g. images/test.jpg
60
- #browserWidth - The width of the browser in pixels
61
- #browserHeight - The height of the browser in pixels
62
- #outputHeight - The height of the resulting thumbnail in pixels
63
- #outputWidth - The width of the resulting thumbnail in pixels
64
- #format - The format the screenshot should be in: bmp8, bmp16, bmp24, bmp, gif, jpg, png
65
- #delay - The number of milliseconds to wait before taking the screenshot
66
- #targetElement - The id of the only HTML element in the web page to turn into a screenshot
67
- #
68
- #This function returns the true if it is successfull otherwise it throws an exception.
69
- #
70
- def save_picture(url, saveToFile, browserWidth = nil, browserHeight = nil, width = nil, height = nil, format = nil, delay = nil, targetElement = nil)
71
- id = take_picture(url, nil, nil, browserWidth, browserHeight, width, height, format, delay, targetElement)
72
-
73
- #Wait for it to be ready.
74
- while true do
75
- status = get_status(id)
76
-
77
- if !status.cached && !status.processing
78
- raise "The screenshot did not complete with the error: " + status.Message
79
- break;
80
- elsif status.cached
81
- result = get_picture(id)
82
- if !result
83
- raise "The screenshot image could not be found on GrabzIt."
84
- break
85
- end
86
-
87
- screenshot = File.new(saveToFile, "wb")
88
- screenshot.write(result)
89
- screenshot.close
90
-
91
- break
92
- end
93
-
94
- sleep(1)
95
- end
96
-
97
- return true
98
- end
99
-
100
- #
101
- #Get the current status of a GrabzIt screenshot
102
- #
103
- #id - The id of the screenshot
104
- #
105
- #This function returns a Status object representing the screenshot
106
- #
107
- def get_status(id)
108
- result = get(WebServicesBaseURL + "getstatus.ashx?id=" + id)
109
-
110
- doc = REXML::Document.new(result)
111
-
112
- processing = doc.root.elements["Processing"].text()
113
- cached = doc.root.elements["Cached"].text()
114
- expired = doc.root.elements["Expired"].text()
115
- message = doc.root.elements["Message"].text()
116
-
117
- status = ScreenShotStatus.new()
118
- status.processing = (processing == TrueString)
119
- status.cached = (cached == TrueString)
120
- status.expired = (expired == TrueString)
121
- status.message = message
122
-
123
- return status
124
- end
125
-
126
- #
127
- #This method returns the image itself. If nothing is returned then something has gone wrong or the image is not ready yet.
128
- #
129
- #id - The unique identifier of the screenshot, returned by the callback handler or the TakePicture method
130
- #
131
- #This function returns the screenshot
132
- #
133
- def get_picture(id)
134
- result = get(WebServicesBaseURL + "getpicture.ashx?id=" + id)
135
-
136
- if result == nil
137
- return nil
138
- end
139
-
140
- return result
141
- end
142
-
143
- #
144
- #Get all the cookies that GrabzIt is using for a particular domain. This may include your user set cookies as well.
145
- #
146
- #domain - The domain to return cookies for.
147
- #
148
- #This function returns an array of cookies
149
- #
150
- def get_cookies(domain)
151
- sig = Digest::MD5.hexdigest(@applicationSecret+"|"+domain)
152
-
153
- qs = "key=" +CGI.escape(@applicationKey)+"&domain="+CGI.escape(domain)+"&sig="+sig
154
-
155
- result = get(WebServicesBaseURL + "getcookies.ashx?" + qs)
156
-
157
- doc = REXML::Document.new(result)
158
-
159
- message = doc.root.elements["Message"].text()
160
-
161
- if message != nil
162
- raise message
163
- end
164
-
165
- cookies = Array.new
166
-
167
- xml_cookies = doc.elements.to_a("//WebResult/Cookies/Cookie")
168
- xml_cookies.each do |cookie|
169
- grabzItCookie = GrabzItCookie.new()
170
- grabzItCookie.name = cookie.elements["Name"].text
171
- grabzItCookie.value = cookie.elements["Value"].text
172
- grabzItCookie.domain = cookie.elements["Domain"].text
173
- grabzItCookie.path = cookie.elements["Path"].text
174
- grabzItCookie.httpOnly = (cookie.elements["HttpOnly"].text == TrueString)
175
- if cookie.elements["Expires"] != nil
176
- grabzItCookie.expires = cookie.elements["Expires"].text
177
- end
178
- grabzItCookie.type = cookie.elements["Type"].text
179
-
180
- cookies << grabzItCookie
181
- end
182
-
183
- return cookies
184
- end
185
-
186
- #
187
- #Sets a new custom cookie on GrabzIt, if the custom cookie has the same name and domain as a global cookie the global
188
- #cookie is overridden.
189
- #
190
- #This can be useful if a websites functionality is controlled by cookies.
191
- #
192
- #name - The name of the cookie to set.
193
- #domain - The domain of the website to set the cookie for.
194
- #value - The value of the cookie.
195
- #path - The website path the cookie relates to.
196
- #httponly - Is the cookie only used on HTTP
197
- #expires - When the cookie expires. Pass a null value if it does not expire.
198
- #
199
- #This function returns true if the cookie was successfully set.
200
- #
201
- def set_cookie(name, domain, value = "", path = "/", httponly = false, expires = "")
202
- sig = Digest::MD5.hexdigest(@applicationSecret+"|"+name+"|"+domain+"|"+nil_check(value)+"|"+nil_check(path)+"|"+b_to_int(httponly).to_s+"|"+nil_check(expires)+"|0")
203
-
204
- qs = "key=" +CGI.escape(@applicationKey)+"&domain="+CGI.escape(domain)+"&name="+CGI.escape(name)+"&value="+CGI.escape(nil_check(value))+"&path="+CGI.escape(nil_check(path))+"&httponly="+b_to_int(httponly).to_s+"&expires="+nil_check(expires)+"&sig="+sig
205
-
206
- result = get(WebServicesBaseURL + "setcookie.ashx?" + qs)
207
-
208
- doc = REXML::Document.new(result)
209
-
210
- message = doc.root.elements["Message"].text()
211
- resultVal = doc.root.elements["Result"].text()
212
-
213
- if message != nil
214
- raise message
215
- end
216
-
217
- return (resultVal == TrueString)
218
- end
219
-
220
- #
221
- #Delete a custom cookie or block a global cookie from being used.
222
- #
223
- #name - The name of the cookie to delete
224
- #domain - The website the cookie belongs to
225
- #
226
- #This function returns true if the cookie was successfully set.
227
- #
228
- def delete_cookie(name, domain)
229
- sig = Digest::MD5.hexdigest(@applicationSecret+"|"+name+"|"+domain+"|1")
230
-
231
- qs = "key=" + CGI.escape(@applicationKey)+"&domain="+CGI.escape(domain)+"&name="+CGI.escape(name)+"&delete=1&sig="+sig
232
-
233
- result = get(WebServicesBaseURL + "setcookie.ashx?" + qs)
234
-
235
- doc = REXML::Document.new(result)
236
-
237
- message = doc.root.elements["Message"].text()
238
- resultVal = doc.root.elements["Result"].text()
239
-
240
- if message != nil
241
- raise message
242
- end
243
-
244
- return (resultVal == TrueString)
245
- end
246
-
247
-
248
- private
249
- def get(url)
250
- Net::HTTP.get(URI.parse(url))
251
- end
252
-
253
- private
254
- def b_to_int(bValue)
255
- if bValue
256
- return 1
257
- end
258
- return 1
259
- end
260
-
261
- private
262
- def nil_check(param)
263
- if param == nil
264
- return ""
265
- end
266
- return param
267
- end
268
- end
data/lib/grabzitcookie.rb DELETED
@@ -1,53 +0,0 @@
1
- class GrabzItCookie
2
- def initialize
3
- @Name = ''
4
- @Value = ''
5
- @Domain = ''
6
- @Path = ''
7
- @HttpOnly = false
8
- @Expires = nil
9
- @Type = nil
10
- end
11
- def name
12
- @Name
13
- end
14
- def name=(value)
15
- @Name = value
16
- end
17
- def value
18
- @Value
19
- end
20
- def value=(value)
21
- @Value = value
22
- end
23
- def domain
24
- @Domain
25
- end
26
- def domain=(value)
27
- @Domain = value
28
- end
29
- def path
30
- @Path
31
- end
32
- def path=(value)
33
- @Path = value
34
- end
35
- def httpOnly
36
- @HttpOnly
37
- end
38
- def httpOnly=(value)
39
- @HttpOnly = value
40
- end
41
- def expires
42
- @Expires
43
- end
44
- def expires=(value)
45
- @Expires = value
46
- end
47
- def type
48
- @Type
49
- end
50
- def type=(value)
51
- @Type = value
52
- end
53
- end
@@ -1,32 +0,0 @@
1
- class ScreenShotStatus
2
- def initialize
3
- @Processing = false
4
- @Cached = false
5
- @Expired = false
6
- @Message = ''
7
- end
8
- def processing
9
- @Processing
10
- end
11
- def processing=(value)
12
- @Processing = value
13
- end
14
- def cached
15
- @Cached
16
- end
17
- def cached=(value)
18
- @Cached = value
19
- end
20
- def expired
21
- @Expired
22
- end
23
- def expired=(value)
24
- @Expired = value
25
- end
26
- def message
27
- @Message
28
- end
29
- def message=(value)
30
- @Message = value
31
- end
32
- end