Sha256: 77c8823a1a92ed4efecd61a62fdf7f3f0dd757a869249bb2836d5784e21bbd00

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

require 'version'
require 'book/response'

require 'httparty'
require 'cgi'

module GoogleBooks

  include HTTParty
  format :json
  
  class << self

    attr_accessor :parameters

    # Submits query to the current Google API for Books.
		#
    # 1st param passes all varieties of acceptable query strings
		#
    # 2nd param passes options hash:
    # * :count passes number of results to display per page (default=5)
    # * :page passes the page number (default=1)
    # * :api_key passes the application specific Google API key
		#
    # 3rd parameter optionally passes user's IP address
    # * User IP may be require in order for request to be made to the
    #   Google API from applications residing on decentralized cloud servers
    #   See http://www.google.com/support/forum/p/booksearch-apis/thread?tid=2034bed9a98c15cb&hl=en

    def search(query, options = {}, remote_ip = nil)
      (headers 'X-Forwarded-For' => remote_ip.to_s) unless remote_ip.nil?
      self.parameters = { 'q' => query }
      options[:page] ||= 1
      options[:count] ||= 5
      parameters['filter'] = options[:filter] if options[:filter]
      parameters['startIndex'] = options[:count] * (options[:page] - 1)
      parameters['maxResults'] = options[:count]
      parameters['key'] = options[:api_key] if options[:api_key]
      parameters['orderBy'] = 'newest' if options[:order_by].eql?('newest')
      parameters['country'] = options[:country]

      Response.new(get(url.to_s))
    end

    private

    def query
      parameters.
        map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.
        join('&')
    end

    # Queries the new Google API. The former Google Book Search API is deprecated
    # http://code.google.com/apis/books/docs/gdata/developers_guide_protocol.html
    def url
      URI::HTTPS.build(:host  => 'www.googleapis.com',
                      :path  => '/books/v1/volumes',
                      :query => query)
    end
  end
end


Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
googlebooks-0.0.9 lib/googlebooks.rb