Sha256: 0acb02429a77e18fb89764c99c27c1598c5d6dd003b3caf5a007c20ad5e2499c

Contents?: true

Size: 1.53 KB

Versions: 4

Compression:

Stored size: 1.53 KB

Contents

require 'net/http'
require 'json'

class OpenBD
  API_BASE_URL = 'http://api.openbd.jp/v1/'.freeze

  class << self
    def get(isbns)
      request_url = prepare_url('get', isbns)
      response = Net::HTTP.get_response(URI::parse(request_url))
      create_body(response).select { |item| item != nil }
    end

    def bulk_get(isbns)
      request_url = prepare_url('get')
      response = Net::HTTP.post_form(URI::parse(request_url), isbn: normalize_isbns(isbns))
      create_body(response).select { |item| item != nil }
    end

    def coverage
      request_url = prepare_url('coverage')
      response = Net::HTTP.get_response(URI::parse(request_url))
      create_body(response)
    end

    def schema
      request_url = prepare_url('schema')
      response = Net::HTTP.get_response(URI::parse(request_url))
      create_body(response)
    end

    def create_body(response)
      JSON.parse response.body
    end

    def prepare_url(method, isbns = nil)
      if isbns.kind_of? String
        params = normalize_isbns(isbns)
        "#{API_BASE_URL}#{method}?isbn=#{params}"
      elsif isbns.kind_of? Array
        params = normalize_isbns(isbns)
        "#{API_BASE_URL}#{method}?isbn=#{params}"
      else
        "#{API_BASE_URL}#{method}"
      end
    end

    def normalize_isbns(isbns)
      params = ""
      if isbns.kind_of? String
        params << isbns
      elsif isbns.kind_of? Array
        isbns.each do |isbn|
          params << "#{isbn}, "
        end
        params.strip!.gsub!(/,$/,'')
      end

      params
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
openbd_api-0.3.1 lib/openbd/client.rb
openbd_api-0.3.0 lib/openbd/client.rb
openbd_api-0.2.1 lib/openbd/client.rb
openbd_api-0.2.0 lib/openbd/client.rb