require 'httparty' require 'will_paginate/collection' require 'ostruct' class GoogleCustomSearch include HTTParty base_uri 'https://www.googleapis.com/customsearch/v1' format :json default_params :cx => 'google-costom-searck-id', :key => 'google-api-key' def self.search(q = '', options = {}) return [] if q.blank? options[:page] ||= 1 options[:per_page] ||= 10 WillPaginate::Collection.create( options[:page], options[:per_page] ) do |pager| response = get('', :query => { :num => pager.per_page, :start => ( ( pager.current_page - 1) * pager.per_page ) + 1, :q => q }) puts response.inspect pager.replace( response['items'].map{|t| OpenStruct.new(t) } ) pager.total_entries = response['queries']['request'][0]['totalResults'] end end end