grabzit 1.1.1 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
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