Object
Class for uploading, loading, and deleting documents using the Vuzit Web Service API: vuzit.com/developer/documents_api
Deletes a document by the ID. Returns true if it succeeded. It throws a Vuzit::Exception on failure. It returns true on success.
Example:
Vuzit::Service.public_key = 'YOUR_PUBLIC_API_KEY'
Vuzit::Service.private_key = 'YOUR_PRIVATE_API_KEY'
result = Vuzit::Document.destroy("DOCUMENT_ID")
# File lib/vuzitruby/document.rb, line 62 def self.destroy(id) timestamp = Time.now sig = CGI.escape(Vuzit::Service::get_signature('destroy', id, timestamp)) # Create the connection uri = URI.parse(Vuzit::Service.service_url) http = Net::HTTP.new(uri.host, uri.port) query = "/documents/#{id}.xml?key=#{Vuzit::Service.public_key}" + "&signature=#{sig}×tamp=#{timestamp.to_i}" request = Net::HTTP::Delete.new(query) response = http.start { http.request(request) } if response.code.to_i != 200 # Some type of error ocurred begin doc = REXML::Document.new(response.body) rescue Exception => ex raise Vuzit::Exception.new("XML error: #{ex.message}") end if doc.root != nil code = doc.root.elements['code'] if code != nil raise Vuzit::Exception.new(doc.root.elements['msg'].text, code.text.to_i); end end # At this point we don't know what the error is raise Vuzit::Exception.new("Unknown error occurred #{response.message}", response.code) end debug(response.code + " " + response.message + "\n") return true end
Finds a document by the ID. It throws a Vuzit::Exception on failure.
Example:
Vuzit::Service.public_key = 'YOUR_PUBLIC_API_KEY'
Vuzit::Service.private_key = 'YOUR_PRIVATE_API_KEY'
doc = Vuzit::Document.find("DOCUMENT_ID")
puts doc.id
puts doc.title
# File lib/vuzitruby/document.rb, line 109 def self.find(id) timestamp = Time.now sig = CGI.escape(Vuzit::Service::get_signature('show', id, timestamp)) # Create the connection uri = URI.parse(Vuzit::Service.service_url) http = Net::HTTP.new(uri.host, uri.port) query = "/documents/#{id}.xml?key=#{Vuzit::Service.public_key}" + "&signature=#{sig}×tamp=#{timestamp.to_i}" request = Net::HTTP::Get.new(query) response = http.start { http.request(request) } # TODO: Check if response.code.to_i != 200 begin doc = REXML::Document.new(response.body) rescue Exception => ex raise Vuzit::Exception.new("XML error: #{ex.message}") end if doc.root == nil raise Vuzit::Exception.new("No response from server"); end debug(response.code + " " + response.message + "\n" + response.body) code = doc.root.elements['code'] if code != nil raise Vuzit::Exception.new(doc.root.elements['msg'].text, code.text.to_i); end id = doc.root.elements['web_id'] if id == nil raise Vuzit::Exception.new("Unknown error occurred"); end result = Vuzit::Document.new result.id = id.text result.title = doc.root.elements['title'].text result.subject = doc.root.elements['subject'].text result.page_count = doc.root.elements['page_count'].text.to_i result.page_width = doc.root.elements['width'].text.to_i result.page_height = doc.root.elements['height'].text.to_i result.file_size = doc.root.elements['file_size'].text.to_i return result end
Uploads a file to Vuzit. It throws a Vuzit::Exception on failure.
Example:
Vuzit::Service.public_key = 'YOUR_PUBLIC_API_KEY'
Vuzit::Service.private_key = 'YOUR_PRIVATE_API_KEY'
doc = Vuzit::Document.upload("c:/path/to/document.pdf", :secure => true)
puts doc.id
# File lib/vuzitruby/document.rb, line 167 def self.upload(file, options = {}) raise ArgumentError, "Options must be a hash" unless options.kind_of? Hash timestamp = Time.now sig = Vuzit::Service::get_signature('create', nil, timestamp) # Make a request form fields = Hash.new fields[:format] = 'xml' fields[:key] = Vuzit::Service::public_key if options[:secure] != nil fields[:secure] = options[:secure] == true ? '1' : '0' else fields[:secure] = '1' end fields[:signature] = sig fields[:timestamp] = timestamp.to_i fields[:file_type] = options[:file_type] response = nil File.open(file, "rb") do |f| fields[:upload] = f response = send_request 'create', fields end debug(response.code + " " + response.message + "\n" + response.body) # TODO: check the response.code.to_i to make sure it's 201 begin doc = REXML::Document.new(response.body) rescue Exception => ex raise Vuzit::Exception.new("XML error: #{ex.message}") end if doc.root == nil raise Vuzit::Exception.new("No response from server"); end code = doc.root.elements['code'] if code != nil raise Vuzit::Exception.new(doc.root.elements['msg'].text, code.text.to_i); end id = doc.root.elements['web_id'] if id == nil raise Vuzit::Exception.new("Unknown error occurred"); end result = Vuzit::Document.new result.id = id.text return result end
Sends debug messages if activated
# File lib/vuzitruby/document.rb, line 226 def self.debug(text) $stderr.puts(text) if Vuzit::Service::debug == true end
Makes a HTTP POST.
# File lib/vuzitruby/document.rb, line 231 def self.send_request(method, fields = {}) # See if method is given raise ArgumentError, "Method should be given" if method.nil? || method.empty? debug("** Remote method call: #{method}; fields: #{fields.inspect}") # replace pesky hashes to prevent accidents fields = fields.stringify_keys # Complete fields with the method name fields['method'] = method fields.reject! { |k, v| v.nil? } debug("** POST parameters: #{fields.inspect}") # Create the connection uri = URI.parse(Vuzit::Service.service_url) http = Net::HTTP.new(uri.host, uri.port) # API methods can be SLOW. Make sure this is set to something big to prevent spurious timeouts http.read_timeout = 15 * 60 request = Net::HTTP::Post.new('/documents') request.multipart_params = fields tries = TRIES begin tries -= 1 res = http.request(request) rescue Exception $stderr.puts "Request encountered error, will retry #{tries} more." if tries > 0 # Retrying several times with sleeps is recommended. # This will prevent temporary downtimes at Scribd from breaking API applications sleep(20) retry end raise $! end return res end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.